1、原理
KNN是一种基本分类和回归方法。输入为实例的特征向量,输出为实例的类别。
2、流程
输入训练数据集
T={(x1,y1),(x2,y2),...,(xn,yn)}
其中, xi∈Rn,yi∈{c1,c2,...,cn},i=1,2,...,N
输出:实例x所属的类y。
(1)根据给定的距离度量,在T中找出与x最近邻的k个点,涵盖k个点的x的邻域记作 Nk(x) ;
(2)在 Nk(x) 中根据分类决策规则决定x的类别y:
y=argmaxcj∑xi∈Nk(x)I(yi=cj),i=1,2,...,N;j=1,2,...,k
I 为指示函数,
3、模型
KNN中当训练集、距离度量、k值和分类决策规则确定后,输出类别唯一确定。
- 距离度量
(1)p=1,曼哈顿距离
L1(xi,xj)=∑l=1n|xli−xlj|
(2)p=2,欧氏距离
L2(xi,xj)=(∑l=1n|xli−xlj|2)1/2
(3)p= ∞ ,各个坐标距离的最大值
L∞(xi,xj)=maxl|xli−xlj| - k值的选择
-k值较小,相当于在较小的邻域内对训练实例进行预测,近似误差会减少,估计误差会增大。
整体模型会变得复杂,容易过拟合
-k值较大,相当于在较大的邻域内对训练实例进行预测,近似误差会增大,估计误差会减少。
整体模型会变得简单,容易欠拟合
-调参的时候,先取一个较小的数值,用交叉验证的方法来选取k值。 - 分类决策规则
一般采用多数表决规则。
4、kd树
kd数是一种对k维空间的实例进行存储以便对其进行快速检索的树状数据结构。
5、优缺点
-优点:
1. 思想简单,理论成熟,既可以用来做分类也可以用来做回归;
2. 可用于非线性分类;
3. 训练时间复杂度为O(n);
4. 准确度高,对数据没有假设,对outlier不敏感;
-缺点:
1. 计算量大;
2. 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
3. 需要大量的内存;