day2_(cs231n) KNN

接下来,我们讨论knn来做图像分类,下面的图中,左边是我们要predict的图像,右边是我们predict出的图像,如果右边有我们正确的分类,则表示我们分类正确,(ps:在很多计算机视觉一些算法的文章中,我们都会看到top5正确率的概念,其中指的就是,我们预测出来的类别中,取前5名,如果这预测出来的5类中,有一类是正确的类别,表示我们预测正确,然后把正确预测的,除以总数,得到我们的top5 accuracy)。

day2_(cs231n) KNN

上图可以看到,这是一个cifar10的数据集,里面的图像大小是32*32,没办法,就是这么的不清晰,但是大概我们看轮廓也能看出来,这个效果不太好,用KNN来做分类,当我们选择k=1时,即选出与它所有像素的L1的值最小,即最近的图像的类别来当做他的预测类别,当k=n,即我们预测前n个图像,然后再这n个图像中,统计最多的那一类,当做我们预测的一类,当k的值增大时,我们也可以理解,这样会对噪声产生更大的鲁棒性。


我们还有另一个选择,当我们使用KNN时,确定我们应该如何比较相对近邻数据距离值图片间的不同,对于迄今为止的例子,我们展示了L1距离,其次是L2,(欧式距离)。

day2_(cs231n) KNN

可以看到不同的距离函数的选择,会产生不同的影响,当选择L1距离时,我们可以看到这些决策边界趋向于跟随坐标轴(没看出来),因为L1距离更决定于我们对坐标的选择,当选择L2的距离的时候,就不会,存在于最自然的地方。


day2_(cs231n) KNN


现在我们可能会有一个疑问,当我们使用KNN的时候,我们的K需要取值为多少呢?我们应该采用什么样的距离来衡量我们的距离呢?这就是我们深度学习中的超参,这些参数无法在训练中学习到,需要我们事先就给设定好,超参的设定是个艺术,究竟设定为多少?这需要看人品,需要我们不断的尝试,找到最好的那个值。


我们在设置超参的时候,需要对这个数据进行一个预先的小trick,分成三部分,一部分是train,一部分是validation,一部分是test,大部分数据是train,其余都是稍微较少,找到最好的能在test中应用的超参。

day2_(cs231n) KNN


还有一种更加严谨的方法,叫做cross-validation,如图,只是比较浪费时间,一般现在也不怎么用。


day2_(cs231n) KNN

说到KNN,要说一下,他的一个缺点,就是维度灾难。如果我们想分类器有一个好的效果,那么就需要我们训练数据能密集的分布在空间中。否则最近邻点的实际距离可能很远,也就是与待测样本的相似性没有那么高,但是想要数据密集的分布在空间中,我们需要指数倍地训练数据。



day2_(cs231n) KNN