1、图片分类若采用最近邻法:
1 import numpy as np 2 3 class NearestNeighbor: 4 def _init_(self): 5 pass 6 7 def train(self, X, y): 8 self.Xtr = X 9 self.ytr = y 10 11 def predict(self, X): 12 num_test = X.shape[0] 13 Y_pred = np.zeros(num_test, dtype = self.ytr.dtype) 14 15 for i in range(num_test): 16 distances = np.sum(np.abs(self.Xtr - X[i, :]), axis = 1) 17 min_index = np.argmin(distances) 18 Y_pred[i] = self.ytr[min_index] 19 20 return Y_pred
train函数时间复杂度为O(1),test函数时间复杂度为O(n),n为训练集大小。
训练时间短,但测试时间过长。
一般最好是训练时间较长,测试时间短,如CNN。
2、超参数:不是学习到的参数而是自己人工设置的参数。
如K近邻算法中的K值和距离度量算法的选择。
3、数据集划分:
划分为训练集、验证集、测试集。验证集用来选择超参数,只在测试集上测试一次。
当数据集比较小时,可采用k折交叉验证的方法,即将数据集划分为k份,其中k - 1份作为训练集,剩下的1份作为验证集,取k份数据集分别作为验证集的结果的平均值作为最终结果。
然而由于交叉验证计算代价高,在实践中使用较少。
4、KNN(K最近邻)优缺点:
当特征个数较少时适合用。另外可通过kd树、k均值等方法减少时间复杂度。
另外通过L2距离来比较图片是和人类直觉不同的,如上图中,原始图片分别经过平移、遮挡、变色,但得到的图片和原始图片的L2距离相同,
这和人类直觉显然不符。
在上面的图片中,相邻的图片L2距离较小,可以发现一些背景相似的图片距离较小,相对于主体,背景对类别的影响更大。