欢迎回来,今天我们来认识一下KNN
Lecture 2:Image Classification pipeline
P4-5
Data-Driven Approach 数据驱动方法
Collect a dataset of images and labels
Use Machine Learning to train a classifier
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
图像分类数据和label分别是什么 图像分类存在的问题与挑战
图像数据:图像在输入计算机后读出的是矩阵,矩阵的每个值代表对应位置的像素值
label:给图像划分的类
问题与挑战:光照,角度,遮挡,形变带来的问题
使用python加载一张彩色图片,观察像素值
L1范数,L2范数数学表达式 这两种度量分别适用于什么情况
L1距离由坐标轴决定,L2距离与坐标轴无关
L1范数可以进行特征选择,即让特征的系数变为0.
L2范数可以防止过拟合,提升模型的泛化能力,有助于处理 condition number不好下的矩阵(数据变化很小矩阵求解后结果变化很大) (核心:L2对大数,对outlier离群点更敏感!)
视坐标轴对图像有无影响来选择
描述近邻算法KNN NN算法复的杂度 为什么很少使用在图像中以及它存在的问题
复杂度:
训练复杂度:knn只是保存数据及标签,不涉及计算,训练复杂度为o(1)
测试复杂度:对于某个样本x,需要与标签数据逐一进行对比,复杂度为o(N)
时间复杂度o(n*k):n为样本数量,k为单个样本特征的维度。如果不考虑特征维度的粒度为o(n)
空间复杂度o(n*k):n为样本数量,k为单个样本特征的维度。如果不考虑特征维度的粒度为o(n)
存在的问题:当训练集很大的时候,需要的存储空间大,测试速度慢,距离函数不适合用在比较像素上。需要计算每个待测样本和训练样本之间的距离,计算很耗时;会造成维数灾难,比方说两个很相似的样本,但由于维度很高,两者之间的距离也会很大。
了解cira10数据集
cifar10数据库由10类数据组成,有50000张作为训练集,10000张作为测试集,分布在这10类上
each image is 32x32x3
超参数怎么选择合适(即数据集如何划分)
分为训练集,验证集,测试集或者采用交叉验证