gpt4 book ai didi

python - 如何将主成分分析的结果映射回输入模型的实际特征?

转载 作者:行者123 更新时间:2023-12-05 04:49:28 25 4
gpt4 key购买 nike

当我运行下面的代码时,我看到了“pca.explained_variance_ratio_”和一个直方图,它显示了为每个特征解释的方差比例。

import statsmodels.api as sm
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
from statsmodels.stats import anova

mtcars = sm.datasets.get_rdataset("mtcars", "datasets", cache=True).data
df = pd.DataFrame(mtcars)

x = df.iloc[:,2:]

from sklearn.preprocessing import StandardScaler

pca = PCA(n_components=11)
principalComponents = pca.fit_transform(df)


# Plotting the variances for each PC
PC = range(1, pca.n_components_+1)
plt.bar(PC, pca.explained_variance_ratio_, color='gold')
plt.xlabel('Principal Components')
plt.ylabel('Variance %')
plt.xticks(PC)

enter image description here

如何将 PCA 1 和 2 映射回数据框中的原始特征?

最佳答案

每个 PC 都是您的变量的线性组合。例如 PC1 将是(其中 X1、X2 代表每个因变量):

enter image description here

所以 w11、w22 将是您的负载,它们将代表每个功能对相关 PC 的影响。基本上它们会显示与您的 PC 的相关性请参阅 this post或者可能是这样的 blog获得 sklearn 的解释。

在您的示例中,您没有在 PC 之前缩放数据,因此负载最多的矢量将是幅度最大的矢量。所以让我们正确地做到这一点:

import statsmodels.api as sm
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt

mtcars = sm.datasets.get_rdataset("mtcars", "datasets", cache=True).data
df = pd.DataFrame(mtcars)
X = StandardScaler().fit_transform(df)
pca = PCA(n_components=11)
pca.fit(X)

# Plotting the variances for each PC
PC = range(1, pca.n_components_+1)
plt.bar(PC, pca.explained_variance_ratio_, color='gold')
plt.xlabel('Principal Components')
plt.ylabel('Variance %')
plt.xticks(PC)

enter image description here

这些是载荷:

PCnames = ['PC'+str(i+1) for i in range(pca.n_components_)]
Loadings = pd.DataFrame(pca.components_,columns=PCnames,index=df.columns)

Loadings.iloc[:,:2]

PC1 PC2
mpg 0.362531 -0.373916
cyl 0.016124 0.043744
disp -0.225744 -0.175311
hp -0.022540 -0.002592
drat 0.102845 0.058484
wt -0.108797 0.168554
qsec 0.367724 0.057278
vs 0.754091 0.230825
am -0.235702 -0.054035
gear 0.139285 -0.846419
carb 0.124896 0.140695

粗略地说,这意味着具有高 vs 的观察结果将在第一个组件 (PC1) 上获得更高的分数,而那些具有高 am 的观察结果同样将具有低分数。你可以检查他们的影响:

Loadings["PC1"].sort_values().plot.barh()

enter image description here

关于python - 如何将主成分分析的结果映射回输入模型的实际特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67585809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com