sklearn PCA 如何在数据帧上工作?
Posted
技术标签:
【中文标题】sklearn PCA 如何在数据帧上工作?【英文标题】:Hows does sklearn PCA works on dataframes? 【发布时间】:2017-09-21 13:57:13 【问题描述】:我有以下数据框:
A B C D
0 4 1 1 78
1 82 2 58 41
2 53 3 31 76
3 1 45 4 12
5 5 2 4 87
6 1 74 6 11
7 1 1 6 47
8 1 1 6 8
我要申请的:
sklearn.decomposition.PCA
为了将列数从 4 减少到 2 而且我无法理解 PCA 将哪个维度:rows 或 columns 用作向量的数量。
因为如果我执行以下操作:
df=
A B C D
0 4 1 1 78
pca=PCA(n_components=3)
pca.fit(df.T)
它会返回以下错误:
ValueError: n_components=3 必须介于 0 和 n_features=1 之间 svd_solver='满'
即使每个向量中只有 1 个数据,我仍然应该能够将向量的数量从 4 个减少到 3 个。
【问题讨论】:
所以如果我理解正确,您想使用 PCA 将ABCD
减少到 AB
?
是的。或者在第二个例子中ABCD
到ABC
PCA 将数据转换为新维度。说 PCA 将 ABCD
减少到 ABC
在技术上是不正确的。它将ABCD
减少为一些新的XYZ
【参考方案1】:
这就是使用PCA
的方式,注意我也在标准化这些值。
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
vals = df.ix[:, :4].values
vals_std = StandardScaler().fit_transform(vals)
sklearn_pca = PCA(n_components = 'however many you want')
vals_pca = sklearn_pca.fit_transform(vals_std)
然后根据您确定的多少维度,您可以将其添加回您的数据框。
【讨论】:
如果df
只有 1 行数据,这是我的情况。
它对我有用,使用您提供的示例数据框
但如果你这样做,你最终会得到 1 台 PC,而我想要 3 台 PC,我有 4 列。
Arty,PCA 不适用于只有一行的数据集。 PCA 的想法是减少数据集中的特征数量,因此它基于计算数据集的“方差”并找到最能捕捉数据所有方差的正交。因此,仅计算 1 次观察的方差在技术上是不可能的。
正要说这个^^ @Arty以上是关于sklearn PCA 如何在数据帧上工作?的主要内容,如果未能解决你的问题,请参考以下文章