cs231——knn作业

cs231——knn作业

  • cs231——knn作业
    • 1.基础概念
      • 1.1 self.X_train
      • 1.2 y_train
      • 1.3 X
    • 2.作业一——两层循环实现
    • 3作业二——实现knn投票机制
    • 4作业三——使用一层循环实现
    • 5作业四——不用循环
    • 6作业五--交叉验证

1.基础概念

1.1 self.X_train

这是训练集,是由n*d的二位向量组成,表示由n个样本,每一个样本有d个特征值,就是把图片拉直了

1.2 y_train

这是训练集的标识,由数值组成,是n*1组成的,范围在0-9之间

    def train(self, X, y):"""Train the classifier. For k-nearest neighbors this is justmemorizing the training data.Inputs:- X: A numpy array of shape (num_train, D) containing the training dataconsisting of num_train samples each of dimension D.- y: A numpy array of shape (N,) containing the training labels, wherey[i] is the label for X[i]."""self.X_train = Xself.y_train = y

1.3 X

这是测试集,由m*d的二位向量组成,表示m个样本

通过上面的训练,来输出x的标识。

2.作业一——两层循环实现

dists【i,j】标识测试集里的样本x与,训练及的样本j,之间的欧氏几何距离,就是空间距离

表示每个特征值之间的差的平方,开根号

  1. 第一步就是np.sqrt开平方

  2. 第二步就是求和,使用np.sum

  3. 第三步就是两个样本之间的差值

  4. X【i,:】表示1*d的样本,就是第i个样本的所有特征值,有d个值组成

  5. self。X【j,:】表示第j个训练值

  6. np.square(X[i,:]-self.X_train[j,:]
    

    因为都是1*d的,所以可以减,生成的就是两个样本,不同特征的之间差值

  7. np。square就是让差值来进行求平方

  8. 综上,代码如下

    dists[i,j] =np.sqrt(np.sum(np.square(X[i,:]-self.X_train[j,:])))
    

3作业二——实现knn投票机制

由于作业一已经计算出了测试集i与训练集j之间的样本差值,我们可以找出与测试集i差最小的k个训练集j,就是找出dists【i,:】前k个小的元素。

# TODO: #

​ # Use the distance matrix to find the k nearest neighbors of the ith #

​ # testing point, and use self.y_train to find the labels of these #

​ # neighbors. Store these labels in closest_y. #

​ # Hint: Look up the function numpy.argsort.

题目已经给了hint,让我们学习使用argsort这个函数

这个函数返回数组下标,由小到大的元素的下标

indexs = np.argsort(dists[i,:])

返回的是一个下标列表

因此我们可以使用的机制,取前k个

 k_indexs = indexs[:k]

最后给这些最近的k个样本,进行标识,找出这k个训练集的样本值

closest_y = self.y_train[k_indexs]

返回的都是数值,最后我们进行求这k个里面,那些数值出现的次数最多,那就是测试集i的标识

 y_indexs = np.zeros(10)# 生产10个类别的数组for j in closest_y:y_indexs[j]+=1y_pred[i] = np.argmax(y_indexs)

4作业三——使用一层循环实现

这里就需要使用广播的机制。

题目需求如下:

and store the result in dists[i, :].

需要储存在dists【i,:】

表示1*n的列表

x【i,:】是1*d的向量

self.x_train是n*d

通过广播,x【i,;】变成n*d的元素

于是这两个可以相减,变成n*d,于此同时,我们可以使用square来进行求平方操作

我们可以使用np.sum(axis=1),来消灭列元素,就是变成n*1,对每个样本的特征值进行求和

由于使用axis=1,返回的是列表,最终变成1*n的元素,最后进行每个列表开方

最终代码如下:

  dists[i, :] = np.sqrt(np.sum(np.square(self.X_train - X[i, :]), axis=1))

5作业四——不用循环

Try to formulate the l2 distance using matrix multiplication ,and two broadcast sums.

提示是把公式展开,然后使用两次广播

dists数组是由m*n组成的

x是由m*d,生成mx1,也就可以广播mxn,方法就是按上面的平方再求和,keepdims=1来保持是二位矩阵

self。x_train就是n*d的数组,变成1xn,就可以广播程mxn

通过点成我们可以变成m*n的数组

矩阵点乘,就是m*d,与d**n,生成mn的向量

[[

a = np.sum(np.square(X), axis=1, keepdims=True)
b = np.sum(np.square(self.X_train), axis=1, keepdims=True).T
dists = np.sqrt(a + b - 2 * X.dot(self.X_train.T))

6作业五–交叉验证

Hint: Look up the numpy array_split function

提示使用arry_spilt这个函数

np.array_split(X_train, num_folds, axis=0)

按行切割,切分成num份数

X_train_folds = np.array_split(X_train, num_folds, axis=0)
y_train_folds = np.array_split(y_train, num_folds, axis=0)

分割x与y,进行生成测试集,验证集,与训练集

验证集就是当验证num次,当i=0到num-1,为i就是验证集

for k in k_choices:k_to_accuracies[k] = []for i in range(num_folds):X_train_c = X_train_folds.copy()y_train_c = y_train_folds.copy()X_test_i = X_train_c.pop(i)y_test_i = y_train_c.pop(i)X_train_i = np.concatenate(X_train_c, axis=0)y_train_i = np.concatenate(y_train_c, axis=0)# two extra approaches# X_test_i = X_train_folds[i]# y_test_i = y_train_folds[i]# X_train_i = np.concatenate([X_train_folds[j] for j in range(num_folds) if j != i])# y_train_i = np.concatenate([y_train_folds[j] for j in range(num_folds) if j != i])# X_train_i = np.concatenate(np.delete(X_train_folds, i, 0))# y_train_i = np.concatenate(np.delete(y_train_folds, i, 0))classifier = KNearestNeighbor()classifier.train(X_train_i, y_train_i)y_test_pred_i = classifier.predict(X_test_i, k=k, num_loops=0)num_correct = np.sum(y_test_pred_i == y_test_i)accuracy = float(num_correct) / len(y_test_i)k_to_accuracies[k].append(accuracy)

去掉i就是训练集,使用concatenate来进行连接剩下的数组

cs231n作业一 knn相关推荐

  1. 手把手教你写CS231N作业一 KNN分类器 详细解析 作业源文件 数据集

    一些准备工作 python环境 官方课程给出的源文件在这里 根据文件里的指导一步步编写答案就可.第一个实现KNN分类器. 如果是windows环境,需要首先下载数据集.The CIFAR-10 dat ...

  2. cs231n作业1——knn

    导入数据 import random import numpy as np from cs231n.data_utils import load_CIFAR10 import matplotlib.p ...

  3. 【cs231n作业笔记】一:KNN分类器

    安装anaconda,下载assignment作业代码 作业代码数据集等2018版基于python3.6 下载提取码4put 本课程内容参考: cs231n官方笔记地址 贺完结!CS231n官方笔记授 ...

  4. cs231n作业环境配置

    cs231n作业的环境配置 查了很多资料,尝试了很多次,终于成功了 参考文章:http://www.manongjc.com/article/30189.html 首先我的电脑是win10(x86), ...

  5. Windows本地快速搭建cs231n作业环境

    之前写过一个关于斯坦福cs321n课程的作业环境搭建教程,cs231n_assignment1_配置作业环境+kNN,不过好像很多人还是在搭建过程中遇到一些问题,导致做不了作业.自己动手实践是学习最快 ...

  6. cs231n_assignment1_配置作业环境+kNN

    作业1:http://cs231n.github.io/assignments2017/assignment1/ 我是在win7电脑上做的. 准备工作: 下载anaconda:https://www. ...

  7. cs231n作业记录(答案)-ASS1(KNN)

    学习了cs231n的课程,感觉有些困难,故做一些记录. 环境配置:jupyter ASS1 P1 KNN算法 (1)第一部分加载数据集,并输出它们的大小. 这个数据集有10个类. Training d ...

  8. 斯坦福cs231n作业数据集下载

    刚看到斯坦福的cs231n课程,看到有课后作业,于是就想试一试, 作业网址https://cs231n.github.io/assignments2020/assignment1/#q1-k-near ...

  9. CS231n作业2中Cython相关问题的处理

    最近磨磨蹭蹭地学着CS231n,看着满屏幕代码不禁感慨Stanford大神们当真深不可测,作业是以挖空形式给出的.这么多代码要让博主从头写,那还不得写到天荒地老-- 博主使用的是2016年的教学录像和 ...

  10. cs231n作业-assignment1

    assignment 1 (cs231n) 文章目录 assignment 1 (cs231n) KNN基础 计算distances 方法一:双层循环 计算distances 方法二:单层循环 计算d ...

最新文章

  1. 【跟着子迟品 underscore】Array Functions 相关源码拾遗 小结
  2. python中的及||
  3. 【WC2016】挑战NPC 【带花树】【建图】
  4. 【LeetCode - 556】下一个更大元素 III(贪心,思维)
  5. K8S精华问答 | CentOS下如何配置主机互信?
  6. linux不识别xfs,centos7 grub2无法识别xfs root分区
  7. vue如何设置视频封面_vue怎么制作朋友圈封面视频 vue制作朋友圈视频方法
  8. 【youcans 的 OpenCV 学习课】10. 图像复原与重建
  9. WindowsServer2008R2安装中文语言包截图详细教程(附语言包下载资源)
  10. 制作双系统U盘启动盘【Ventoy】
  11. Google Guava EventBus 消息发布-订阅异步调用使用
  12. Java 身份证号码验证工具类
  13. 西米支付:支付宝/微信支付/银联支付通道的接入介绍
  14. 小游戏之天选之人:通过幸运数字生成双色球号码(随机函数的应用)
  15. python(2)兔子产子
  16. 臧圩人:java面试题解惑系列(一)——类的初始化顺序学习笔记
  17. Android Studio强者之路-刘桂林-专题视频课程
  18. Python爬取百度图库
  19. uniapp onReachBottom不触发
  20. 3601-lpk.dll劫持病毒分析

热门文章

  1. 运营人员消消气,这个工具让数据分析轻松驾驭
  2. 谷歌字体 Google Fonts
  3. 妙用chrome插件,实现U校园自动填答案
  4. AI算法工程师 | 01人工智能基础-快速入门
  5. 测试人员必会用例设计方法 —— 正交表
  6. 云计算技术简述及发展分析
  7. 专业术语常用名词缩写中英文对照
  8. Java并发编程之美
  9. 任正非对话卡普兰:5G是一个数据通道,未来最大的产业是人工智能
  10. 继承ActionSupport类