图像分类:
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:
关于K值和L1或者L2的选择,需要我们去尝试,而后找到最合适的值:
将训练集分为训练集,验证集,测试集。
K-NN算法缺点:训练耗时,不太适用于图片分类,容易造成纬度灾难
6、Linear Classification