【问题标题】:scikit-learn PCA with unknown feature values具有未知特征值的 scikit-learn PCA
【发布时间】:2017-03-09 14:19:17
【问题描述】:

我想使用 sklearn 进行 pca 分析(然后是回归和 kmeans 聚类)。我有一个包含 20k 特征、2000k 行的数据集。然而,对于数据集中的每一行,只测量了特征子集(通常是 20k 中的任意 5 个左右)。

我应该如何填充我的 pandas 数据框/设置 sklearn,以便 sklearn 不使用未测量值的实例的功能? (例如,如果我将空特征值设置为 0.0,这会扭曲结果吗?)。

例如:

X = array[:,0:n]
Y = array[:,n]
pca = PCA()
fit = pca.fit(X)

如果数据集的大多数特征值都用零填充 - 那么 pca 是否有效?

【问题讨论】:

  • 有什么功能,为什么是空的?如果它们就像文本文档中的词频,那么它们应该为零而不是空;这对于 PCA 来说仍然是一个很好的方案;如果它们是来自传感器的一些连续值,那么也许你想估算它们
  • 这些特征是物理分析,由每个分析类型(例如硬度、元素浓度、颜色等)的单个浮点值组成,但对于每一行,大多数情况下只测量一些。这些值无法估算。
  • 好吧 sklearn 不能处理包含空值的数据,所以你必须对它们做一些事情......如果你将它们设置为零,而如果你想它们不会是零测量它们,那么是的,它肯定会扭曲结果。也许您可以使用决策树来估算空值?
  • 你的特征代表什么?
  • 它可能无法解决您的问题,但您可以使用TruncatedSVD,这是另一种接受稀疏输入的类似 PCA 的分解方法。它可以处理您的数据,但可能无法达到您的预期。

标签: pandas scikit-learn pca sklearn-pandas


【解决方案1】:

我看到 3 个选项,但没有一个可以解决您的问题:

1) 您将空值替换为 0,但这肯定会恶化您的结果;

2) 您将未知值替换为每个特征的平均值或中位数,这样可能会更好,但它仍然会给您带来扭曲的 PCA;

3) 最后一个选项不使用 PCA 并为稀疏数据搜索降维技术。

【讨论】:

    猜你喜欢
    • 2016-10-11
    • 2014-06-11
    • 2016-02-25
    • 2018-02-24
    • 2017-05-02
    • 1970-01-01
    • 2021-12-23
    • 2013-09-26
    • 2016-08-20
    相关资源
    最近更新 更多