具有200个功能的DataFrame具有异常高的PCA结果

时间:2017-08-08 21:08:06

标签: python python-3.x pandas scikit-learn pca

我在PCA()中使用包含{200}功能的数据框的sklearn实现。此数据框是使用以下代码创建的:

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时,这个结果是否实际通常是不合逻辑的?

更多问题

  • 简而言之,我的数据实际上只倾向于一个功能吗?
  • 可能导致这种情况的原因是什么?
  • 在运行PCA之前对每个客户的功能值进行求和会影响这个吗?
  • 我应该如何重组我的数据以克服这个看似错误?

1 个答案:

答案 0 :(得分:1)

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

  

当组件数量设置为200时,这个结果是否真的不合逻辑?

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

  • 要么有很多缺失值,要么用零填充它们(不是最先进的方法),这会为更高的关系创建一个点;
  • 您的数据确实高度相关,因此PCA()会在功能中汇总200个功能的信息。
  • 您的数据只是一个问题。
  

简而言之,我的数据实际上只倾向于一个功能吗?

     

导致这种情况的原因是什么?

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

我建议你执行一些数据预处理,因为大约99%的解释方差比率,1个特征看起来非常可疑。这可能是由上述陈述引起的。

  

在运行PCA之前对每个客户的功能值进行求和会影响这个吗?

任何数据操作都会影响分解,除了某些情况,例如将一个正整数添加到一组正整数,依此类推。您应该在总和操作之前和之后将PCA应用于您的数据,以观察效果。

  

我应该如何重组我的数据以克服这个看似错误?

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