声明:版权所有,转载请联系作者并注明出处 http://blog.csdn.net/u013719780
博主简介:风雪夜归子(英文名: Allen),机器学习算法攻城狮,喜爱钻研Machine Learning的黑科技,对Deep Learning和Artificial Intelligence充满兴趣,经常关注kaggle数据挖掘竞赛平台,对数据、Machine Learning和Artificial Intelligence有兴趣的各位童鞋可以一起探讨哦,个人CSDN博客: http://blog.csdn.net/u013719780?viewmode=contents
用主成分分析降维
现在是时候升一级了!主成分分析(Principal component analysis,PCA)是本书介绍的第一个高级技术。到目前为止都是些简单的统计学知识,而PCA将统计学和线性代数组合起来实现降维,堪称简单模型的杀手锏。
Getting ready
PCA是scikit-learn的一个分解模块。还有一些分解模块后面会介绍。让我们用iris
数据集演示一下,你也可以用自己的数据集:
from sklearn import datasets
iris = datasets.load_iris()
iris_X = iris.data
How to do it...
首先导入分解模块:
from sklearn import decomposition
然后,初始化一个PCA对象:
pca = decomposition.PCA()
pca
和scikit-learn其他对象相比,PCA的参数很少。这样PCA对象就创建了,下面用fit_transform
处理iris_X
数据:
iris_pca = pca.fit_transform(iris_X)
iris_pca[:5]
这样PCA就完成了,我们可以看看降维的效果:
pca.explained_variance_ratio_
How it works...
PCA是在数据分析中有一般性的数学定义和具体的应用场景。PCA用正交向量集表示原始数据集。
通常,PCA将原始数据集映射到新的空间中,里面每个列向量都是彼此正交的。从数据分析的视角看,PCA将数据集的协方差矩阵变换成若干能够“解释”一定比例变量的列向量。例如,在iris
数据集中,92.5%的变量可以由第一个主成份表示。
数据分析里面维度多会导致维度灾难,因此降维至关重要。通常算法处理高维训练集时会出现拟合过度(overfit)的情况,于是难以把握测试集的一般性特征。如果数据集的真实结构可以用更少的维度表示,那么通常都值得一试。
为了演示这点,我们用PCA将iris
数据集转换成二维数据。iris
数据集用全部的维度通常可以很好的分类:
pca = decomposition.PCA(n_components=2)
iris_X_prime = pca.fit_transform(iris_X)
iris_X_prime.shape
我们的矩阵现在是 150×2 150×2,不是 150×4 150×4了。二维变量更容易可视化:
%matplotlib inline
from matplotlib import pyplot as plt
f = plt.figure(figsize=(5, 5))
ax = f.add_subplot(111)
ax.scatter(iris_X_prime[:,0], iris_X_prime[:, 1], c=iris.target)
ax.set_title("PCA 2 Components")
把数据集降成二维之后还是分离特征依然保留。我们可以查看这二维数据保留了多少变量信息:
pca.explained_variance_ratio_.sum()
There's more...
PCA对象还可以一开始设置解释变量的比例。例如,如果我们想介绍98%的变量,PCA对象就可以这样创建:
pca = decomposition.PCA(n_components=.98)
iris_X_prime = pca.fit_transform(iris_X)
pca.explained_variance_ratio_.sum()
iris_X_prime.shape
由于我们想比二维主成份解释更多的变量,第三维就需要了。