前面通过一些小案例介绍了PCA降维的参数和属性,最后我们来做一个综合案例,对Sklean数字数据集进行降维,然后用随机森林和KNN两种方式,来做一个交叉验证。 

1、导入数据集

from sklearn.datasets import load_digits

digits = load_digits()
x = digits.data
y = digits.target

2、PCA调参

通过累计百分比可以看出,40个特征值左右,就能提取90%以上的特征,所以选择降到40维,如果要更细化,可以缩小范围,进一步调参。

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np

pca = PCA().fit(x)
ratios = pca.explained_variance_ratio_

plt.plot(range(len(ratios)), np.cumsum(ratios))
plt.show()

3、PCA降维

x_dr = PCA(40).fit_transform(x)
print(x_dr.shape) #(1797, 40)

4、逻辑森林

from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score

score = cross_val_score(RFC(random_state=42), x_dr, y, cv=10).mean()
print(score) #0.941

5、KNN

from sklearn.neighbors import KNeighborsClassifier as KNN

score = cross_val_score(KNN(), x_dr, y, cv=10).mean()
print(score) #0.972

由以上对比实验可以看出,PCA降维到40之后,再用逻辑森林和KNN进行分类,KNN效果比逻辑森林的效果更好,所以要提高分类准确率,除了特征提取外,模型选择也很重要。

本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/278