k近邻法(k-nearest neighbor,k-NN)是一种基本分类与回归方法。这里只讨论分类问题中的k近邻法。k近邻法的输入为实例的特征向量,对应于特征空间的点;输出的实例的类别,可以取多类。k近邻法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式进行预测。因此,k近邻法不具有显示的学习过程。k近邻法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。k值的选择、距离度量及分类决策机制规则是k近邻法的三个基本要素。
k近邻算法
k近邻算法简单、直观:给定训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类。
算法:k近邻法
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}
T={(x1,y1),(x2,y2),...,(xN,yN)}
其中
x
i
∈
χ
⊆
R
n
x_i\in \chi \subseteq R^n
xi∈χ⊆Rn为实例的特征向量,
y
i
∈
γ
=
{
c
1
,
c
2
,
.
.
.
,
c
K
}
y_i\in \gamma = \{c_1,c_2,...,c_K\}
yi∈γ={c1,c2,...,cK}为实例的类别,
i
=
1
,
2
,
.
.
.
,
N
i=1,2,...,N
i=1,2,...,N;实例特征向量x;
输出:实例x所属的类y。
(1)根据给定的距离度量,在训练集T中找出与x最邻近的k个点,涵盖这k个点的x的领域记作 N k ( x ) N_k(x) Nk(x)。
(2)在
N
k
(
x
)
N_k(x)
Nk(x)中根据分类决策规则(如多数表决)决定
x
x
x的类别y。
y
=
a
r
g
m
a
x
c
j
∑
x
j
∈
N
k
(
x
)
I
(
y
i
=
c
j
)
,
i
=
1
,
2
,
.
.
.
,
N
;
j
=
1
,
2
,
.
.
.
,
K
y = arg \space max_{c_j} \sum_{x_j\in N_k(x)}I(y_i=c_j),\quad i=1,2,...,N; \quad j=1,2,...,K
y=arg maxcjxj∈Nk(x)∑I(yi=cj),i=1,2,...,N;j=1,2,...,K
其中,I为指示函数,即当
y
i
=
c
j
y_i=c_j
yi=cj时
I
I
I为1,否则
I
I
I为0。
k近邻法的特殊情况是k=1的情形,称为最近邻算法。对于输入的实例点(特征向量)x,最邻近法将训练数据集中与x最邻近点的类作为x的类。
k近邻法没有显示的学习过程。