Assignment 1# KNN
KNN分类器简介
基本思路:
首先将目标图片(33232)伸展为一维的目标向量向量,然后比较目标向量和训练集中所有样本向量的“”距离“。找出其中距离最小(最相似)的K个样本,找到这些样本所属类别。找出其中最多的作为预测值。
超参数:
这是无监督学习的模型。没有参数,只有距离度量方法和K(近邻数目)两个超参数。通过在dev set 上 cross validation 获得。
cross validation 一般是直接拆训练集进行practice,但是这里也讲了对于小规模数据可以采用k-fold calidation。但总而言之k-fold 一般不用,因为计算复杂性较高。
L1和L2距离。
![](https://i-blog.csdnimg.cn/blog_migrate/bfa3e0aaf38344ff1c2d35cefc8485db.png)
![](https://img-blog.csdnimg.cn/20210215203258924.png?%20x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2lfY3Nkbl93YXRlcg==,size_16,color_FFFFFF,t_70)
Part One
计算testset 和training set之间的距离。在=1 以及K=5条件下分别进行test set的判断,计算准确率。
其中X 作为test_set形状为(500,3072)
self.X_train 作为training_set形状为(5000,3072)
dist作为距离,形状为(500,5000)
其中500,5000为样本数目。
3072=33232为样本向量长度。也就是(500,3072)每一行是一张展开成(1,3072)的图片向量。
核心代码在于距离的计算,就是一个切片:
Two loop version
def compute_distances_two_loops(self, X):
num_test = X.shape[0]
num_train = self.X_train.shape[0]
dists = np.zeros((num_test, num_train))
for i in range(num_test):
for j in range(num_train):
dists[i][j]=np.sqrt(np.sum((np.square(X[i,:]-self.X_train[j,: