未分类

CS231n-W2D1

​ 欢迎回来,今天我们来认识一下KNN

Lecture 2:Image Classification pipeline

P4-5

Data-Driven Approach 数据驱动方法

  1. Collect a dataset of images and labels

    1. Use Machine Learning to train a classifier

    2. Evaluate the classifier on new images’

      这是一种广义的方法:

      • 手机大量图像数据及标签
      • 使用机器学习算法训练一个分类器
      • 是用新图像衡量训练的分类器

First classifier: Nerest Nerghbour

近邻算法,在训练集合中找出与x距离最近的k个点,当k=1时为nn算法,k>1时候 为knn算法

Distance Metric to compare images

1.L1 (Manhattan) distance 曼哈顿距离:在各个方向(参考系)上的距离绝对值之和

2.L2 (Euclidean) distance 欧拉距离:直线距离

比较:改变坐标轴对L1有影响,对L2无影响

Setting Hyperparameters 设定超参数

idea #1 : 挑选对于数据集表现最好的高参

​ BAD:k=1 always works perfectly on train data

idea #2 :将数据分成训练集与测试集,选出对于两个集来说最好的高参

​ BAD:无意义,参考idea1,只能得出的是对于测试集最好的高参

idea #3 : 分成三组,训练集,评估集,测试集:

​ GOOD:将大部分数据作为训练集,在训练集上用不同的K来训练,在评估集上进行评估并选出一个最佳的超参,最后再在测试集上测试一次,这个一次得出的结果能告诉你你的模型在未知的数据集上的表现

idea #4 : 交叉验证:拿出测试集后,将剩下的数据均分为几份,每一份作为一 fold ,然后轮流将 fold1 / fold2 /fold3 ……作为验证集,按照 idea #3 的方式验证

​ GOOD:比较繁琐,适用于小型的数据集

k-Nearest Neighbour on images : never used

补充:

KNN三要素:距离度量(eg:L1、L2等)、K值选择(一般取较小的奇数)、分类规则(一般投票多数表决)

例子http://vision.stanford.edu/teaching/cs231n-demos/knn/

tasks

  1. 图像分类数据和label分别是什么 图像分类存在的问题与挑战

    图像数据:图像在输入计算机后读出的是矩阵,矩阵的每个值代表对应位置的像素值

    label:给图像划分的类

    问题与挑战:光照,角度,遮挡,形变带来的问题

  2. 使用python加载一张彩色图片,观察像素值

  3. L1范数,L2范数数学表达式 这两种度量分别适用于什么情况

    L1距离由坐标轴决定,L2距离与坐标轴无关

    L1范数可以进行特征选择,即让特征的系数变为0.

    L2范数可以防止过拟合,提升模型的泛化能力,有助于处理 condition number不好下的矩阵(数据变化很小矩阵求解后结果变化很大) (核心:L2对大数,对outlier离群点更敏感!)

    视坐标轴对图像有无影响来选择

  4. 描述近邻算法KNN NN算法复的杂度 为什么很少使用在图像中以及它存在的问题

    复杂度:

    ​ 训练复杂度:knn只是保存数据及标签,不涉及计算,训练复杂度为o(1)

    ​ 测试复杂度:对于某个样本x,需要与标签数据逐一进行对比,复杂度为o(N)

    ​ 时间复杂度o(n*k):n为样本数量,k为单个样本特征的维度。如果不考虑特征维度的粒度为o(n)

    ​ 空间复杂度o(n*k):n为样本数量,k为单个样本特征的维度。如果不考虑特征维度的粒度为o(n)

    存在的问题:当训练集很大的时候,需要的存储空间大,测试速度慢,距离函数不适合用在比较像素上。需要计算每个待测样本和训练样本之间的距离,计算很耗时;会造成维数灾难,比方说两个很相似的样本,但由于维度很高,两者之间的距离也会很大。

  5. 了解cira10数据集

    cifar10数据库由10类数据组成,有50000张作为训练集,10000张作为测试集,分布在这10类上

    each image is 32x32x3

  6. 超参数怎么选择合适(即数据集如何划分)

    分为训练集,验证集,测试集或者采用交叉验证

分享到