具有 200 个特征的 DataFrame 上异常高的 PCA 结果

Unusually high PCA result on DataFrame with 200 features

我在具有 200 个特征的数据帧上使用 sklearn 中包含的 PCA() 实现。此数据框是使用以下代码创建的:

df = data.pivot_table(index='customer', columns='purchase', values='amount', aggfunc=sum)
df = df.reset_index().rename_axis(None, axis=1)
df = df.fillna(value=0)

然后,我实现了PCA():

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

pca = PCA(n_components=1)
p = pca.fit(df)
sum(pca.explained_variance_ratio_)

最终得到如下结果:

0.99999940944358268

我是不是错了,或者当组件数量设置为 200 中的 1 时,这个结果通常不合逻辑?


更多问题

您应该在这些资源中阅读有关主成分分析的更多信息:


Is it generally illogical for this result to be practical when the number of components is set to 1 out of 200?

可以通过解释方差接近于零的方式调整具有大量特征的数据。为了实现这一点,特征之间必须高度相关。对于您的情况,我可以假设两种情况:

  • 要么有很多缺失值,因为你用零填充它们(不是最先进的方法),这为更高的关系创造了一个点;
  • 要么你的数据真的高度相关,所以PCA()很好的把200个特征的信息聚合成一个new特征。
  • 要么只是您的数据有问题。

In short, is my data actually only leaning to the one feature?

What could be causing this?

如上所述,PCA 不适用于原始特征,因为它创建了新特征,从数据中总结了尽可能多的信息。因此,它实际上并不依赖于一个默认功能。

我建议您执行一些数据预处理,因为具有 1 个特征的解释方差比的 ~99% 看起来非常可疑。这可能是由上述语句引起的。

Does summing the values of the features for each customer prior to running PCA affect this?

除某些情况外,任何数据操作都会影响分解,例如将相同的正整数添加到一组正整数,等等。您应该在求和运算之前和之后对您的数据应用 PCA 以观察效果。

How should I restructure my data to overcome this seeming error?

首先,我会建议另一种方法来完成数据。您可以使用平均值或中位数逐列插入缺失值。其次,您应该了解特征的实际含义,以及是否有可能在分解之前删除其中的一些特征。您还可以实施缩放技术和/或规范化技术。但是这些通常应该在模型拟合之前和之后进行测试,因为它们也会影响模型指标。