CS231n 笔记一(lecture 2)(KNN、线性分类)

图像分类:

def classify_image(image):
...
return class_label

1、数据驱动:

        从理论上讲,只要有足够代表性的样本(数据),就可以运用数学找到一个或者一组模型的组合使得它和真实的情况非常接近。注意这个方法的前提是具有「足够代表性的数据」。这种方法称为「数据驱动方法」。之所以被称为数据驱动方法是因为它是现有大量的数据,而不是预设模型,然后用很多简单的模型来契合数据(Fit Data)。虽然通过这种方法找到的模型可能和真实模型存在一定的偏差,但是在误差允许的范围内,单从结果上和精确的模型是等效的。

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







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值