我在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时,这个结果是否实际通常是不合逻辑的?
答案 0 :(得分:1)
您应该在这些来源中阅读有关主成分分析的更多信息:
当组件数量设置为200时,这个结果是否真的不合逻辑?
可以通过解释方差接近于零的方式调整具有大量特征的数据。为了实现这一点,特征必须在彼此之间高度相关。在您的情况下,我可以假设两种情况:
PCA()
会在新功能中汇总200个功能的信息。简而言之,我的数据实际上只倾向于一个功能吗?
导致这种情况的原因是什么?
如上所述,PCA
不适用于原始功能,因为它会创建新的功能,从数据中总结尽可能多的信息。因此,它实际上并不依赖于一个默认功能。
我建议你执行一些数据预处理,因为大约99%的解释方差比率,1个特征看起来非常可疑。这可能是由上述陈述引起的。
在运行PCA之前对每个客户的功能值进行求和会影响这个吗?
任何数据操作都会影响分解,除了某些情况,例如将一个正整数添加到一组正整数,依此类推。您应该在总和操作之前和之后将PCA
应用于您的数据,以观察效果。
我应该如何重组我的数据以克服这个看似错误?
首先,我建议采用另一种方法来完成数据。您可以使用均值或中位数逐列插入缺失值。其次,您应该了解实际意味着什么功能,以及是否可以在分解之前删除其中的一些功能。您还可以实现缩放技术和/或规范化技术。但这些通常应在模型拟合之前和之后进行测试,因为它们也会影响模型指标。