7-6 scikit learn中的PCA

沿用7-5中的测试数据,使用scikit-learn中的PCA

from sklearn.decomposition import PCA

pca = PCA(n_components=1)
pca.fit(X)

输入:pca.components_ 输出:array([[-0.75366744, -0.65725595]]) 这个轴与7-5中的计算结果是相反的。因为scikit-learn中不是什么梯度下降法而是什么数学方法计算的。 轴的方向相反不影响算法的结果

对比原始数据与降维再恢复后的数据

X_reduction = pca.transform(X)
X_restore = pca.inverse_transform(X_reduction)

plt.scatter(X[:, 0], X[:, 1], color='b', alpha=0.5)
plt.scatter(X_restore[:, 0], X_restore[:, 1], color='r', alpha=0.5)
plt.show()

使用真实数据测试PCA降维对效率和准确度的影响

真实数据

几种降维结果比较

PCA后的维数

运行时间

score

不降维

82.9 ms

0.9866666666666667

2

2.2

0.6066666666666667

28

1,05 时间更少了?

0.98

结论: 如果n_components选择合适,会大大减少训练时间而略微减少分类准确度,这样做是值得的。

选择合适的降维效果

确定新坐标系中每个维度保存了原数据的方差百分比

输出结果:

输出结果: 这张图表示了前N个维度所占方差的百分比

保留原始数据95%的方差

对原始数据降至2维的结果也有一定参考意义

假如只是要区分图中紫色的数据和红色的数据,降到2维就足够了

Last updated