KNN算法--个人总结
KNN
如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。
在k-NN分类中,输出是一个分类族群。一个对象的分类是由其邻居的“多数表决”确定的,k个最近邻居(k为正整数,通常较小)中最常见的分类决定了赋予该对象的类别。若k = 1,则该对象的类别直接由最近的一个节点赋予。
在k-NN回归中,输出是该对象的属性值。该值是其k个最近邻居的值的平均值。
选取k值以及它的影响
我们可以得到k太小会导致过拟合,选取较大的k值,就相当于用较大邻域中的训练数据进行预测,这时与输入实例较远的(不相似)训练实例也会对预测起作用,使预测发生错误。选取k值很重要的关键是实验调参(通常采取交叉验证法来选取最优的k值。),类似于神经网络选取多少层这种,通过调整超参数来得到一个较好的结果。
最邻近是如何度量呢?
P=2欧氏距离 p=1 曼哈顿距离
特征归一化的必要性
为了保证每个特征同等重要性,我们这里对每个特征进行归一化。
优点:
1、理论成熟,思想简单,既可以用来做分类也可以用来做回归;
2、可用于非线性分类;
3、训练时间复杂度为O(n);
4、对数据没有假设,准确度高,对outlier不敏感;
5、KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练;
6、KNN理论简单,容易实现;
缺点:
1、样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少)效果差;
2、需要大量内存;
3、对于样本容量大的数据集计算量比较大(体现在距离计算上);
4、样本不平衡时,预测偏差比较大。如:某一类的样本比较少,而其它类样本比较多;
5、KNN每一次分类都会重新进行一次全局运算;
6、k值大小的选择没有理论选择最优,往往是结合K-折交叉验证得到最优k值选择;