课时4 数据驱动的图像分类:K最邻与线性分类器(上)
图像分类之前,我们需要将图片转换成一张巨大的数字表单,然后从所有种类中,给这个表单选定一个标签。
为什么分类问题是个困难的问题:图像分类难点是,当你想要处理这表单中数以百万计的数字并对其进行分类,这个问题是相当的复杂的,另外,相机是可以进行旋转和缩放的,并且旋转、平移、聚焦点选取等操作都会让图片样式不同。再考虑下相机高度的调整,这些所有的相机调整会使图片看起来完全不一样,我们对所有这些调整都具有鲁棒性;还有一些其他的挑战,例如光纤问题,我们对干扰也要具有强健的鲁棒性;还有形变的问题,也要对这种干扰具有鲁棒性;还有遮蔽的问题,有时候我们不能看到物体的全貌;背景杂斑问题,要检测的物体可能融入背景之中;同类演变问题。任何一个独立的问题都是十分复杂的。
我们构建一个三维空间,将x轴上的值定为种类标签值(没有任何一种显式的编程方法能实现这样的分类器),有一种算法例如排序算法能够实现这样的分类器。
近邻算法分类器
近邻算法:分类器的工作方式是高效的得到本联合训练集。在一段训练时间内,我们只需记住所有的训练数据,所以我们得到了 我们刚刚输入的全部训练数据,并且我们记住了他们。现在当你给我们一张测试图像时,我们要做额就是对测试图像和之前看过得每一张训练集中的图像进行一一对比,然后我们会传送相应的标签。
我们要如何定义距离的度量
其中最简单的方式可能就是曼哈顿距离算法,L1距离算法,该算法的内容是你有一个测试图像,认为我们需要一个单一的训练图像来比较该图像,基本上我们需要做的就是我们将逐元素比较,所有的像素值,形成绝对值的差,然后我们将差值全部相加。就是说只要观察每一个像素的位置,得到同一个空间位置的像素差,将其全部相加就得到了相似性。
欧式距离(L2距离)不是计算绝对值差的和,而是计算这些图像间差值的平方和。一个用来进行控制的离散选择,这个距离的选择我们称为超参数
对于近邻算法分类器有一个问题
他的速度如何取决于训练数据的大小?当训练数据的规模增大时将会发生什么?会变慢吗?是的,事实上他减慢的速度是线性的。因为我们只是独立地比较每一个训练样本,所以他会线性地减慢。
近邻算法是一个即时的训练方法,但同时他又是一个昂贵的测试方法,不管你的训练集有多大,我们对于每一张测试实例进行分类的计算量都将是恒定的。
能使近邻算法分类器速度加快的方法:近似近邻算法。
最邻近规则分类器KNN:检查每一张测试图像,事实上,单一邻近的训练实例 将检索几个最邻近的实例,我们将它们在所有的类中做多数的表决,从而对每一个测试实例进行分类。当K值变大,会发现边界变得平滑。 对于K值的选择是一个超参数 ,采用了不同的测量标准,效果最好的便是我所需要的。如果数据过少,可以使用交叉验证法,在选择中反复选择测试验证折,在所有可能的测试折的选择中选出效果最好的。但是KNN很少被采用的原因是效率低。
不同的方法会有不同的泛化方式
卷积神经网络CNN可用于机器视觉,循环神经网络RNN非常适用于排序问题。