PCA 恢复数据帧中最重要的特征

Posted

技术标签:

【中文标题】PCA 恢复数据帧中最重要的特征【英文标题】:PCA recover most important features in a dataframe 【发布时间】:2019-11-04 17:19:48 【问题描述】:

我正在尝试研究如何使用 PCA 来确定最重要的功能。我想我已经在下面做到了。

然后我想知道,如何将最重要的特征及其原始列名(来自 pandas 数据框)传递回我在底部创建的新数据框 - 所以我可以将其用作新的“轻量级” ' 数据集?

这样,如果我将 n_components 设置为 10;我将有 10 个特征列(带有名称)传递到新数据框中。

有什么想法吗?

from sklearn.decomposition import PCA

# PCA (principal component analysis) aims to reduce the number of dimensions in the dataset, without losing those which are very relevant to the model
# it provides a score, you can drop those with poor scores.
X_pc = PCA(n_components=2).fit_transform(train_features)
pd.DataFrame('PC1': X_pc[:, 0], 'PC2': X_pc[:, 1], 'Y': train_labels.ravel()).sample(10)

【问题讨论】:

1222 如果我的回答有帮助,请告诉我 【参考方案1】:

PCA 通过线性组合初始特征将维度减少到 2。转换后,输出是一个具有 [samples, components] 大小的矩阵,因此无法创建数据框,因为您无法投影回名称/特征。

重要的特征是对组件影响更大的特征,因此对组件具有很大的绝对值。

如果您更改代码,您可以在 PC 上获得最重要的功能

from sklearn.decomposition import PCA
import pandas as pd
import numpy as np
np.random.seed(0)

# 10 samples with 5 features
train_features = np.random.rand(10,5)

model = PCA(n_components=2).fit(train_features)
X_pc = model.transform(train_features)

# number of components
n_pcs= model.components_.shape[0]

# get the index of the most important feature on EACH component
# LIST COMPREHENSION HERE
most_important = [np.abs(model.components_[i]).argmax() for i in range(n_pcs)]

initial_feature_names = ['a','b','c','d','e']

# get the names
most_important_names = [initial_feature_names[most_important[i]] for i in range(n_pcs)]

# LIST COMPREHENSION HERE AGAIN
dic = 'PC'.format(i+1): most_important_names[i] for i in range(n_pcs)

# build the dataframe
df = pd.DataFrame(sorted(dic.items()))

打印如下:

     0  1
 0  PC1  e
 1  PC2  d

所以在 PC1 上名为 e 的功能最重要,而在 PC2 上名为 d

阅读愉快:https://towardsdatascience.com/pca-clearly-explained-how-when-why-to-use-it-and-feature-importance-a-guide-in-python-7c274582c37e?source=friends_link&sk=65bf5440e444c24aff192fedf9f8b64f

【讨论】:

model.components 是“载荷”还是特征向量?我也认为您不能直接将其用作特征选择是否正确。 model.components_ 是特征向量,有时也称为“加载”。如果您使用X_new = np.dot(X,model.components_.T) 投影输入数据 X,那么您将获得 PCA“分数”。此外,是的,对于特征选择,存在更好的方法。另见:stats.stackexchange.com/a/342880/181233

以上是关于PCA 恢复数据帧中最重要的特征的主要内容,如果未能解决你的问题,请参考以下文章

PCA 分析后的特征/变量重要性

sqlserver 2008 备份恢复实战

财务软件数据恢复中最严重的错误做法

虚拟机数据恢复FreeNAS+ESXi数据恢复案例

PCA算法

机器学习之主成分分析(PCA&特征选择)