Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有200个特征的数据帧上的PCA结果异常高_Python_Python 3.x_Pandas_Scikit Learn_Pca - Fatal编程技术网

Python 具有200个特征的数据帧上的PCA结果异常高

Python 具有200个特征的数据帧上的PCA结果异常高,python,python-3.x,pandas,scikit-learn,pca,Python,Python 3.x,Pandas,Scikit Learn,Pca,我正在使用sklearn中包含的PCA()实现来处理一个具有200个特性的数据帧。此数据帧是使用以下代码创建的: 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(): 最后,我得到了如下结果: 0.9

我正在使用
sklearn
中包含的
PCA()
实现来处理一个具有200个特性的数据帧。此数据帧是使用以下代码创建的:

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()

最后,我得到了如下结果:

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


更多问题
  • 简言之,我的数据实际上只倾向于一个特征吗
  • 这可能是什么原因造成的
  • 在运行PCA之前,对每个客户的功能值求和是否会影响这一点
  • 我应该如何重新构造数据以克服这个看似错误的问题

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


当组件数量设置为200个中的1个时,该结果实际是否通常不合逻辑

可以用大量的特征对数据进行调整,以解释方差接近于零的情况。要实现这一点,这些特征必须彼此高度相关。在您的情况下,我可以假设两种情况:

  • 要么有很多缺失值,因为你用零填充它们(不是最先进的方法),这会为更高的关系创建一个点
  • 或者您的数据确实高度相关,因此
    PCA()
    新的功能中很好地聚合了200个功能的信息
  • 要么就是你的数据有问题
简言之,我的数据实际上只倾向于一个特征吗

这可能是什么原因造成的

如上所述,
PCA
不适用于原始特征,因为它会创建新特征,尽可能多地汇总数据中的信息。因此,它实际上并不倾向于一个默认特性

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

在运行PCA之前,对每个客户的功能值求和是否会影响这一点

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

我应该如何重新构造数据以克服这个看似错误的问题


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

。我认为这将是一个很好的地方来参考你所拥有的,这将让你对PCA有一个很好的了解。谢谢!这绝对是一个信息丰富的问题——我学到了很多。我还注意到,我没有先对数据进行标准化/缩放(这是个好主意),也没有在拟合模型后进行转换(我认为这是必须的)。是的,你必须使用
预处理来标准化数据,这是scikit learn中许多机器学习估计器的要求。我讨厌复制和粘贴,希望你找到你需要的。非常感谢你详尽的回答。我确实需要读/学更多。一个关于缺失值的快速问题-你的意思是只插补每列的平均值或中位数吗?我觉得0是最准确的填充,因为数据是在特定项目上花费的金额。所以,如果一个顾客买了面包但没有买牛奶,我认为她的牛奶价值应该是零。由于这个原因,我的数据中有很多零,因为每个客户在200个可能的选项中只买了一些。嗯,好的。那就行了。但是,如果每个客户都缺少一些值,则应完全删除这些值。假设没有人买牛奶,那么牛奶应该从数据框中删除。或者你也可以聚合产品并创建食品类别。E日记类等等。基本上,在应用分解之前降低数据的维度是可以的,前提是您逻辑地这样做。有意义-谢谢!在这种特定情况下,除非至少一个示例具有相应的值,否则不会显示特征。分组是我要研究的问题。基于%null(即90%)删除功能也是有效的方法吗?这取决于您拥有的客户数量。如果您仍有大量数据需要培训,90%可能还可以。您应该根据这一事实校准阈值。
0.99999940944358268