cs231n作业1:图像分类

作业是在ipython下开发完成的,首先要学会使用ipython。一、IPython使用Jupyter Notebook是以web交互式的编程接口,是一个编程工具,除了通常的新建、删除、更改、下载编程文件外,还支持在线编程运算可帮助持续开发,特别在企业中有些项目需要持续很长时间的开发,每天下班后关闭jupyter,只要服务器的kernel不关闭,jupyter会保存好开发时的数据缓存和可视化结...
摘要由CSDN通过智能技术生成

作业是在ipython下开发完成的,首先要学会使用ipython。

一、IPython使用

Jupyter Notebook是以web交互式的编程接口,是一个编程工具,除了通常的新建、删除、更改、下载编程文件外,还支持在线编程运算可帮助持续开发,特别在企业中有些项目需要持续很长时间的开发,每天下班后关闭jupyter,只要服务器的kernel不关闭,jupyter会保存好开发时的数据缓存和可视化结果,第二天继续开发,而不用又从头再运行,再配合支持markdown的功能,使得jupyternotebook方便记录开发过程和教学。

Anaconda中,自带Jupyter notebooks,打开jupyter有两种方式:
1、开始菜单点击Jupyter notebook,就会打开浏览器的页面。
在这里插入图片描述
2、命令窗口执行:jupyter notebook
3、如果想打开ipynb文件,但是浏览器窗口的upload没反应,可以找到文件所在目录,打开cmd窗口,执行jupyter notebook命令。

下面开始作业:

作业一、KNN

KNN的算法思想还是很简单的,简要说一下重点。

基本思想:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息进行预测。通常在分类任务中,使用投票法,即选择这k个样本中出现最多的类别标签作为预测结果;在回归任务中使用平均法,即将这k个样本的输出数值的平均值作为预测结果;另外,基于距离远近进行加权投票或加权平均,如距离大小与样本权重成反比。

从课程中我们也知道,KNN的训练过程很简单,但是预测过程很耗时间和资源,是一种懒惰式的学习。
在KNN的测试过程中,有两点很重要:距离度量的定义和k值的选取。
1)距离的度量:L1距离、L2距离等等
2)K值的选取:k值设置过小会降低分类精度;若设置过大会增加噪声,降低分类效果。通常,k值的设定采用交叉检验的方式(以k=1为基准),经验规则:k一般低于训练样本数的平方根。

作业内容:
1、计算欧式距离

def compute_distances_two_loops(self, X):#作业:用两层循环计算欧式距离,运行时间:21秒
"""
    Compute the distance between each test point in X and each training point
    in self.X_train using a nested loop over both the training data and the 
    test data.
    
    Inputs:
    - X: A numpy array of shape (num_test, D) containing test data.
    
    Returns:
    - dists: A numpy array of shape (num_test, num_train) where dists[i, j]
      is the Euclidean distance between the ith test point and the jth training
      point.
    """
    num_test = X.shape[0]
    num_train = self.X_train.shape[0]
    dists = np.zeros((num_test, num_train))
    for i in xrange(num_test):
      for j in xrange(num_train):
		dist[i][j]=np.linalg.norm(X[i] - self.X_train[j])
    return dists

#以下两种方式体会使用numpy矩阵运算提高算法效率
def compute_distances_one_loop(self, X):#作业:用一层循环计算欧式距离,运行时间:63秒
    num_test = X.shape[0]
    num_train = self.X_train.shape[0]
    dists = np.zeros((num_test, num_train))
    for i in xrange(num_test):
      dists[i, :] = np.linalg.norm(X[i, :] - self.X_train[:], axis=1)
      #这里要注意,dists[i,1] = np.linalg.norm(X[i, :] - self.X_train[1,:], axis=1)
      #dists[i,2] = np.linalg.norm(X[i, :] - self.X_train[2,:], axis=1)
    return dists
def compute_distances_no_loops(self, X):#作业:用矩阵运算来计算欧式距离,经过运行发现,这种方式是真的快:0.22秒
    num_test = X.shape[0]
    num_train = self.X_train.shape[0]
    dists = np.zeros((num_test, num_train)) 
    #以下做矩阵乘法,注意multiply是对应位置上的元素相乘
    dists += np.sum(np.multiply
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值