具有 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 时,这个结果通常不合逻辑?
更多问题
- 总之,我的数据真的只偏向于一个特征吗?
- 可能是什么原因造成的?
- 在 运行 PCA 之前对每个客户的特征值求和会影响这个吗?
- 我应该如何重组我的数据来克服这个看似错误的问题?
您应该在这些资源中阅读有关主成分分析的更多信息:
- Explained Variance Ration on One Principal Component
- Eigenvectors & Eigenvalues
- Everything about PCA
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?
首先,我会建议另一种方法来完成数据。您可以使用平均值或中位数逐列插入缺失值。其次,您应该了解特征的实际含义,以及是否有可能在分解之前删除其中的一些特征。您还可以实施缩放技术和/或规范化技术。但是这些通常应该在模型拟合之前和之后进行测试,因为它们也会影响模型指标。
我在具有 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 时,这个结果通常不合逻辑?
更多问题
- 总之,我的数据真的只偏向于一个特征吗?
- 可能是什么原因造成的?
- 在 运行 PCA 之前对每个客户的特征值求和会影响这个吗?
- 我应该如何重组我的数据来克服这个看似错误的问题?
您应该在这些资源中阅读有关主成分分析的更多信息:
- Explained Variance Ration on One Principal Component
- Eigenvectors & Eigenvalues
- Everything about PCA
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?
首先,我会建议另一种方法来完成数据。您可以使用平均值或中位数逐列插入缺失值。其次,您应该了解特征的实际含义,以及是否有可能在分解之前删除其中的一些特征。您还可以实施缩放技术和/或规范化技术。但是这些通常应该在模型拟合之前和之后进行测试,因为它们也会影响模型指标。