李飞飞计算机视觉课CS231n第三天

1、线性分类器与KNNKNN的区别

线性分类器:通过特征的线性组合来做出分类决定。如感知机、支持向量机、LDALDA算法以及逻辑斯蒂回归模型。
李飞飞计算机视觉课CS231n第三天李飞飞计算机视觉课CS231n第三天李飞飞计算机视觉课CS231n第三天KNNKNN:用数据训练模型,把很多图片输入模型,让模型记住这些图片,对新来的图片进行比较,看和哪一类的图片最像。相似度度量一般采用是L2距离算法或L1距离算法。下面以L1距离算法举例:
李飞飞计算机视觉课CS231n第三天直接比较图片和图片直接的绝对差,最后将差值直接相加,即:
50+7+26+31+20+12+4+54+20+7+11+59+1+8+40+9=35950+7+26+31+20+12+4+54+20+7+11+59+1+8+40+9=359
这就是用L1计算得到的相似度,当图片相同时就是0。
让近邻算法中有相似性的合并为一个,这就变成了K近邻。

2、线性分类器为什么可以看成一种模板匹配方法

如1中有关线性分类器的介绍,WW权重矩阵中的每一行都可以被视为一个模板,对应不同的种类(猫、狗、船)。因为在计算Wx+bWx+b时,每个类别的得分只与矩阵中跟它在同一行的的元素有关,所以认为矩阵中的这一行是这个类别的模板。

3、线性分类器的缺点

a. 如果想在训练好的模型里再加入一个类别,则需要重新训练模型。
b. 不能用于线性不可分的情况。

4、代码

代码实现的任务

1、载入cifar-10 数据集。
2、输出相应的训练集和测试集数据 Xtr, Ytr, Xte, Yte。
3、显示数据集的形状和部分信息。
4、调整数据集大小。
5、使用KNN进行训练。
6、修改 k 参数。
7、验证其他两种实现方式。
8、查看三种实现方法的使用时间。

KNearestNeighbor 类整体分析

本质上, 这是一个类, 有多个成员函数构成, 用户调用的时候, 只需要调用 train 和 predict 即可得到想要的预测数据
其中, compute_distances_two_loops,compute_distances_one_loop,compute_distances_no_loops分别是用来实现需要预测的数据集 X 和 原始记录的训练集 self.X_train之间的距离关系, 并通过 predict_labels 进行KNN预测。

compute_distances_two_loops

这个函数主要通过两层 for 循环对计算测试集与训练集数据之间的欧式距离。

compute_distances_one_loop

本质上这里填入的代码和 上一节中的是一致的, 只是多了一个 axis = 1 指定方向。

compute_distances_no_loops

参考文章: http://blog.csdn.net/geekmanong/article/details/51524402

predict_labels

根据计算得到的距离关系, 挑选 K 个数据组成选民, 进行党派选举。

predict

这里主要做了两个步骤:
计算欧式距离;
KNN 统计预测信息。