使用 sklearn 在 PCA 中恢复解释变量比的特征名称
回答问题 我正在尝试从使用 scikit-learn 完成的 PCA 中恢复,哪些功能被选为 relevant。 IRIS 数据集的经典示例。 import pandas as pd import pylab as pl from sklearn import datasets from sklearn.decomposition import PCA # load dataset iris =
·
回答问题
我正在尝试从使用 scikit-learn 完成的 PCA 中恢复,哪些功能被选为 relevant。
IRIS 数据集的经典示例。
import pandas as pd
import pylab as pl
from sklearn import datasets
from sklearn.decomposition import PCA
# load dataset
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# normalize data
df_norm = (df - df.mean()) / df.std()
# PCA
pca = PCA(n_components=2)
pca.fit_transform(df_norm.values)
print pca.explained_variance_ratio_
这返回
In [42]: pca.explained_variance_ratio_
Out[42]: array([ 0.72770452, 0.23030523])
如何恢复哪两个特征允许数据集中这两个解释的方差? 换句话说,我怎样才能在 iris.feature_names 中获得这个特征的索引?
In [47]: print iris.feature_names
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
在此先感谢您的帮助。
Answers
此信息包含在pca
属性中:components_
。如文档中所述,pca.components_
输出[n_components, n_features]
数组,因此要了解组件如何与不同功能线性相关,您必须:
注:每个系数代表特定对组件和特征之间的相关性
import pandas as pd
import pylab as pl
from sklearn import datasets
from sklearn.decomposition import PCA
# load dataset
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# normalize data
from sklearn import preprocessing
data_scaled = pd.DataFrame(preprocessing.scale(df),columns = df.columns)
# PCA
pca = PCA(n_components=2)
pca.fit_transform(data_scaled)
# Dump components relations with features:
print(pd.DataFrame(pca.components_,columns=data_scaled.columns,index = ['PC-1','PC-2']))
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
PC-1 0.522372 -0.263355 0.581254 0.565611
PC-2 -0.372318 -0.925556 -0.021095 -0.065416
重要提示: 作为旁注,请注意 PCA 符号不会影响其解释,因为该符号不会影响每个组件中包含的方差。只有形成 PCA 维度的特征的相对符号很重要。事实上,如果您再次运行 PCA 代码,您可能会得到带有反转符号的 PCA 尺寸。关于这一点的直觉,想想一个向量和它在 3-D 空间中的负数——两者本质上都表示空间中的相同方向。检查这篇文章以供进一步参考。
更多推荐
已为社区贡献126473条内容
所有评论(0)