机器学习——训练MNIST数据集

MNIST数据集介绍

MNIST是一个手写数字数据集,数据集包含60000个训练数据与10000个测试数据,由500位作者手写而成,其中250位的手写作为训练数据,其余250位的手写作为测试数据。
通过这里MNIST数据集获取数据。

根据官方描述,该数据集的每个数据都被统一格式化成28 * 28像素大小,并已将手写数字居中于图像中央,即我们无需对数据集进行过多的预处理。

观察数据集可以发现,训练集60000,测试集10000,每张图片拥有784个特征。

X_train, y_train = load_train()
X_test, y_test = load_test()

print(X_train.shape)	# (60000, 784) (10000, 784)
print(y_train.shape)	# (60000,) (10000,)

使用matplotlib绘制其中一张图如下

image = X_train[0].reshape(28, 28)
plt.imshow(image, cmap='binary', interpolation="nearest")
plt.show()

mnist
显而易见,训练集的第一张手写图是数字“5”

训练思路

降维

通过观察数据发现,每张图片的边缘存在大量空白,即使删掉这部分内容,也不会丢失太多信息。针对这种情况,考虑使用降维来去除这些无关信息,降维还能够将两个相邻特征合并为一个,以此来降低维度,提升训练速度。

选择模型

本文将尝试使用几种模型对数据集进行训练:K邻近、SVM(支持向量机)、随机森林
其中,由于SVM是一个二元分类器,所以将会对10个数字分别训练10个分类器。
为了给模型找到合适的超参数,以更好的拟合数据,则使用GridSearchCV(网格搜索)对超参数进行微调。
最后采用模型集成来做预测。

评估模型

通过两种方式来评估模型性能,分别是交叉验证与混淆矩阵。

训练模型

PCA

使用PCA(主成分分析)降维,问题在于如何设置合适的维度,n_components参数用于设置需要保留的主成分数;
若不确定其主成分数,可以设置值为[0.0, 1.0],此时值表示要保留的方差率。

from sklearn.decomposition import PCA

# 使用主成分分析降维,保留95%的可解释方差比
pca = PCA(n_components=0.95)
X_train = pca.fit_transform(X_train)

print(pca.n_components_) # 输出154,即保留了154个主成分
KNN

KNN(K-邻近值)感觉是比较适合这项分类任务的模型。
使用sklearn提供的网格搜索,找出合适的模型超参数。

网格搜索

from sklearn.model_selection import GridSearchCV

# 尝试以下参数组合
param_grid= [
        {
   
   'weights': ['uniform', 'distance'], 'n_neighbors': [5, 10, 15]}
    ]
grid_search = GridSearchCV(model, param_grid, cv=3<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值