CS231n 笔记一(lecture 2)(KNN、线性分类)
2017-11-20 17:12
274 查看
图像分类:
def classify_image(image): ... return class_label
1、数据驱动:
从理论上讲,只要有足够代表性的样本(数据),就可以运用数学找到一个或者一组模型的组合使得它和真实的情况非常接近。注意这个方法的前提是具有「足够代表性的数据」。这种方法称为「数据驱动方法」。之所以被称为数据驱动方法是因为它是现有大量的数据,而不是预设模型,然后用很多简单的模型来契合数据(FitData)。虽然通过这种方法找到的模型可能和真实模型存在一定的偏差,但是在误差允许的范围内,单从结果上和精确的模型是等效的。
def train(images,labels): # machine learning return model def predict(model,test_images): # use model to predict labels retrurn test_pabels
2、L1距离(曼哈顿距离)
曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|
3、L2距离(欧式距离)
指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离
绿色线:欧式距离 其他线:曼哈顿距离
4、Nearest Neighbor classifier (最邻近算法)
import numpy as np class NearestNeighbor: def __init__(self): pass def train(self,X,y): #最邻近分类器就是简单的记住所有的训练数据 self.Xtr = X self.ytr = y def predict(self,X): num_test = X.shape[0] #确保输出的type和输入的相同 Ypred = np.zeros(num_test,dtype=self.ytr.dtype) #遍历整个测试集rows,找到训练集中和测试集距离最近的照片 for i in xrange(num_test): #使用L1距离(曼哈顿距离:所有差的和) distances= np.sum(np.abs(self.Xtr - X[i,:]),axis = 1) min_index = np.argmin(distances)#得到最近距离的索引 Ypred[i] = self.ytr[min_index]#根据距离最近的样本的标签来预测 return Ypred
缺点:
训练时间复杂度 O(1),预测的时间复杂度O(N)。一般而言,训练时间长一点是ok的,但是预测时间需要很短。
5、K-Nearest Neighbors
demo:
http://vision.stanford.edu/teaching/cs231n-demos/knn/
关于K值和L1或者L2的选择,需要我们去尝试,而后找到最合适的值:
将训练集分为训练集,验证集,测试集。
K-NN算法缺点:训练耗时,不太适用于图片分类,容易造成纬度灾难
6、Linear Classification
相关文章推荐
- CS231n(8):线性分类笔记(中)
- CS231n(9):线性分类笔记(下)
- CS231n课程笔记翻译(五):线性分类笔记(中)
- CS231n 课程笔记翻译:线性分类笔记
- 深度学习与媒体计算②——kNN的优化与线性分类 (CS231n)
- [学习笔记]cs231n 图像分类与KNN
- CS231n课程笔记2.1:图像分类问题简介&KNN
- CS231n课程笔记翻译3:线性分类笔记
- CS231n课程笔记--线性分类
- CS231n课程笔记翻译:线性分类笔记(上)
- CS231n课程笔记翻译:线性分类笔记
- CS231n(7):线性分类笔记(上)
- CS231n课程笔记翻译:线性分类笔记(中)
- 初学ML笔记N0.1——线性回归,分类与逻辑斯蒂回归,通用线性模型
- cs231n 作业1_KNN用于图片分类以及交叉验证
- CS231N 笔记1_图片分类
- cs231n---线性分类教程(第二弹)
- 初学ML笔记N0.1——线性回归,分类与逻辑斯蒂回归,通用线性模型
- CS231n 学习笔记(2)——神经网络 part2 :线性分类器,SVM
- cs231n---线性分类教程(第一弹)