Scikit-Learn 机器学习笔记 – MNIST


参考文档: handson-ml


import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDClassifier# 加载MNIST数据集
def load_dataset():from sklearn.datasets import fetch_mldatamnist = fetch_mldata('MNIST original', data_home='dataset')X, y = mnist['data'], mnist['target']X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]shuffle_index = np.random.permutation(60000)X_train, y_train = X_train[shuffle_index], y_train[shuffle_index]print('load mnist successfully\n', 'X_train shape is: ', X_train.shape, 'X_test shape is:', X_test.shape)return X_train, X_test, y_train, y_test# 展示数据集的样本
def show_data(dataset, labels, index):sample = dataset[index]sample_img = sample.reshape(28, 28)print('The label of this image is:', labels[index])plt.imshow(sample_img)plt.axis('off')plt.show()# 单个数字的随机梯度下降二分类器
def single_number_classify(X_train,  y_train, number):# 重构数据标签,该数字的标签为1其它数字为0y_train_i = (y_train == number)# y_test_i = (y_test == number)# 创建随机梯度下降分类器实例sgd_clf = SGDClassifier(random_state=42)sgd_clf.fit(X_train, y_train_i)return sgd_clf, y_train_i# 单个数字的随机梯度下降二分类器预测
def snc_predict(sgd_clf, samples):predict = sgd_clf.predict(samples)print(' Predicted as:', predict)# 单个数字的随机梯度下降二分类器性能评估,用验证集评估不是测试集
def snc_assess(sgd_clf, X_train, y_train_i):# K折交叉验证评分,指标为精度, 设置为3折from sklearn.model_selection import cross_val_scorecrs = cross_val_score(sgd_clf, X_train, y_train_i, cv=3, scoring="accuracy")print('3折交叉验证精度为:', crs)# 计算混淆矩阵, 每一行表示一个实际的类, 而每一列表示一个预测的类, 值为样本的个数from sklearn.model_selection import cross_val_predictfrom sklearn.metrics import confusion_matrixy_train_pred = cross_val_predict(sgd_clf, X_train, y_train_i, cv=3)confu_matrix = confusion_matrix(y_train_i, y_train_pred)print('单数字二分类器混淆矩阵为:', confu_matrix)# 计算准确率、召回率和F1值from sklearn.metrics import precision_score, recall_score, f1_scoreprecision = precision_score(y_train_i, y_train_pred)recall = recall_score(y_train_i, y_train_pred)f1_sco = f1_score(y_train_i, y_train_pred)print('准确率为:', precision, '召回率为', recall, 'F1值为:', f1_sco)# 获得准确率、召回率、阈值数据from sklearn.metrics import precision_recall_curvey_scores = cross_val_predict(sgd_clf, X_train, y_train_i, cv=3, method="decision_function")precisions, recalls, thresholds = precision_recall_curve(y_train_i, y_scores)# 绘制曲线plt.plot(thresholds, precisions[:-1], "b--", label="Precision")plt.plot(thresholds, recalls[:-1], "g-", label="Recall")plt.xlabel("Threshold")plt.legend(loc="upper left")plt.ylim([0, 1])plt.show()# ROC曲线,即真正例率(true positive rate,另一个名字叫做召回率)对假正例率(false positive rate, FPR)的曲线from sklearn.metrics import roc_curvefpr, tpr, thresholds = roc_curve(y_train_i, y_scores)# 绘制ROC曲线plt.plot(fpr, tpr, linewidth=2, label=None)plt.plot([0, 1], [0, 1], 'k--')plt.axis([0, 1, 0, 1])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.show()# 手写数字的随机梯度下降多分类器,默认为OvA/OvR(一对所有/一对其它)
def number_classify_ova(X_train, y_train):# 创建随机梯度下降多分类器实例sgd_clf = SGDClassifier(random_state=42)sgd_clf.fit(X_train, y_train)# 预测样本sample = X_train[100]predict = sgd_clf.predict([sample])# 查看该样本在各类中的得分digit_scores = sgd_clf.decision_function([sample])print('OvA的随机梯度下降分类器预测结果为:', predict, '该样本的各类得分:', digit_scores)return sgd_clf# 手写数字的随机梯度下降多分类器,使用OvO(一对一)
def number_classify_ovo(X_train, y_train):# 创建OvO的随机梯度下降多分类器实例from sklearn.multiclass import OneVsOneClassifierovo_sgd_clf = OneVsOneClassifier(SGDClassifier(random_state=42))ovo_sgd_clf.fit(X_train, y_train)# 预测样本sample = X_train[100]predict = ovo_sgd_clf.predict([sample])print('OvO的随机梯度下降分类器预测结果为:', predict)# 手写数字的随机森林(Random Forest)多分类器
def number_classify_rf(X_train, y_train):# 创建随机森林多分分类器from sklearn.ensemble import RandomForestClassifierforest_clf = RandomForestClassifier(random_state=42)forest_clf.fit(X_train, y_train)# 预测sample = X_train[100]predict = forest_clf.predict([sample])print('随机森林预测分类器结果为', predict)# 输入正则化后的手写数字随机梯度下降多分类器的结果
def input_scaled_sgd(sgd_clf, X_train, y_train):# 对训练集进行标准的缩放from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))# 评估分类器的性能from sklearn.model_selection import cross_val_predictfrom sklearn.metrics import confusion_matrixfrom sklearn.model_selection import cross_val_scorescores = cross_val_score(sgd_clf, X_train_scaled, y_train, cv=3, scoring="accuracy")print('输入正则化后的手写数字随机梯度下降多分类器的3折交叉验证精度为:', scores)y_train_pred = cross_val_predict(sgd_clf, X_train_scaled, y_train, cv=3)conf_mx = confusion_matrix(y_train, y_train_pred)print('输入正则化后的手写数字随机梯度下降多分类器的混淆矩阵:\n', conf_mx)# 绘制混淆矩阵图# 换算出各元素在行中所占的比例row_sums = conf_mx.sum(axis=1, keepdims=True)norm_conf_mx = conf_mx / row_sums# 对角线置0,为了更好地观察不好的点(亮度高),np.fill_diagonal(norm_conf_mx, 0)plt.matshow(norm_conf_mx, cmap=plt.cm.gray)plt.show()if __name__ == '__main__':# 加载数据集X_train, X_test, y_train, y_test = load_dataset()# 展示数据集的某个样本# show_data(X_train, y_train, 100)# 创建单个数字的随机梯度下降二分类器# sgd_clf, y_train_i = single_number_classify(X_train, y_train, 5)# 用单个数字的随机梯度下降二分类器测试样本# snc_predict(sgd_clf, X_train[:3])# 评估单个数字的随机梯度下降二分类器的性能# snc_assess(sgd_clf, X_train, y_train_i)# 使用手写数字的随机梯度下降多分类器,OvAsgd_clf_ova = number_classify_ova(X_train, y_train)# 使用手写数字的随机梯度下降多分类器,OvO# number_classify_ovo(X_train, y_train)# 使用手写数字的随机森林多分类器# number_classify_rf(X_train, y_train)# 输入正则化后手写数字的随机梯度下降多分类器的性能评估input_scaled_sgd(sgd_clf_ova, X_train, y_train)

Scikit-Learn 机器学习笔记 -- MNIST相关推荐

  1. [转载]Scikit Learn: 在python中机器学习

    原址:http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据集大小的示例:数码 ...

  2. 机器学习与Scikit Learn学习库

    摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...

  3. Scikit Learn: 在python中机器学习

    Warning 警告:有些没能理解的句子,我以自己的理解意译. 翻译自:Scikit Learn:Machine Learning in Python 作者: Fabian Pedregosa, Ga ...

  4. 机器学习笔记(二十八):高斯核函数

    凌云时刻 · 技术 导读:核函数是机器学习算法中一个重要的概念.简单来讲,核函数就是样本数据点的转换函数.这一节我们来看看应用非常广泛的一个核函数,高斯核函数. 作者 | 计缘 来源 | 凌云时刻(微 ...

  5. 2021李宏毅机器学习笔记--22 Generative Adversarial Network 01

    @[TOC](2021李宏毅机器学习笔记–22 Generative Adversarial Network 01(GAN,生成式对抗网络)) 摘要 GAN是建立于神经网络的基础上的,其核心思想是&q ...

  6. 【李宏毅机器学习笔记】 17、迁移学习(Transfer Learning)

    [李宏毅机器学习笔记]1.回归问题(Regression) [李宏毅机器学习笔记]2.error产生自哪里? [李宏毅机器学习笔记]3.gradient descent [李宏毅机器学习笔记]4.Cl ...

  7. Python机器学习笔记:sklearn库的学习

    自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了,scikit-learn简称sklearn,支持包括分类,回归,降维和聚类四大机器学习算法.还包括了特征提取,数据 ...

  8. matlab回归问题,机器学习笔记(一)—— 线性回归问题与Matlab求解

    给你多组数据集,例如给你很多房子的面积.房子距离市中心的距离.房子的价格,然后再给你一组面积. 距离,让你预测房价.这类问题称为回归问题. 回归问题(Regression) 是给定多个自变量.一个因变 ...

  9. python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别

    之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...

最新文章

  1. 动态追踪技术思想及应用
  2. python删除所有core文件_python – 从pandas.core.series.Series中删除前导零
  3. python lua 性能比较 内存_Lua 的速度为什么比 Python 快?
  4. lokijs可以用mysql_JavaScript实现的内存数据库LokiJS介绍和入门实例_javascript技巧
  5. dvd在线租赁问题 matlab,DVD在线租赁问题.doc
  6. 计算机科学与工程国际研讨会,2018年北京计算机科学与技术国际研讨会
  7. 用java写出死锁的例子_【面试】请写一个java死锁的例子-Go语言中文社区
  8. springboot智慧幼儿园管理系统的设计与实现毕业设计源码271611
  9. matlab画图空值显示呈无色_MATLAB函数图像显示空白
  10. 51单片机控制舵机c语言代码,一文解析51单片机PWM双舵机控制(附程序)
  11. 通知:大数据技术架构知识库公开
  12. 数字时代带给孩子们的只有“冰冷”的科技吗?_数字体验_新浪博客
  13. R语言使用dplyr包计算dataframe分组聚合样本独特值个数、计数个数、四分位距IQR
  14. 罗格斯的计算机科学博士奖学金,罗格斯大学计算机工程博士专业排名全网最新深刻分析...
  15. NOIP 2015 简记
  16. ajax + laypage实现分页
  17. HazelEngine 学习记录 - 2D Renderer Transforms and 2D Renderer Textures
  18. java毕业设计的健身俱乐部综合管理系统mybatis+源码+调试部署+系统+数据库+lw
  19. 360 android 应用市场,360手机助手在安卓应用市场占大份额
  20. 基于暗通道优先的单幅图像去雾算法(Matlab)

热门文章

  1. NPOI 修改已存在的excel文件,设置第一行行高
  2. 1.1.3 以Self Host方式寄宿Web API
  3. Android系统中自定义按键的短按、双击、长按事件
  4. Oracle新建实例后,修改sys和system密码。
  5. JS高级部分(个人认为)
  6. node.js--exports和module.exports
  7. u3d资源打包只能打包场景材质,不能打包脚本
  8. 手工将python程序发布为exe执行程序 [转]
  9. NOIp2018集训test-9-7(pm) (联考一day1)
  10. 【Rain in ACStar HDU-3340】