![商用机器学习:数据科学实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/512/33902512/b_33902512.jpg)
2.7 主成分分析
另一种聚类方法是,可以通过主成分分析(principal component analysis,PCA)来了解数据结构。[1]这种方法将数据的m个特征转化为m个变量,作为因子或者主成分,因此:
·任何特征观测值都是因子的个线性组合;
·m个因子之间互不相关。
PCA在正态分布的数据中效果最佳。第一个因子在最大程度上包含数据的变异性,其他随后的因子在与前面因子不相关的前提下,尽可能反映剩余的变异性。特定因子的数量被称为该特定观测值的因子得分(factor score)。
PCA常用于利率变化的案例中(例如一个数据科学家通过PCA研究利率变化对消费者行为的影响)。表2-9展示了前3个因子,它们通过主成分分析获得,主成分分析使用了12年的每日利率变化数据,结合1、2、3、4、5、7、10和30年偿还期限。[2]表中每列的数字为因子载荷(factor loadings),其平方和为1。在第一个因子(principal component one,PC1)中所有利率的变化方向是一致的。如果我们将此因子增加10个基点,则1年期利率增加2.16个基点(或者增加0.021 6%),2年期利率则增加3.31个基点,依此类推。如果我们将PC1降低20个基点,则1年期利率下降4.32个基点,2年期利率下降6.62个基点,依此类推。
表2-9 因子载荷反映了利率变化的主成分
PC2与PC1不同,其前4个利率变化方向一致而后4个利率变化方向相反,这说明了一个随着斜率变化而反转的利率变化结构。在PC3中短期和长期的变化方向一致,而中期则向相反的方向变化。
因子的重要性测量标准为所有观测值的因子得分的标准差。表2-10展示了在利率案例中前3个因子的因子得分标准差,在这个例子中8个因子得分的方差为338.8[3],因此对第一个(最重要的)因子而言,其解释整体方差的比例为:
对前两个因子而言,其解释整体方差的比例为:
表2-10 利率因子得分的标准差
这说明了将8个特征定义为两个变量(PC1和PC2)可以解释绝大部分数据的变异性,这正是PCA法的目的——尝试用少量的变量来概括数据的结构。
我们用第2.5节提到的国家风险评估来作为另一个PCA的例子。数据的因子和因子得分被展示在表2-11和表2-12中,这揭示了数据的一些有趣特征:第一个因子解释了64%的变异性,且清廉指数、和平指数和法律风险指数比重相近(记住,低的和平指数是好的)。第二个因子包含了另外24%的数据变异性,在GDP增长率特征上的比重最高,可以看出GDP增长率提供了与其他3个特征非常不同的信息(在表2-11的解释中,我们可以在不改变模型的情况下,改变同一列中所有因子载荷的符号,这是因为在一个观测值中的一个因子的单位量可以为正也可以为负。举例来说,我们不应该曲解在PC2中GDP增长率的因子载荷值为负数,因此可以修改PC2中所有因子的符号而无须改变模型)。
表2-11 国家风险评估数据的主成分因子载荷值(具体数据请参考Excel PCA文件)
表2-12 国家风险评估数据的因子得分标准差(具体数据请参考Excel PCA文件)
第三个因子包括了数据10%的变异性,其中和平指数比重较高,表明该指数提供了相较清廉指数和法律风险指数而言的额外信息。第四个因子重要性较低,包括了2%的变异性。PCA验证了图2-4的结论:清廉指数和法律风险指数提供了类似的信息。
PCA有时也用于监督学习,通过该方法,我们用较少的主成分来替代一系列冗长的特征,这些加工过的特征被选来解释预测中数据的绝大部分变异性,并且它们有着不相关的良好特性。
最后需要提醒的是,当使用聚类分析或PCA方法时,我们并不试图预测任何值,仅仅是了解数据的结构。在我们的例子中,这些特征并不保证能预测国家风险情况(例如,我们不会尝试将这些特征用于研究不同国家投资者的损失,这与我们在监督学习中的做法很不同)。
小结
无监督学习的核心是理解数据的变化规律。聚类是一种很典型的应用。企业用无监督学习来理解不同类型的消费者,从而更有效地与消费者进行沟通。
特征缩放通常是聚类分析的先决条件,如果没有特征缩放,特征对聚类分析的影响将取决于其数值规模。有两种方法可以进行特征缩放:一种是Z评分标准化,在这种方法中均值为0,标准差为1;另一种是极值缩放,所有特征取值在0到之间。
聚类算法需要衡量观测值之间的距离。运用最广泛的衡量方式为欧式距离,即为观测值之间的距离平方和。聚类的中心由各观测值之间的特征取值的平均数得出。最受欢迎的聚类算法为k-均值算法,在k值一定时对惯性矩进行最小化,这里的惯性矩为聚类内观测值到该子聚类中心之间距离平方的总和。
选择最佳的k值往往不是那么容易的。第一种方法是通过肘部法,不断增加k值,直到惯性矩的变化率相对下降;第二种方法是通过轮廓法,比较两个同一子聚类中的观测值之间的距离与另外一个最靠近的子聚类的平均距离;第三种方法是计算间隔统计量,即将已被聚类完毕的观测值和随机产生的观测值做比较。
当特征的数据量增加时,欧式距离增加,这样会导致维度灾难,并且会增加k-均值算法的难度。在这种情况下,比较理想的做法是改变距离衡量方法,使得当特征增加时距离维持在某一个范围内。
有一系列的方法可以代替k-均值算法。其中一个是凝聚层次聚类,从每一个观测值为一个子聚类开始,然后我们通过合并距离最近的子聚类,逐渐减少子聚类的个数;基于分布的聚类方法则是假设一组数据的分布为几个正态分布(或其他分布)方式的混合,然后测算这些分布的参数。基于密度的聚类方法的核心则是寻找数据密集的区域,而无须涉及其聚类中心。
主成分分析是机器学习的重要方法之一。它涉及将大量的特征通过其中少量特征来捕捉大部分的变异性。这些加工后的特征之间无相关性。
练习题
1.为什么在无监督学习中特征缩放如此重要?请列举出两种特征缩放方法,这两种方法的优势和劣势分别是什么?
2.假设有3个特征:A、B和C,一个观测值对应3个特征的取值为2、3和4,另一个观测值对应3个特征的取值为6、8和7,请问这两个观测值的距离是多少?
3.上题中的两个观测值的聚类中心是什么?
4.请介绍k-均值算法的主要步骤。
5.请分别介绍肘部法和轮廓法是如何决定k的取值的。
6.为什么随着特征的数量增多,观测值之间的距离会增加?假设你从10个特征开始,然后由于失误添加了与之前10个特征一致的另外10个特征,这样做对两个观测值之间的距离会有什么影响?
7.凝聚层次聚类法是如何运行的?该方法与k-均值算法相比,优势和劣势分别有哪些?
8.请介绍基于分布的聚类和基于密度的聚类。
9.主成分分析法在哪些条件下最利于理解数据?
10.请介绍因子载荷和因子得分。
作业题
1.请通过www-2.rotman.utoronto.ca/~hull)上的数据来计算在缩放之前14个高风险国家的子聚类中心(见表2-5),然后对聚类中心进行缩放,检验你的答案是否和表2-8一致。
2.运用两个因子的主成分分析的结果来判断国家风险。分别运用缩放和未缩放的数据进行分析。
3.Python练习题:Python脚本可以在www-2.rotman.utoronto.ca/~hull)中找到。
(a)运用k-均值算法进行计算,当k=3、特征数量为4时(清廉指数、和平指数、法律风险指数和GDP增长率),找出高风险聚类的国家,并与当特征数量为3时的结果进行比较(结果见表2-5)。
(b)运用凝聚层次聚类法来归类出三个子聚类,特征为和平指数、法律风险指数及GDP增长率。比较其与k-均值算法所得出的结论(结论见表2-5)。Python包、AgglomerativeClustering用于凝聚层次聚类法,可以通过sklearn.cluter进行导入。请尝试用不同的方法来判断最近距离点(可参考Python包中的“linkage”)。
[1] 卡尔·皮尔逊(Karl Pearson)早在1901 年便提出了PCA :K. Pearson (1901),“ On Lines and Planes of Closet Fit to System on Points in Space,” Philosophical Magazine, 2(11): 559-572。
[2] 约翰·赫尔. 期权、期货及其他衍生产品(原书第10 版)[M]. 王勇,索吾林,译. 北京: 机械工业出版社,2018 :400. 数据见www-2.rotman.utoronto.ca/~hull/ofod 上的主成分分析表。
[3] 原书为388.8,疑有误,更正为此。——译者注