通过分析变异发现新特征。
1、简介
在上一课中,我们研究了我们的第一个基于模型的特征工程方法:聚类。在这一课中,我们将研究我们的下一个方法:主成分分析(PCA)。就像聚类是基于接近度对数据集进行划分一样,你可以把PCA看作是对数据中的变化进行划分。PCA是一个很好的工具,可以帮助你发现数据中的重要关系,并且也可以用来创建更有信息量的特征。
(技术注释:PCA通常应用于标准化数据。对于标准化数据,“变化”意味着“相关性”。对于未标准化的数据,“变化”意味着“协方差”。在本课程中,所有的数据在应用PCA之前都将被标准化。)
2、主成分分析
在鲍鱼数据集中,有几千个塔斯马尼亚鲍鱼的物理测量值。(鲍鱼是一种海洋生物,类似于蛤蜊或牡蛎。)我们现在只看一些特征:它们的壳的'Height'
和'Diameter'
。
你可以想象,在这个数据中有“变化的轴”描述了鲍鱼倾向于彼此不同的方式。在图像中,这些轴出现为沿着数据的自然维度运行的垂直线,每个原始特征有一个轴。
我们经常可以给这些变化的轴命名。我们可能会把较长的轴称为“Size”组件:小高度和小直径(左下角)与大高度和大直径(右上角)形成对比。我们可能会把较短的轴称为“Shape”组件:小高度和大直径(扁平形状)与大高度和小直径(圆形状)形成对比。
注意,我们可以用它们的'Size'
和'Shape'
来描述鲍鱼,而不是用它们的'Height'
和'Diameter'
。这实际上就是PCA的全部思想:我们用它的变化轴来描述数据,而不是用原始特征。变化的轴成为新的特征。
主成分通过在特征空间中旋转数据集成为新的特征。
PCA构造的新特征实际上只是原始特征的线性组合(加权和):
df["Size"] = 0.707 * X["Height"] + 0.707 * X["Diameter"]
df["Shape"] = 0.707 * X["Height"] - 0.707 * X["Diameter"]
这些新特征被称为数据的主成分。权重本身被称为载荷。主成分的数量将与原始数据集中的特征数量相同:如果我们使用了十个特征而不是两个,我们将最终得到十个组件。
一个组件的载荷告诉我们它通过符号和大小表达了什么样的变化:
Features \ Components | Size (PC1) | Shape (PC2) |
---|---|---|
Height | 0.707 | 0.707 |
Diameter | 0.707 | -0.707 |
这个载荷的表格告诉我们,在Size
组件中,Height
和Diameter
在同一方向变化(相同的符号),但在Shape
组件中,它们在相反的方向变化(相反的符号)。在每个组件中,载荷都是相同的大小,所以特征在两者中都有相等的贡献。
PCA还告诉我们每个组件中的变化量。从图中我们可以看到,数据沿着Size
组件的变化比沿着Shape
组件的变化更大。PCA通过每个组件的解释方差的百分比使这一点变得准确。
解释了Height和Diameter之间约96%的方差,Shape解释了约4%的方差。
Size
组件捕获了Height
和Diameter
之间的大部分变化。然而,重要的是要记住,一个组件中的方差量并不一定对应于它作为预测器的好坏:这取决于你想要预测什么。
3、PCA用于特征工程
你可以用两种方式使用PCA进行特征工程。
第一种方式是将其用作描述性技术。由于组件告诉你关于变化的信息,你可以计算组件的MI分数,看看哪种变化对你的目标最具预测性。这可能会给你一些创造特征的想法——如果'Size'
很重要,比如说,'Height'
和'Diameter'
的乘积,或者如果Shape
很重要,'Height'
和'Diameter'
的比率。你甚至可以尝试在一个或多个高分组件上进行聚类。
第二种方式是使用组件本身作为特征。因为组件直接暴露了数据的变化结构,所以它们通常比原始特征更有信息量。以下是一些用例:
- 降维:当你的特征高度冗余(多重共线性,具体来说)时,PCA会将冗余划分到一个或多个接近零的方差组件中,然后你可以丢弃这些组件,因为它们几乎不包含信息。
- 异常检测:不常见的变化,从原始特征中看不出来,通常会出现在低方差的组件中。这些组件在异常或离群值检测任务中可能非常有信息量。
- 降噪:一组传感器读数通常会共享一些常见的背景噪声。PCA有时可以将(有信息的)信号收集到较少的特征中,同时保留噪声,从而提高信噪比。
- 去相关:一些机器学习算法在处理高度相关的特征时会遇到困难。PCA将相关的特征转换为不相关的组件,这可能会使你的算法更容易处理。
PCA基本上给你直接访问你的数据的相关结构。你肯定会想出你自己的应用!
PCA最佳实践
在应用PCA时,有几件事需要记住:
- PCA只适用于数值特征,如连续量或计数。
- PCA对规模敏感。在应用PCA之前标准化你的数据是一种好的做法,除非你知道你有充分的理由不这样做。
- 考虑移除或限制离群值,因为它们可能会对结果产生不适当的影响。
4、示例 - 1985年的汽车
在这个例子中,我们将回到我们的汽车数据集,并应用PCA,使用它作为一种描述性技术来发现特征。我们将在练习中看到其他的用例。
这个隐藏的单元格加载数据并