王宇睿2015201906 接下来介绍多分类问题,识别0-9共十个手写数字。一种方法是构造十个二分类器,在判断测 试数据时,输出最高得分的分类,这被称为one-versus-all(OvA)strategy;或者也可以训练 45个(C2)二分类器,用于判断-对数字,如0和1,0和2等,这叫做one-versus-.one (OvO)strategy。.这两种方法在sklearn中都有实现,分别为OneVsOneClassifier和 OneVsRestClassifier ·上机练习 使用书中提供的代码,在MNIST数据集上进行手写体识别分类。 注意在跑到第31个cel时,precision_.recall_curve0i语句会报错,提示ValueError:bad input shape,这是因为电脑系统原因,我没有安装docker,,因此python中安装的sklearn版本较 高,和代码中要求的不匹配,造成了函数定义的细小差别,将sklearn降低版本安装即可。 书中提供的代码除了包括课堂的内容,还额外补充了KNN(K Neighbors Classifier)分类器 的使用。KNN是通过测量不同特征值之间的距离进行分类,思路是:如果一个样本在特征空 间中的k个最相似即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于 这个类别。在KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只 依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 代码中有个小tck,通过上下左右不同方向移动数据集的方式,可以扩大训练集,从原来的 70000扩大到300000,accuracy也有一点提升。总的来说,KNN算法用于MNIST数据集手写 体识别准确率能达到97%以上,比SGD好一些 ·课后工作 阅读学习《python大战机器学习》的K邻近章节,使用scikit-learn自带的手写识别数据集 Digit Dataset(由于MNIST数据集太大,速度较慢)进行手写体识别分类,同时测试KNN算 法中n_neighbor ights和p参数的影响, 使用交叉验证,测试集与训练集的比例为1:3,使用KNN分类器,在训练集上最好的accuracy 为0.991091,在则试集上最好的accuracy为0.980000。 试KNN中n nei ors和V hts参数的影响,使用numpy中的linspace方法创建 n_neighbors(k值)的等差数列(数据集大小为179764,因此k值只取到1400),并选取 weights:为uniform、distancei两种,绘制不同weights"下,accuracy随n_neighbors的曲 线 可以看到,weights -uniform时得分随K值的增加而下降, 而weights=-distance时 ,K值的影响 不算太大。weights参数是在进行分类判断时给最近邻附上的加权,uniform:是等权加权, distance是按照距离的倒数进行加权。当K值较小意味着只有与输入实例较近的训练实例才会 对预测结果起作用,但当K值较大时,学习的近似误差增大,这时与输入实例较远的训练实例 也会对预测起作用,使预测发生错误 因此weights=-uniform时得分受K值影响很大。 测试KNN中n_neighbors和p参数的影响,绘制不同p值下,accuracy随n_neighbors的 曲线。 王宇睿 2015201906 接下来介绍多分类问题,识别0-9共⼗个⼿写数字。⼀种⽅法是构造⼗个⼆分类器,在判断测 试数据时,输出最⾼得分的分类,这被称为one-versus-all (OvA) strategy;或者也可以训练 45个( )⼆分类器,⽤于判断⼀对数字,如0和1,0和2等,这叫做one-versus-one (OvO) strategy。这两种⽅法在sklearn中都有实现,分别为OneVsOneClassifier和 OneVsRestClassifier。 - 上机练习 使⽤书中提供的代码,在MNIST数据集上进⾏⼿写体识别分类。 注意在跑到第31个cell时,precision_recall_curve()语句会报错,提示ValueError: bad input shape,这是因为电脑系统原因,我没有安装docker,因此python中安装的sklearn版本较 ⾼,和代码中要求的不匹配,造成了函数定义的细⼩差别,将sklearn降低版本安装即可。 书中提供的代码除了包括课堂的内容,还额外补充了KNN(K Neighbors Classifier)分类器 的使⽤。 KNN是通过测量不同特征值之间的距离进⾏分类,思路是:如果⼀个样本在特征空 间中的k个最相似(即特征空间中最邻近)的样本中的⼤多数属于某⼀个类别,则该样本也属于 这个类别。在KNN算法中,所选择的邻居都是已经正确分类的对象。该⽅法在定类决策上只 依据最邻近的⼀个或者⼏个样本的类别来决定待分样本所属的类别。 代码中有个⼩trick,通过上下左右不同⽅向移动数据集的⽅式,可以扩⼤训练集,从原来的 70000扩⼤到300000,accuracy也有⼀点提升。总的来说,KNN算法⽤于MNIST数据集⼿写 体识别准确率能达到97%以上,⽐SGD好⼀些。 - 课后⼯作 阅读学习《python⼤战机器学习》的K邻近章节,使⽤ scikit-learn ⾃带的⼿写识别数据集 Digit Dataset(由于MNIST数据集太⼤,速度较慢)进⾏⼿写体识别分类, 同时测试 KNN算 法中 n_neighbors、weights 和p 参数的影响。 使⽤交叉验证,测试集与训练集的⽐例为1:3,使⽤KNN分类器,在训练集上最好的accuracy 为0.991091,在测试集上最好的accuracy为0.980000。 测试 KNN 中 n_neighbors 和 weights 参数的影响,使⽤numpy中的linspace⽅法创建 n_neighbors(k值)的等差数列(数据集⼤⼩为1797*64,因此k值只取到1400),并选取 weights为uniform、distance两种,绘制不同 weights下, accuracy 随 n_neighbors 的曲 线。 可以看到,weights=uniform时得分随K值的增加⽽下降,⽽weights=distance时,K值的影响 不算太⼤。weights参数是在进⾏分类判断时给最近邻附上的加权,uniform是等权加权, distance是按照距离的倒数进⾏加权。当K值较⼩意味着只有与输⼊实例较近的训练实例才会 对预测结果起作⽤,但当K值较⼤时,学习的近似误差增⼤,这时与输⼊实例较远的训练实例 也会对预测起作⽤,使预测发⽣错误,因此weights=uniform时得分受K值影响很⼤。 测试 KNN 中 n_neighbors 和 p 参数的影响,绘制不同p值下, accuracy 随 n_neighbors 的 曲线。 Cn 2 5