python-3.x - 如何在数据集上应用 PCA 并打印相关特征
问题描述
我有一个 23 行 48 列的数据集。我正在应用 PCA 来减少列维度的数量。我使用以下代码示例,我发现只有 23 个是必需的功能:
#first
import numpy as np
from sklearn.decomposition import PCA
pca = PCA().fit(only_features)
plt.figure(figsize=(15,8))
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel('number of components')
plt.ylabel('cumulative explained variance')
#second
df_pca = pca.fit_transform(X=only_features)
df_pca = pd.DataFrame(df_pca)
print(df_pca.shape)
但是,我想知道需要哪些功能。例如:如果原始数据集有列 Az 并由 PCA 减少,那么我想知道选择了哪些特征。
怎么做?
感谢帮助
解决方案
归功于这个answer1 & answer2,Sklearn 的文档指出当您不指定n_components
参数时保留的组件数量是min(n_samples, n_features)
. 所以min(23, 48) = 23
这就是为什么你需要 23 在你的情况下。
解决方案 1:如果您Sklearn
对此答案使用图书馆学分
- 通过以下方式检查 PC 的差异:
pca.explained_variance_ratio_
- 通过以下方式检查 PC 的重要性:
print(abs( pca.components_ ))
- 使用自定义功能提取有关 PC 的更多信息,请参阅此答案。
解决方案 2:如果您使用PCA
库文档
# Initialize
model = pca()
# Fit transform
out = model.fit_transform(X)
# Print the top features. The results show that f1 is best, followed by f2 etc
print(out['topfeat'])
# PC feature
# 0 PC1 f1
# 1 PC2 f2
# 2 PC3 f3
# 3 PC4 f4
# 4 PC5 f5
...
甚至您也可以通过以下方式制作 PC 图: model.plot()
推荐阅读
- java - Apache Ignite 中的复制
- android - 如何在 App 内的 Android WebView 中设置标志?
- mongodb - mongdb 中的聚合 addFields 和 not_In 出错
- python - 是否有用于 ANOVA 事后分析的 Games-Howell 多重比较的 python 包?
- firebase - 如何在 firebase 中使用 Cloud Functions 更新使用 Cloud Firestore 中的数据填充的 UI 元素?
- kubeflow-pipelines - 如何使用 Kubeflow Pipelines API 进行身份验证
- php - 我想在 Laravel 集合中返回一些键和值
- javascript - handlebarsjs 通过数字 id 访问上下文
- c++ - (C++) 中断;并返回;不适用于我的 for() 函数
- boolean-logic - 表达式 !A + (A . !B) = !(AB) 如何?