cs231n Assignment 1# KNN详细答案及总结

本文详细介绍了KNN(K-Nearest Neighbors)分类器的基本思路和超参数,包括距离计算方法和K的选择。通过实例展示了两层循环和一层循环的实现方式,探讨了numpy的广播机制在优化中的应用。此外,还讨论了交叉验证在确定超参数K中的作用,以及使用arg系函数进行预测值的确定。
摘要由CSDN通过智能技术生成

KNN分类器简介

基本思路:

首先将目标图片(33232)伸展为一维的目标向量向量,然后比较目标向量和训练集中所有样本向量的“”距离“。找出其中距离最小(最相似)的K个样本,找到这些样本所属类别。找出其中最多的作为预测值。

超参数:

这是无监督学习的模型。没有参数,只有距离度量方法和K(近邻数目)两个超参数。通过在dev set 上 cross validation 获得。
cross validation 一般是直接拆训练集进行practice,但是这里也讲了对于小规模数据可以采用k-fold calidation。但总而言之k-fold 一般不用,因为计算复杂性较高。
L1和L2距离。

### Pros and Cons Pros:便于理解,算法简单。 Cons: 1. 高维数据距离难以理解,counter-intuitive。很多时候和人类对相似的理解相违背。
2. 需要存储所有的训练集,存储消耗大。相比之下,SVM softmax分类器训练之后可以舍弃训练集。 3. 每一个目标图像都要和所有数据集图像一一比较。计算消耗大。有相应的改进。ANN通过pre processing 来 trade off correctness with space/time complexity.

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,:
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值