回答问题

我正在尝试从使用 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 空间中的负数——两者本质上都表示空间中的相同方向。检查这篇文章以供进一步参考。

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐