第一节讲的是关于图像分类的kNN算法
基本思想:
计算机是看不到图片的,只能看到图片是由一个个像素值组成,要判断两张图片是否相似,如下图所示,计算它们的L1距离,即对应的各个像素值(即把图片转化为向量了)相减取绝对值,然后再进行求和,L1越小,两张图片越相似
还有一种方法是计算L2距离,与L1唯一的区别是,图片的像素值相减后平方,然后求和开方
- L1与L2比较:在面对两个向量之间的差异时,L2比L1更加不能容忍这些差异。(毕竟他开方了)
还讲了代码,略过
kNN
看笔记没看懂,又去上网搜了一下
https://zhuanlan.zhihu.com/p/25994179这篇非常通俗易懂
由基本思想可知,我们是看测试集的图片离训练集的图片哪个更近,越近的图片的标签就是测试集图片的标签
ps:引用的上面那篇链接里面的
当k=1时,就选取离测试集最近的一个点,那万一离他最近的一个点是不小心引入的噪声怎么办
故k太小不行
k太大的话近似于无穷,相当于把测试集所以图片都包括进来了,也不看距离近不近了,直接退化成哪个标签的图片数量多,测试集的图片标签就变成哪个了
如何选取k?
由上面分析可知,k太大太小都不行
把测试集的10%~20%作为验证集(类似于最后的那个测试集)来进行调优选k(超参数)
若测试集很小,那就用交叉验证的方式,即把测试集分为5份左右,循环取一份作为验证集,观察k=多少的时候结果最好,然后取平均
一定不能把测试集当做训练集!!
kNN算法的优劣
- 优点:简单易实现
- 缺点:测试要花费大量时间计算,因为每个测试图像需要和所有存储的训练图像进行比较 ,在像素低维的情况下表现良好,但是在实际的图像分类工作中,因为图像都是高维度数据(他们通常包含很多像素),而高维度向量之间的距离通常是反直觉的
如图所示是用tSNE做的可视化技术,越相邻表示L2距离越小,图片越相似
大致看这张图,可知,图片的排列是被背景主导而不是图片语义内容本身主导 比如,狗的图片可能和青蛙的图片非常接近,这是因为两张图片都是白色背景。这和我们期望识别图片中的内容(语义)背道而驰,需继续向前探索