我使用了来自sckit-learn的PCA,并且我得到了一些我试图解释的结果,所以我遇到了问题 - 我是否应该减去平均值(或执行标准化)使用PCA,还是以某种方式嵌入到sklearn实现中?
此外,我应该执行哪两项,如果是的话,为什么需要这一步呢?
答案 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_iris
在PC1
上占据了大部分权重,因此我在center
中找到的模式我认为不重要。另一方面,在PC2
上,权重在center | scaled
和PC1
之间分开,因此应考虑两个轴。
答案 2 :(得分:0)
在PCA之前,您应该
均值归一化(始终)
缩放功能(如果需要)
注意:请记住,步骤1和步骤2在技术上并不相同。