图像识别分类基础版
2018-03-09 本文已影响138人
少寨主的互联网洞察
首先是最最简易笨拙的knn算法(k-Nearest Neighbor):
它的缺点:
- 分类器必须记住所有训练数据并将其存储起来,以便于未来测试数据用于比较。这在存储空间上是低效的,数据集的大小很容易就以GB计
- 对一个测试图像进行分类需要和所有训练图像作比较,算法计算资源耗费高。
其次,介绍一下线性分类器
该方法的第一部分就是定义一个评分函数,这个函数将图像的像素值映射为各个分类类别的得分,得分高低代表图像属于该类别的可能性高低。
其函数模型为:
equation.PNG
有几点需要注意:
- 一个单独的矩阵乘法W*Xi就高效地并行评估10个不同的分类器(每个分类器针对一个分类),其中每个类的分类器就是W的一个行向量。
- 输入数据(Xi,Yi)是不可变的,但W和b是可控改变的,我们的目标就是通过设置这些参数,使得计算出来的分类分值情况和训练集中图像数据的真实类别标签相符。
- 该方法的一个优势是训练数据是用来学习到参数W和b的,一旦训练完成,训练数据就可以丢弃,留下学习到的参数即可。这是因为一个测试图像可以简单地输入函数,并基于计算出的分类分值来进行分类。
- 最后,注意只需要做一个矩阵乘法和一个矩阵加法就能对一个测试数据分类,这比k-NN中将测试图像和所有训练数据做比较的方法快多了。
线性分类器的一些理解:
cat.jpg
将线性分类器看做模板匹配
偏差和权重的合并技巧:
图像数据预处理:在之前的例子中,所有图像都是使用的原始像素值(从0到255)。在机器学习中,对于输入的特征做归一化(normalization)处理是常见的套路。而在图像分类的例子中,图像上的每个像素可以看做一个特征。在实践中,对每个特征减去平均值来中心化数据是非常重要的。在这些图片的例子中,该步骤意味着根据训练集中所有的图像计算出一个平均图像值,然后每个图像都减去这个平均值,这样图像的像素值就大约分布在[-127, 127]之间了。下一个常见步骤是,让所有数值分布的区间变为[-1, 1]。零均值的中心化是很重要的。
损失函数
多类支持向量机损失 Multiclass Support Vector Machine Loss
因为:
线性评分函数.PNG
因此损失函数可改写为:
改写损失函数.PNG
其中,max(0,-)称作折叶损失(hinge loss)
loss.jpg我们对于预测训练集数据分类标签的情况总有一些不满意的,而损失函数就能将这些不满意的程度量化。
- 多类SVM“想要”正确类别的分类分数比其他不正确分类类别的分数要高,而且至少高出delta的边界值。
- 如果其他分类分数进入了红色的区域,甚至更高,那么就开始计算损失。
正则化损失:
为什么需要:问题在于这个W并不唯一:可能有很多相似的W都能正确地分类所有的数据
我们希望能向某些特定的权重W添加一些偏好,对其他权重则不添加,以此来消除模糊性。
正则化惩罚:
完整的多类SVM损失函数:
equation2.PNG