使用pandas数据框进行主成分分析

68

我该如何从pandas数据框中计算主成分分析?


我猜你也在尝试修改w3schools的例子 :) - Sridhar Sarnobat
2个回答

105

大多数 sklearn 对象与 pandas 数据框一起使用非常好,这种方法是否适合您?

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA

df = pd.DataFrame(data=np.random.normal(0, 1, (20, 10)))

pca = PCA(n_components=5)
pca.fit(df)

您可以通过以下方式访问组件本身:

pca.components_ 

28
这个方法很好。另外,可能有些人会对以下信息感兴趣:不仅可以得到一个数组,还经常方便地得到一个DataFrame。为了做到这一点,需要执行以下操作:pandas.DataFrame(pca.transform(df), columns=['PCA%i' % i for i in range(n_components)], index=df.index),其中,我设置了n_components=5。另外,在代码上面的文本中,"panadas"应该是"pandas",你打错字了。 :) - Moot
4
在我的情况下,我需要组件而不是转换,所以使用@Moot的语法,我使用了df = pandas.DataFrame(pca.components_)。还有一点需要注意的是,如果你想要使用这个新的df进行点积,确保查看这个链接:[https://dev59.com/TmQn5IYBdhLWcg3w7KrS#16473007]。 - rajan

8
import pandas
from sklearn.decomposition import PCA
import numpy
import matplotlib.pyplot as plot

df = pandas.DataFrame(data=numpy.random.normal(0, 1, (20, 10)))

# You must normalize the data before applying the fit method
df_normalized=(df - df.mean()) / df.std()
pca = PCA(n_components=df.shape[1])
pca.fit(df_normalized)

# Reformat and view results
loadings = pandas.DataFrame(pca.components_.T,
columns=['PC%s' % _ for _ in range(len(df_normalized.columns))],
index=df.columns)
print(loadings)

plot.plot(pca.explained_variance_ratio_)
plot.ylabel('Explained Variance')
plot.xlabel('Components')
plot.show()

PCA 中的 whiten=True 参数会为您进行归一化,如果需要的话。 - leitungswasser
如果有疑问,就进行规范化处理,否则您的数据可能会有两个不同的比例。例如,如果一个列中有年龄,另一个列中有人口,则这是两种不同的度量比例,需要进行规范化处理才能运行PCA。 - NL23codes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接