1.综述
k近邻法(k-nearest neighbor,kNN)是一种基本的分类与回归方法。接下来只叙述分类方法。kNN是一种多分类的方法,没有显示的学习过程,它是利用训练数据集对特征向量空间进行划分,作为分类的模型。
kNN描述:给定训练数据集,对于新输入的实例,在训练数据集中找到与该实例最近的
k
个实例,这
kNN的三个基本要素是:k值的选择、距离的度量、分类决策规则。
2.算法
输入:训练数据集
T={(x1,y1),(x2,y2)...(xN,yN)}
其中,
x∈⊆Rn
为实例的特征向量,
yi∈={c1,c2,c3,..,ck}
为实例的类别,
i=1,2,3...,N
,实例的特征向量为
x
输出:实例
(1)根据给定的距离度量方法,在训练集
T
中找出与
(2)在
Nk(x)
中根据分类决策规则(一般是多数表决)决定
x
的类别
其中, I 为指示函数,满足条件为1,不满足为0.
当
3.三要素
(1)距离度量
距离是指两个实例点之间相似成度的反映。kNN模型的特征空间一般是
n
维实数的向量空间
当
p=1
时,称为曼哈顿距离
当
p=2
时称为欧氏距离
当
p=∞
时,称为切比雪夫距离
使用不同的距离度量所确定的最近邻是不同的
(2) k 的选择
k
过大尽管能减小方差,但是使得偏差大
一般
(3)分类决策规则
一般采用多数表决规则,其等价于经验风险最小化
4.kd树
5.程序实现
利用sklearn工具包可以快速实现
# coding:utf-8
from sklearn.neighbors import KNeighborsClassifier # 导入knn分类器
X = [[0], [1], [2], [3]] #输入数据
y = [0, 0, 1, 1] #输入每个数据对应的类别
neigh = KNeighborsClassifier(n_neighbors=3) #生成对象
neigh.fit(X, y) #模型训练
print(neigh.predict([[1.1]])) #对于新数据的预测
>>>[0]