通过上一小节中详尽的介绍,我们了解了PCA内部的工作原理,接下来讨论如何使用scikit-learn中提供的PCA类。PCA也是scikit-learn中的一个数据转换类,在使用相同的模型参数对训练数据和测试数据进行转换之前,我们首先要使用训练数据对模型进行拟合。下面,我们使用scikit-learn中的PCA对葡萄酒数据集做预处理,然后使用逻辑斯谛回归对转换后的数据进行分类,最后用第2章中定义的plot_decision_region函数对决策区域进行可视化展示。
执行上述代码后,我们可以看到将训练数据转换到两个主成分轴后生成的决策区域。
如果比较scikit-learn中提供的PCA类与我们自己实现的PCA类的分析结果,可以发现:上图可以看作是我们此前自己完成PCA方法所得到沿y轴进行旋转后的结果。出现此差异的原因,不是两种方法在实现中出现了什么错误,而在于特征分析方法:特征向量可以为正或者为负。这不是重点,因为有需要时我们可以在数据上乘以-1来实现图像的镜像。注意:特征向量通常会缩放到单位长度1。为了保证整个分析过程的完整性,我们绘制一下逻辑斯谛回归在转换后的测试数据上所得到的决策区域,看其是否能很好地将各类分开:
执行上述代码,我们绘制出了测试集的决策区域,可以看到:逻辑斯谛回归在这个小的二维特征子空间上表现优异,只误判了一个样本。
如果我们对不同主成分的方差贡献率感兴趣,可以将PCA类中的n_componets参数设置为None,由此,可以保留所有的主成分,并且可以通过explained_variance_ratio_属性得到相应的方差贡献率:
请注意:在初始化PCA类时,如果我们将n_components设置为None,那么它将按照方差贡献率递减顺序返回所有的主成分,而不是进行降维操作。