在图像识别中,图像分类是首要工作。因为需要将不同类型的图像先进行排除。近邻算法是最简单的算法之一,但由于其弊端的存在,本篇只做了解性的简单介绍,
K近邻算法的实质
将测试图片在已经分类好的,具有不同标签的训练数据图片中,找到K张最相似的图片,进而根据K张图片中类型的比例大小,推断图片类型。判断图片的相似程度,就需要用到距离算法。我们知道,图片的电子存在形式是多维的矩阵数据,不同的维度代表区域(高,宽),颜色(RGB之类)等。
算法具体步骤
1)计算测试数据与各个训练数据之间的距离;
2)按照距离的递增关系进行排序;
3)选取距离最小的K个点;
4)确定前K个点所在类别的出现频率;
5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。
曼哈顿距离算法
曼哈顿距离算法Manhattan,又称为L1距离算法。将测试图片的各像素与训练图片的各像素进行比较,形成绝对值的差,然后将差值全部相加。若差值越小,说明图片越相近。算法公式如下,
说明:分别为测试图片和训练图片,p为像素点的索引。
欧式距离算法
欧式距离算法,又称为L2距离算法,较L1更为常用。L1距离算法使用的是绝对值差的和。L2距离算法,使用的是方差和的算术平方根,用来体现个体的离散程度。算法公式如下,
交叉验证
在验证模型效果时,通常使用训练数据进行验证。原因在于训练数据已经有标签,可以直接比对结果。做法是将训练数据分成N份,仅用N-M份用于训练(M<N),剩余M份用于验证。交叉验证在其他算法中也是通用的存在。
K值的选择
K值通常是小于20的整数。可以通过多次交叉验证,遍历不同的K,获取结果较好的K值。
K近邻算法的问题
在实际应用中,很少使用KNN,原因如下,
1)算法效率与训练数据集合的大小成线性关系。因为要逐一比较,训练数据集越大,比较时间越长,效率越低。而训练集越小,准确度将随之降低。因此,如何确定训练数据集的大小,很关键。
2)同一张图片,若光线强弱不同,或存在图像偏移,又或关键部位缺失,都会对距离计算产生影响。
3)由于是对所有像素点进行距离计算,图像背景对距离计算的影响很大。