sklearn数据集中手写数字数据集sklearn.datasets.load_digits()包含1797个手写数字图片,首先导入数据
import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_digits from sklearn.decomposition import PCA from sklearn.ensemble import RandomForestClassifier digits=load_digits() data=pd.Dataframe(digits['data'],columns=digits['feature_names']) label=digits['target']
每个图片是8*8=64个像素,也就是64维数据对应1个标签,现在看一下前20张图
fig,ax=plt.subplots(2,10,figsize=(10,2),subplot_kw={'xticks':[],'yticks':[]})
for i,axi in enumerate(ax.flatten()):
axi.imshow(digits['images'][i,:,:],cmap='gray')
plt.show()
用PCA对数据进行降维,先画维度与信息保留量之间的关系
pca=PCA() pca.fit(data) explained_variance_ratio=pca.explained_variance_ratio_ plt.plot(np.cumsum(explained_variance_ratio)) plt.show()
在降维到30的时候数据保留量为96.3%,因此将降维数设置为30.
pca=PCA(n_components=30) data_dec=pca.fit_transform(data)
现在用随机森林算法对数据进行分类. 首先将数据分为训练集和测试集
data_train,data_test,label_train,label_test=train_test_split(data_dec,label,test_size=0.5)
学习训练集
classifier=RandomForestClassifier() classifier.fit(data_train,label_train) print(classifier.score(data_train,label_train)) print(classifier.score(data_test,label_test))
在训练集上的分数为1,测试集为0.96. 看一下降维的大小与测试集分数的关系
n_component=pd.Series(range(1,65)) score=n_component.apply(pca_forest_score) plt.plot(score) plt.show()
这行代码大概需要半分钟,可以看出10维往上时学习曲线稳定在0.9以上.



