python调用数据集mnist_使用MNIST数据集进行分类

本文是对书《机器学习实战:基于Scikit-Learn和Tensorflow》第三章的知识学习以及代码复现,欢迎大家一起学习一起进步。

获取数据集

提前将MNIST数据集下载好,并放在’\scikit_learn_data’目录之下from sklearn.datasets import fetch_mldata

mnist = fetch_mldata('MNIST original', data_home=r'C:\Users\12637\scikit_learn_data')

mnist

python调用数据集mnist_使用MNIST数据集进行分类_第1张图片

001.pngX, y = mnist["data"], mnist["target"]

X.shape

python调用数据集mnist_使用MNIST数据集进行分类_第2张图片

002.png

一共有70000张图片,每张图片有784个特征。因为图片是28×28像素,每个特征代表了一个像素点的强度,从0(白色)到255(黑色)。随手抓取一个实例的特征向量,将其重新形成一个28X28数组,然后用Matplotlib的imshow()函数将其显示出来%matplotlib inline

import matplotlib

import matplotlib.pyplot as plt

some_digit = X[36000]

some_digit_image = some_digit.reshape(28, 28)

plt.imshow(some_digit_image, cmap=matplotlib.cm.binary, interpolation="nearest")

plt.axis("off")

plt.show()

python调用数据集mnist_使用MNIST数据集进行分类_第3张图片

003.png# MNIST数据集中的部分数字图像

X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]

# 给训练集数据洗牌

import numpy as np

shuffle_index = np.random.permutation(60000)

X_train, y_train = X_train[shuffle_index], y_train[shuffle_index]

训练一个二元分类器# 训练一个二元分类器

y_train_5 = (y_train == 5) # True for all 5s, False for all other digits

y_test_5 = (y_test == 5)

from sklearn.linear_model import SGDClassifier

sgd_clf = SGDClassifier(random_state=42)

sgd_clf.fit(X_train, y_train_5)

sgd_clf.predict([some_digit])

python调用数据集mnist_使用MNIST数据集进行分类_第4张图片

004.png

实施交叉验证# 实施交叉验证

from sklearn.model_selection import StratifiedKFold

from sklearn.base import clone

skfolds = StratifiedKFold(n_splits=3, random_state=42)

for train_index, test_index in skfolds.split(X_train, y_train_5):

clone_clf = clone(sgd_clf)

X_train_folds = X_train[train_index]

y_train_folds = (y_train_5[train_index])

X_test_fold = X_train[test_index]

y_test_fold = (y_train_5[test_index])

clone_clf.fit(X_train_folds, y_train_folds)

y_pred = clone_clf.predict(X_test_fold)

n_correct = sum(y_pred == y_test_fold)

print(n_correct / len(y_pred))

python调用数据集mnist_使用MNIST数据集进行分类_第5张图片

005.png

python调用数据集mnist_使用MNIST数据集进行分类_第6张图片

006.png

混淆矩阵# 混淆矩阵

from sklearn.model_selection import cross_val_predict

y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)

from sklearn.metrics import confusion_matrix

confusion_matrix(y_train_5, y_train_pred)

python调用数据集mnist_使用MNIST数据集进行分类_第7张图片

007.png

精度和召回率以及精度/召回率平衡

python调用数据集mnist_使用MNIST数据集进行分类_第8张图片

008.pngy_scores = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3, method="decision_function")

from sklearn.metrics import precision_recall_curve

precisions, recalls, thresholds = precision_recall_curve(y_train_5, y_scores)

def plot_precision_recall_vs_threshold(precisions, recalls, thresholds):

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])

plot_precision_recall_vs_threshold(precisions, recalls, thresholds)

plt.show()

python调用数据集mnist_使用MNIST数据集进行分类_第9张图片

009.png

ROC曲线绘制# ROC曲线

from sklearn.metrics import roc_curve

fpr, tpr, thresholds = roc_curve(y_train_5, y_scores)

def plot_roc_curve(fpr, tpr, label=None):

plt.plot(fpr, tpr, linewidth=2, label=label)

plt.plot([0, 1], [0, 1], 'k--')

plt.axis([0, 1, 0, 1])

plt.xlabel('False Positive Rate')

plt.ylabel('True Positive Rate')

plot_roc_curve(fpr, tpr)

plt.show()

python调用数据集mnist_使用MNIST数据集进行分类_第10张图片

010.pngfrom sklearn.ensemble import RandomForestClassifier

forest_clf = RandomForestClassifier(random_state=42)

y_probas_forest = cross_val_predict(forest_clf, X_train, y_train_5, cv=3, method="predict_proba")

y_scores_forest = y_probas_forest[:, 1]

fpr_forest, tpr_forest, thresholds_forest = roc_curve(y_train_5, y_scores_forest)

plt.plot(fpr, tpr, "b:", label="SGD")

plot_roc_curve(fpr_forest, tpr_forest, "Random Forest")

plt.legend(loc="bottom right")

plt.show()

python调用数据集mnist_使用MNIST数据集进行分类_第11张图片

011.png

多类别分类器

python调用数据集mnist_使用MNIST数据集进行分类_第12张图片

012.png

python调用数据集mnist_使用MNIST数据集进行分类_第13张图片

013.png

错误分析# 错误分析

y_train_pred = cross_val_predict(sgd_clf, X_train_scaled, y_train, cv=3)

conf_mx = confusion_matrix(y_train, y_train_pred)

conf_mx

python调用数据集mnist_使用MNIST数据集进行分类_第14张图片

014.png

python调用数据集mnist_使用MNIST数据集进行分类_第15张图片

015.png

python调用数据集mnist_使用MNIST数据集进行分类_第16张图片

016.png

多标签分类# 多标签分类

from sklearn.neighbors import KNeighborsClassifier

y_train_large = (y_train >= 7)

y_train_odd = (y_train % 2 == 1)

y_multilabel = np.c_[y_train_large, y_train_odd]

knn_clf = KNeighborsClassifier()

knn_clf.fit(X_train, y_multilabel)

knn_clf.predict([some_digit])

多输出分类# 多输出分类

noise = np.random.randint(0, 100, (len(X_train), 784))

X_train_mod = X_train + noise

noise = np.random.randint(0, 100, (len(X_test), 784))

X_test_mod = X_test + noise

y_train_mod = X_train

y_test_mod = X_test

def plot_digit(data):

image = data.reshape(28, 28)

plt.imshow(image, cmap = matplotlib.cm.binary,

interpolation="nearest")

plt.axis("off")

some_index = 5500

plt.subplot(121); plot_digit(X_test_mod[some_index])

plt.subplot(122); plot_digit(y_test_mod[some_index])

plt.show()

python调用数据集mnist_使用MNIST数据集进行分类_第17张图片

017.pngknn_clf.fit(X_train_mod, y_train_mod)

clean_digit = knn_clf.predict([X_test_mod[some_index]])

plot_digit(clean_digit)

python调用数据集mnist_使用MNIST数据集进行分类_第18张图片

018.png

https://www.jianshu.com/p/b6cf853975cc

你可能感兴趣的:(python调用数据集mnist_使用MNIST数据集进行分类)