在PCA之前进行缩放

时间:2016-09-13 13:11:41

标签: scikit-learn pca

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

此外,我应该执行哪两项,如果是的话,为什么需要这一步呢?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

这是一个非技术性的答案,但我的方法是同时尝试这两种方法,然后查看哪个帐户在use App;PC1上有更多变化。但是,如果属性处于不同的比例(例如,cm与英尺对英寸),那么您应该明确缩放到单位方差。 在每种情况下,您都应该将数据居中。

这里是虹膜数据集w / center和w / center + scaling。在这种情况下,居中导致更高的解释方差,所以我会选择那个。从PC2数据中得到了这个。同样,sklearn.datasets import load_irisPC1上占据了大部分权重,因此我在center中找到的模式我认为不重要。另一方面,在PC2上,权重在center | scaledPC1之间分开,因此应考虑两个轴。

enter image description here enter image description here

答案 2 :(得分:0)

在PCA之前,您应该

  1. 均值归一化(始终

  2. 缩放功能(如果需要

注意:请记住,步骤1和步骤2在技术上并不相同。