【问题标题】:Scale before PCAPCA 之前的规模
【发布时间】:2017-01-21 02:41:43
【问题描述】:

我正在使用来自 sckit-learn 的 PCA,并且我得到了一些我试图解释的结果,所以我遇到了问题 - 我应该在使用 PCA 之前减去平均值(或执行标准化),还是这样以某种方式嵌入到 sklearn 实现中?

此外,如果需要,我应该执行这两者中的哪一个,为什么需要这一步?

【问题讨论】:

  • 是的,您需要进行均值标准化。此外,如果特征具有非常不同的范围,您可能需要缩放特征。我经常使用sklearn.preprocessing.StandardScaler
  • 感谢您的信息,如果您愿意,可以将其发布为答案。但有一件事仍然让我怀疑——当 PCA 考虑最大方差的方向时,为什么要缩放?在 PCA 之前对数据进行标准化时,我不会打破这一点吗?
  • 经验法则是,如果您的数据已经在不同的比例上(例如,每个特征是每 100 个居民 XX 个),缩放它将删除包含在您的特征具有不等方差这一事实中的信息.如果数据在不同的尺度上,那么您应该在运行 PCA 之前对其进行规范化。始终将数据居中。如果您想了解更多详细信息,我建议您查看crossvalidated

标签: scikit-learn pca


【解决方案1】:

在 PCA 之前,您应该,

  1. 均值归一化(总是

  2. 缩放特征(如果需要

注意:请记住,第 1 步和第 2 步在技术上是不同的。

【讨论】:

    【解决方案2】:

    这是一个非常非技术性的答案,但我的方法是尝试两种方法,然后查看哪一个解释了 PC1PC2 的更多变化。但是,如果属性在不同的比例上(例如,厘米、英尺和英寸),那么您绝对应该缩放到单位方差。 在任何情况下,您都应该将数据居中。

    这是带中心和带中心 + 缩放的 iris 数据集。在这种情况下,居中会导致更高的解释方差,所以我会选择那个。从sklearn.datasets import load_iris 数据中得到这个。再说一次,PC1center 上占了很大比重,所以我在PC2 中找到的模式我认为并不重要。另一方面,在center | scaled 上,权重在PC1PC2 之间分配,因此应该考虑两个轴。

    【讨论】:

      【解决方案3】:

      我将尝试用一个例子来解释它。假设您有一个数据集,其中包含许多有关住房的特征,并且您的目标是对购买的好坏进行分类(二元分类)。数据集包括一些分类变量(例如房屋的位置、条件、公共交通的使用情况等)和一些浮点数或整数(例如市场价格、卧室数量等)。您可能要做的第一件事是对分类变量进行编码。例如,如果您的数据集中有 100 个位置,通常的方法是将它们从 0 编码到 99。您甚至可能最终以 one-hot 编码方式对这些变量进行编码(即每个位置的 1 和 0 列)取决于您计划使用的分类器。现在,如果您使用以百万美元为单位的价格,价格特征将具有更高的方差,因此更高的标准差。请记住,我们使用与均值之差的平方值来计算方差。更大的规模将创造更大的价值,大价值的平方增长更快。但这并不意味着与例如位置相比,价格包含更多的信息。然而,在这个例子中,PCA 会给价格特征一个非常高的权重,也许分类特征的权重几乎会下降到 0。如果你对特征进行归一化,它可以在数据集中解释的方差之间提供公平的比较。因此,最好在使用 PCA 之前对均值进行归一化并缩放特征。

      【讨论】:

        猜你喜欢
        • 2017-07-17
        • 2023-01-31
        • 2017-08-12
        • 2015-11-07
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多