程序笔记   发布时间:2022-07-21  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了CS231n Lecture 2:KNN大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

目录
    @H_262_6@Image classification task@H_262_6@Nearest Neighbor Classifier 近邻分类器@H_262_6@通过距离测量来比较图片@H_262_6@KNN K近邻算法@H_262_6@KNN的距离计算量度@H_262_6@Hyperparameters 超参数@H_262_6@KNN的缺点@H_262_6@Linear Classifier 线性分类器

Image classification task

机器学习:基于数据的解决方案

步骤:1.收集大量的图片并打上标签 2.使用机器学习算法来训练一个分类器 3.用新的图片来评估分类器的好坏

Nearest Neighbor Classifier 近邻分类器

CS231n Lecture 2:KNN

记忆数据和标签并训练出模型,再把测试集图片预测为最有可能的标签

通过距离测量来比较图片

L1 距离 ,相当于得到的是差异性的值

CS231n Lecture 2:KNN

算法:

CS231n Lecture 2:KNN

在训练阶段,相当于只是记忆了所有图片的像素矩阵。

在预测阶段,对每一张测试图片,找到距离最小的训练集中的图片,把该图片的标签作为预测的标签。

然而,非常明显的是,假设我们有N个测试样本,训练的时间复杂度是O(1),而预测的时间复杂度是O(N)

对于实际使用中,我们更希望是训练的时间很长,而预测的时间很短,因此这种算法很辣鸡

KNN K近邻算法

相比于之前的从距离最近的数据找标签,KNN是找到K个最近的点的标签,再进行投票来预测这个点的标签。

CS231n Lecture 2:KNN

KNN的距离计算量度

    @H_262_6@

    L1距离(曼哈顿距离)

    计算出样本每个维度的坐标之差的绝对值相加,计算出差异。

    CS231n Lecture 2:KNN

    @H_262_6@

    L2距离(欧几里得距离)

    CS231n Lecture 2:KNN

如果点的每个维度的数值具有明确意义(例如企业中员工的数据:薪资、年龄、职位等等),那么L1距离更合适。但是,缺点是如果坐标轴旋转的话,那么结果会随之改变。

而L2距离更合适在点的每个维度的数值并没有什么实际的意义的情况下。如果上述的例子用L2距离,那么这些数据就没有意义了。

Hyperparameters 超参数

k值和距离量度的选择对模型的准确度有很大影响。超参数是只和算法本身有关的参数。

选择超参数的方法很大程度上依赖于模型要预测的事件或物体。需要全部尝试,来找出最合适的方案。

方法1:

在所有数据集上测试并找到最好的。 但显然K=1永远是最好的,pass

CS231n Lecture 2:KNN

方法2:

将数据集分为训练数据和测试数据,通过训练数据和测试数据的表现来选择。但是最后得到的结果只是针对于测试数据的,不清楚算法对于未知的数据是怎么样的结果,鲁棒性太差,pass

CS231n Lecture 2:KNN

方法3:(比较好的方案)

将数据集分为训练、验证、测试数据。在测试集上找到表现最好的参数,并通过测试数据来评估模型准确率。

CS231n Lecture 2:KNN

方法4:

交叉验证。将数据集分组,每组(除了测试集)都会当作一个验证集,然后把每组的结果平均,找到最优参数。但是,太消耗算力和时间,通常只在小规模数据中使用。

CS231n Lecture 2:KNN

KNN的缺点

    @H_262_6@

    不会用在像素距离(图像识别)上。因为对像素值的距离量度并不能得到有用的信息。并且预测时间太长了。

    在以下图片中,每个的L2距离都和原始图片一样,但其实看起来是有差异的,机器却会认为他们都是一样的。

    CS231n Lecture 2:KNN

    @H_262_6@

    维度灾难:维度的上升会让数据集的数量指数倍的扩大。 因为KNN算法实质上是将样本空间分成几块区域,根据新的数据所在的区域确定该数据的标签。因此希望训练数据越紧密越好,如果过于分散,那么就会导致算法不能很好的识别。所以当维度越多时,就会导致需要的训练集数据的数量越多,越紧密,可能没有足够的数据集来满足这些条件。

CS231n Lecture 2:KNN

Linear Classifier 线性分类器

CS231n Lecture 2:KNN

原图像是一个32323 的数组,其中3是代表RGB三个通道。矩阵乘后最终会得到10个不同标签的分数,某一类相对于其他类的分数越高,代表该类的可能性越大。

f(x, W) = Wx + b

其中,f是10x1的矩阵,W是10x3072的矩阵,x是3072x1的矩阵。b是bias。如果没有bias,那么当x取0时,每条分类线都会经过原点。

CS231n Lecture 2:KNN

线性分类器更像是用一条线(二维平面上)把图片分割成不一样的区域,从而由新的图片所在的区域来预测该图片的标签是什么

线性分类器有一些无法使用的地方,由于必须要找到一条直线来进行分类,那么就无法处理以下问题

CS231n Lecture 2:KNN

其次,线性分类器的W每一行都代表一个类别的标签,因此只能根据一个模板来训练(我觉得找不到两个模板来确定一条直线,所以不行),因此训练过程还是简单的。由于线性分类器的工作原理其实和KNN很相似,都是找到点和模板的相似度来得出分数(在线性分类器中,如果模板是红色的车停在绿色的草地上,那么分类器会更偏向于选择红色在中间,绿色围绕的图片),只不过测试速度变快了(因为不用一个一个比较,而是通过权重矩阵W计算出分数)。

大佬总结

以上是大佬教程为你收集整理的CS231n Lecture 2:KNN全部内容,希望文章能够帮你解决CS231n Lecture 2:KNN所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。