(1) KNN算法简介:
KNN算法,即K近邻算法是一种监督学习算法,本质上是要在给定的训练样本中找到与某一个测试样本A最近的 K个实例,然后统计k个实例中所属类别计数最多的那个类,据他们的主要分类来决定新数据的类别。
(2) KNN算法的三个要点:
①K的选择:
K值是KNN算法中为数不多的参数之一, K值的选择也直接影响着模型的性能。如果我们把k值设置的比较小,那么意味着我们期望个到一个更复杂和更精确的模型,同时更加容易过拟合 ;相反,如果K值越大,模型机会越简单,一个很极端的例子就是如果将K值设置的与训练样本数量相等,即K-N那么无论是什么类别的测试样本最后的测试结果都会是测试样本中数量最多的那个类。
②距离的度量:
距离的度量描述了测试样本与训练样本的临近程度,这个临近程度就是K个样本选择的依据,在KNN算法中 ,如果特征是连续的,那么距离函数一般用曼哈顿距离或欧氏距离,如果特征是离散的,一般选用汉明距离。"
③分类决策规则:
通过上面提到的K与距离两个概念,就能选择出K个与测试样例最近的训练样本,如何根据这K个样本决定测试样例的类别就是KNN的分类决策规则,在KNN中最常用的就是多数表决规则,但是该规则严重依赖于训练样本的数目。
(3) KNN算法的优缺点:
①优点:简单,易于理解,易于实现,无需估计参数,无需训练。适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构造流失预测模型)特别适合于多分类问题(multi-modal,对象具有多个类别标签),例如根据基因特征来判断其功能分类, kNN比SVM的表现要好。
②缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢,可解释性较差,无法给出决策树那样的规则。
(4) KNN算法的常见问题:
①k值设定为多大?
k太小,分类结果易受噪声点影响; k太大,近邻中又可能包含太多的其它类别的点。k值通常是采用交叉检验来确定(以k-1为基准) ,总的来说k-般低于训练样本数的平方根。
②类别如何判定最合适?
投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当些。
③如何选择合适的距离衡量?
高维度对距离衡量的影响为当变量数越多,欧式距离的区分能力就越差。变量值域对距离的影响为值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化
④训练样本是否要一视同仁?
在训练集中,有些样本可能是更值得依赖的。可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响。
⑤性能问题?
KNN是一种懒惰算法,平时不好好学习,考试(对测试样本分类)时才临阵磨枪(临时去找k个近邻)懒惰的后果:构造模型很简单,但在对测试样本分类地的系统开销大,因为要扫描全部训练样本并计算距离。
(5) KNN算法在图像处理中的应用
1) KNN在图像问题中较少使用,这个观点来源于斯坦福CS231n,原因有两个: ①很差的测试效率,样本量越大,分类过程就会越慢。②整个图像水平的距离度非常不直观。
2) Halcon中的KNN分类器例程:
① classify image class knn.hdev
②set params class knn.hdev
③ nearest neighbors.hdev