邻近算法(Nearest Neighbor)
概念原理
邻近算法(Nearest Neighbor)的思想实际上十分简单,就是将测试图片和储存起来的训练集一一进行相似度计算,计算出最相近的图片,这张图片的标签便是赋给测试图片的分类标签。
那么如何比较两组数据之间的相似长度呢?
算法分析
最常用的两种方式:
①L1距离(Manhattan distance)
②L2距离(Euclidean distance)
Manhattan distance
计算公式:
在图片上的具体反映:
在上述图片中最右侧的数字就是distance
两张图片使用L1距离来进行比较。逐个像素求差值,然后将所有差值加起来得到一个数值。如果两张图片一模一样,那么L1距离为0,但是如果两张图片很是不同,那L1值将会非常大。
K近邻算法(K-Nearest Neighbor)
概念原理
在邻近算法(Nearest Neighbor)的思想中,我们只计算最相近的图片的标签。但是,在实际上,为了更好的效果,我们可以找最相似的K张图片,然后用这K张图片中数量最多的标签作为测试图片的分类标签。
算法分析
最常用的两种方式:
①L1距离(Manhattan distance)
②L2距离(Euclidean distance) ----其实么得变化
只是将一张图片扩增为K张图片。
那么在K-NN中,K的值应该如何选出呢?
在这里,需要指出的是,K-NN的K值与我们所选择的计算图像距离的方式L1或者L2一样,我们尚且思考,在计算距离时,我们到底是应该选择L1还是L2呢?当你发出这样的提问时,你就会发现,这就如同思考,K的取值一般。K可以是2、3、4,那为什么不能是5、6、7呢?所以,这实际上,是以最后的结果好坏为导向性的。这一类在training中无法learn到,需要人为设置的参数,称之为超参数(hyperparameter),与参数不同,参数是在整个训练过程中可以不断优化得到最终结果的,超参数只能一开始就认为设置。
那么怎么才能确定自己选择的超参数是好的呢?
一遍遍的不断尝试,通过结果好坏进行分析。(要不怎么说人工智能,首先要有人工才能有智能呢,小声bb…)
优缺点分析:
缺点:
其实基本上,在图像识别上,是基本不会用到KNN的,因为KNN的最终结果很大程度上是以背景为导向的。
举一个栗子:
这时一只草地上的小狗:
这时一只在沙发上的小猫:
那么,当我们有一只在草地上的猫咪时,会如何呢?
使用KNN的话,基本上,会认为是与上面左边的在草地上的狗最相似,因为,两张图片上,有着更多的相似像素点,这样一来,距离也就更加相近。你可以认为是,KNN记住了绿色的背景。所以说,他是以背景为导向的。
还有就是,由于KNN的计算特殊性,在所谓的训练阶段,KNN只是简单的储存所有的训练集,然后在检测阶段,进行一一的对比。这样就造成一个问题,那就是在检测阶段花费时间太长,使得基本不可能商用(也就是约等于没用233)。
优点:
但是其实,优点还是有的,因为使用了KNN总比你瞎猜强。
原文链接:https://blog.csdn.net/weixin_38419133/article/details/90814431