Logo
Section 1 / 5

PCA 实现步骤:1 到 3

本课程将向你介绍预模型算法,并让你熟悉主成分分析的实现步骤(1-3)。

导入

PCA 实现步骤:1 到 3

本课程将向你介绍预模型算法,并让你熟悉主成分分析的实现步骤(1-3)。

预模型算法快速概览

作为数据清洗过程的延伸,无监督学习算法有时被用于辅助有监督学习算法,以对数据进行预测建模前的准备工作。在这种情况下,无监督算法主要用于清理或重构数据,而非提取可操作的洞察。

预模型算法的示例包括前一章介绍的降维技术以及k均值聚类。本章将详细探讨这两种算法。

主成分分析(PCA)

最流行的降维技术之一是#key# PCA:主成分分析(Principal Component Analysis)#key#。PCA也被称为通用因子分析,能够显著降低数据复杂性,并有助于在更少维度下可视化数据。

PCA的实际目标是找到一个低维表示的数据集,尽可能保留原始变量中的信息。与直接从数据集中删除个别特征不同,PCA通过将特征线性组合生成新的维度——称为主成分(components),然后根据各主成分对数据模式的贡献程度进行排序,从而允许我们舍弃对数据变异性影响最小的成分。

在实际操作中,PCA的初始目标是将第一个轴放置在数据点方差最大的方向上,并最大化该轴上的方差。随后,第二个轴以垂直(90度角)于第一个轴的方式放置,形成正交直线,由此得到前两个主成分。

在二维空间中,第二个轴的位置由第一个轴决定而固定。在三维空间中,由于存在更多可以垂直于第一轴的方向,其目标是选择一个能使该轴上方差最大化的方向。

下图展示了在二维空间中PCA的一个示例:

...
PCA分解示意图

图中有四条水平轴。前两条轴测量原始数据的x和y值;后两条轴则测量当坐标旋转90度后对应的x和y值。为了可视化旋转后的坐标轴,可以用正交线作为人工y轴,而线性回归线则充当x轴,如下图所示。

这些新轴为我们提供了该数据集的前两个主成分。新的x轴是#key# PC1:第一主成分(Principal Component 1)#key#,新的y轴是#key# PC2:第二主成分(Principal Component 2)#key#。

利用PC1和PC2的值(显示在第三和第四条轴上),我们可以观察到数据点之间呈现出新的方差分布。相比原始x值(第一条轴),PC1的方差明显扩大;而PC2的方差则大幅缩小,所有数据点都接近零,几乎重叠在一起。

由于PC2对总体方差的贡献最小,因此我们可以集中关注PC1所包含的方差。虽然PC1并未包含100%的原始信息,但它捕捉到了对数据模式影响最大的变量关系,同时减少了计算资源消耗。

在此例中,我们将数据集分解为两个成分后再选择一个主成分。在其他场景中,可能从总共十个成分中选取两到三个主成分,它们合计可保留原始数据约75%的信息。当然,若坚持保留100%的信息,则违背了数据降维以提升性能的初衷。此外,目前尚无广泛接受的方法来确定合适的主成分数量以实现数据的最佳表达。选择分析多少个成分是一个主观决策,取决于数据集规模以及希望压缩数据的程度。

练习

在本编程练习中,你将把一个数据集降维至其两个主成分。

...
广告数据集

1)导入库

首先导入以下Python库:NumPy、Pandas、Seaborn、Matplotlib Pyplot 和 Matplotlib inline。可在新的Jupyter Notebook单元格中输入以下代码完成导入。

1#1) 导入库 2import numpy as np 3import pandas as pd 4import seaborn as sns 5import matplotlib.pyplot as plt

注意:后续步骤的代码不再包含之前步骤的内容,但系统后台已自动累积执行所有先前代码。

2)导入数据集

第二步是在同一单元格中导入数据集。登录kaggle后可下载广告数据集的zip文件。解压后使用pd.read_csv()函数将CSV文件导入Jupyter Notebook,并根据你的操作系统设置正确的文件路径。

这会将数据集加载为一个Pandas数据框。你可以使用head()命令查看前几行数据,点击“运行”按钮,或通过顶部菜单选择“Cell” > “Run All”来执行。

可以看到,该数据集共包含10个特征:每日网站停留时间、年龄、地区收入、每日互联网使用时长、广告主题、城市、性别、国家、时间戳和是否点击广告。

1#2) 导入数据集 2df = pd.read_csv('advertising.csv') 3print(df.head())

3)移除特征

接下来需要删除无法被该算法解析的非数值型特征,包括广告主题、城市、国家和时间戳。尽管时间戳以数字形式表示,但其特殊格式不适用于该算法所需的变量间数学运算。

同时还需要移除离散变量“性别”(Male),虽然它以整数(0或1)表示,但我们的模型仅处理连续型输入特征。

让我们使用del语句并指定列名,从数据集中删除这五个特征。

1#3) 移除特征 2del df['Ad Topic Line'] 3del df['City'] 4del df['Country'] 5del df['Timestamp'] 6del df['Male']

线性回归

PCA 实现步骤:4 到 6