Unsupervised Learning

ISL 真是好书!

资料

An Introduction to Statistical Learning,下文简称 ISL

概述

无监督学习(unsupervised learning )指只有特征 X1,X2, …… ,Xp ,而没有反应变量的情况。这时候我们就是样本的特征之间的关系,最主要的作用就是对样本进行分组。这里主要关注两个无监督学习方法:主成分分析principal components analysis)和 聚类分析clustering)。

The Challenge of Unsupervised Learning

无监督学习的挑战在于比较主观,不像监督学习一样有一个真实值在那里,也没有简单的分析目的。无监督学习一般是用在探索性数据分析exploratory data analysis)中。最后,我们也很难评价不同方法结果的优劣,因为无监督学习也不存在普遍承认的类似于交叉验证这样的验证方法。

无监督学习在很多领域都很重要。一个癌症研究者可能会得到100个乳腺癌患者的基因型表达水平数据集,他/她可能会想看一下这些样本能不能划分出子群体,或者这些基因能不能划分出子群体,从而对这个癌症有更好的认知。一个网购平台可能会想将相似的浏览历史和购买历史的顾客划分到一个子群体中,这就是所谓的市场细分,这样方便推送顾客可能会购买的商品广告。一个搜索引擎同样需要将不同的网页进行聚类。上面的这些例子都是通过无监督学习实现的。

Principle Components Analysis

当特征很多时,我们无法进行简单地可视化来查看样本之间的关系。如果我们能把原始数据转换成一个二维的数据 (p=2),并且这两个新的特征能够捕获绝大多数信息,那么就可以根据这两个新的特征画散点图,描述观测值之间的关系。

主成分分析就可以做到这一点,主成分会创建包换尽可能多的变异的新特征,所有的主成分都是旧的p个特征的线性组合。例如,第一主成分表示为下式,第一主成分方差最大。

可能的参数需要满足下列条件:

我们将这些参数称为第一主成分的 loading , 这些 loading 组成了 loading vector

假设我们有一个 n × p 的数据集,我们如何计算第一主成分呢?因为我们需要计算方差,因此我们这里需要先对 X 进行中心化(使得X每列均值为0)。然后我们计算线性组合如下

求解下式,即 Zi1 的方差需要最大化,这可以用线性代数中的特征值分解计算得到。这里由于所有特征均值为 0, 因此 Zi1 均值也为0。

这里最终计算得到的 z11, …… , zn1 称为 scores

这里有一个对于第一主成分的几何学解释,第一主成分的 loading vector 其实构成了特征空间中的一个方向,再这个方向上数据 vary the most 。如果我们将这 n 个观测值投影到这个方向上,那么投影的值就是第一主成分的 scores ,即 z11, …… , zn1

下图为 p=2 的两个主成分的例子,其中的绿线便为第一组分的方向。

1

我们计算得到第一主成分以后,我们就接着找第二主成分。第二主成分同样是p个特征的线性组合,是与第一主成分无关且方差最大的组合。

第二主成分的 scores 格式如下:

第二主成分与第一主成分无关,等同于要求二者方向正交。在上图 6.14 中,由于 p=2,因此与第一主成分正交只有一种可能,因此一旦确定了第一主成分,那么第二主成分也随之确定了。

这里举个例子,数据为美国50个州的犯罪记录,特征包括三种犯罪 (Assault, Murder, Rape) 在 10万人中的逮捕人数,还包括了每个州城市化率 (UrbanPop),因此这里 n=50 ,p=4 。我们在进行PCA分析前,先对数据进行标准化(均值为0,标准差为1)。下图为前两个方差组分的结果,这里同时还体现了 loading vectors 的结果(第一主成分和第二主成分的loading 组成的方向),这种图一般称为 biplot

1

loading vectors 的值见下表。从这个表里,我们可以看到第一主成分在 UrbanPop 的权重较小,而第二主成分的主要权重则均在 UrbanPop 上。联立这个表和上面的图示,我们可以看出三种犯罪类型的变量彼此紧密关联,但是城市化率和这这三个变量相关较弱,这说明某一种犯罪较为猖狂的城市其他犯罪可能也比较严重。

1

我们同样可以通过上图检验样本之间的差别。根据我们对 loading vectors 的讨论,我们发现第一主成分值很高的城市,比如 California, Nevada 和 Florida 可能有很高的犯罪率,而像North Dakota 这种第一主成分为负数的州可能犯罪率较低。同时 California 的第二主成分也很高,这说明它的城市化率可能较高。

Another Interpretation of Principal Components

下图为一个 p=3 的两个主成分的例子,我们看到两个 loading vectors 组成了一个平面,把观测值投射到这个平面上,方差最大。

1

在前面,我们提到 loading vectors 是特征空间中数据变异最丰富的方向,而 scores 则是数据向 loading vectors 方向上的投射。我们还可以用另外一种方式进行解释:主成分生成了与观测点距离最近的低维线性平面。

第一主成分的 loading vector 很特别:它构成的直线是距离这 n 个观测点最近的直线。所谓最近指的是欧几里得距离。

我个人感觉变异最丰富距离最近是两个性质,变异最丰富并不需要距离最近。例如 p =2 的情况下,变异最丰富其实可以画出无数的平行线,这些平行线都满足变异最丰富。因此上文对于参数的取值有一个限定条件,参数平方和为1,应该是加了这个限制条件才满足了距离最近这个性质。

通过这个解释,我们构建的前M个 score vectorsloading vectors 构成了观测值的最佳的 M维的近似值。

这可以写成下式(没看懂)。(假定初始的X是中心化的)

这说明如果M较大的话,我们可以用PCA结果计算得到X的近似值。PCA分析 M 的最大值为 min(n-1, p) 。

More on PCA

Scaling the Variables

上面提到过,进行PCA分析前,必须先对X进行中心化。另外 X 的方差也会对结果造成影响:

the results obtained when we perform PCA will also depend on whether the variables have been individually scaled (each multiplied by a different constant)

如果你对某个特征,乘以某个常数,这就会造成 scale 的变化,最终造成结果变化。不同的方法对于 scale 的影响不一样,比如线性回归压根不受到 scale 的影响(线性回归中如果对某个自变量乘以一个常数 c,那么最后估计的系数会乘以 1/c,最终的模型不会受到实质性影响)。

上面美国不同的州的犯罪率的例子中,我们事先对特征进行了标准化。原始数据4个特征的方差为 18.97, 87.73, 6945.16 和 209.5。因此,如果直接用原始数据 (unscaled data) 进行PCA分析,那么第一主成分会主要偏向于第3个特征,因为第3个特征的方差最高。事实上,第一主成分的所有权重基本都在第3个特征上。

下图为采用标准化的数据 (左) 和未标准化的数据 (右) 的两次PCA分析比对。我们可以看到对于原始数据,第一主成分基本沿着 Assault 的方向(第3个特征),第二主成分基本验证 UrbanPop 的方向。因此,是否进行方差标准化,会直接影响PCA结果

1

如果不同的特征的单位不同,那么我们一般会在PCA分析前进行数据标准化但是在某些情况下,如果所有特征的单位相同,我们可能不希望将所有的特征的方差调整为1

Uniqueness of the Principal Components

不同软件计算的主成分的 loading vector 的数值都是相同,但是符号可能相反。比如(0.5, 0.5) 和 (-0.5, -0.5) ,数值相同,符号相反,但是其实还是在一条直线上。

The Proportion of Variance Explained

做完PCA分析后,我们可能想知道每个主成分解释的方差比例 ( proportion of variance explained(PVE) )。

数据集中总的方差定义如下:

然后第 m 个主成分解释的方差为:

因此第m个主成分的PVE为:

在上面的美国犯罪数据集中,第一个主成分解释了 62% 的方差,第二主成分解释了 24.7% 的方差。二者之和解释了 87% 的方差,而最后两个主成分只有 13% 的方差(总的主成分数目为 min(n-1,p) )。这说明在这个数据中,只用两个主成分就已经很好地体现总体数据的情况。 每个主成分的PVE 和累计PVE 见下图,其中左图又称为 scree plot

1

Deciding How Many Principal Components to Use

在实际的PCA分析中,我们一般只会用前几个主成分来进行可视化或解释数据,因此我们需要知道需要的主成分数目的最小值,才可以较好地把握整个数据集。或者说,我们到底需要几个主成分?

一般我们可以用上图左图(又称为 scree plot )来决定,通过肉眼来看需要几个主成分,实际上这是一个比较主观的事情,这也是无监督学习的一个特点。

Other Uses for Principal Components

我们可以直接用主成分分析的 score vectors 作为新的特征,用于回归问题、分类问题和聚类问题。这种做法的优点是降低计算量减少噪音的影响。减少计算量是由于特征数目减少了,而减少噪音的影响是由于signal ( 与 noise 相反) 往往会集中在前几个主成分当中。

Clustering Methods

聚类方法就是看能不能把观测值划分成不同的子群体,在同一个子群体内的个体具有相似的特征,而不同的子群体的个体之间则很不相同。这里我们首先要定义个体之间如何才叫相似或不同,这需要根据我们对数据集的认知进行特定地考虑。

假设我们有一个 n × p 的数据集,n 个观测值均来自于乳腺癌患者的样本,p 个特征是这些样本的测量值,包括一些临床指标,如肿瘤等级,又或者是基因表达量数据。我们怀疑这n个样本可能存在一定的异质性,比如乳腺癌可能还有一些不为人知的子类型,如何找出这些样本的结构,这就是一个无监督学习的任务。

聚类分析的另一个应用是市场细分

总的来说,我们既可以通过观测值 (Y) 来对观测值进行聚类,也可以通过特征 (X) 进行聚类,二者仅仅是用的数据集不一样,方法相同。下面只考虑基于特征数据集的聚类。

K-Means Clustering

K-均值算法是一种将所有观测值划分为 K个不同的无重叠的子群体。执行这个算法前,我们需要事先指定子群体的数目K,然后所有的观测值就会被精确划分到某一个子群体中。下图为对 150×2 的数据集聚类的结果

1

这里我们标记子群体为 C1, …… , CK 。一个好的分类是子群体内方差 (within-cluster variation) 尽可能地小。针对CK子群体的子群体内方差标记为 W(CK),适用于衡量这个子群体内的观测值之间的区别。

因此,这种算法需要解决的问题标记如下,即总的子群体内方差最小。

这里我们还需要定义 W(CK) ,这个有多种方式,一般定义如下。

这里 |CK| 指第K个子群体的观测值数目。这个公式的含义就是第K个子群体内所有配对的欧几里得距离的平方的均值。

结合上面上面两个式子,我们得到需要解决的问题为:

因此,我们需要找到一个算法来解决这个问题。这其实是一个很难的问题,因为有很多潜在的聚类方式。如果我们要遍历所有可能的聚类方式,那么总的计算次数就可能是一个天文数字。幸运地是,我们有一个算法来计算得到一个局部最优解。算法描述如下:

1

这个算法确保每一步迭代总的子群体内方差都会降低。为了理解这一点,我们需要理解下面的式子。

其中的 Xkj bar 是 Ck 子群体内特征j 的均值,计算公式如下:

这里ISL 还是没有讲清楚为什么每一步迭代总的子群体内方差都只会降低,最终不再变化,形成一个局部最优解。下图为每一步迭代的图示效果。

1

因为 K-均值算法得到的是局部最优解,而不是全局最优解,最终的聚类结果受到了算法第一步随机分类结果的影响。针对这个原因,我们需要用多个初始随机的配置来进行多次聚类,然后我们挑其中最好的结果(总的子群体内方差最低)。

下图为6次使用不同的初始配置的聚类结果,其中总的子群体内方差为 235.8 的聚类结果是我们最终选的结果。

1

从这个图来看,我感觉聚类也只能是做探索性分析,受到的影响因素比较多,没法说两个个体没有聚到一类就一定差异很大。

Hierarchical Clustering

K-均值算法的一个潜在的缺点在于需要事先指定子群体数目K。层次聚类是一种不需要指定K的算法,它的优点是最终会以一个决策树的形式展示聚类结果,称为 dendrogram

Interpreting a Dendrogram

这里我们用一个 45 × 2 的数据集,见下图。这个数据来自于3个子群体,在图上用不同的颜色进行标记了(也就是说,我们知道真实的聚类结果)。

1

层次分析结果见下图中的左图。如何去看这个结果呢?从下往上看,决策树的每个叶子表示一个观测值,然后这些叶子会汇聚成一个分支,小分支又能汇聚成更大的分支,以此往复直到决策树的根部。小分支内的个体间的相似性高于大分支。

如何看两个个体的相似性呢?我们需要找到这两个个体第一次合并到成一个分支的节点,查看这个节点在纵坐标的位置,这个值越小说明关系越近。

1

我们在解读这张图的时候容易出现一些误区。下图为 9 × 2 的数据集的聚类结果,我们可以认为1和6,5和7很相似,这没有问题,因为它们都在最低的水平。但是,你不能仅仅看着9和2很接近,就认为 9 和 2 很相似,这是错误的,事实上, 9和 2 8 5 7 这四个观测值的距离都差不多,如下图右图所示。

这个误区就是你不能根据横向位置来判断观测值之间的远近,而只能根据纵向位置判断。横向位置并不可靠,比如这里 1 和 6 可以互换位置,聚类结果其实没变;又或者 2 所在的左支和 8 5 7 所在的右枝互换位置,这个时候你就看着 9 和 2 的横向距离远了,但是聚类结果没变。

1

通过在某个纵坐标上拉一道口子,画一条线,我们可以划分出任意 K 个 cluster ,比如上图10.9 的中间的图和右图分别划分出2个和3个 clusters

层次聚类的名称也来自于这一特性,纵坐标的低点划分的 clusters 一定包含在纵坐标的高点划分的 clusters 内,也就是存在嵌套关系。但是有时实际数据可能并不满足这种假设,例如假设我们有个数据集,里面男女各一半,然后又可以分为美国人、日本人和法国人。我们可以想象,如果我们要聚成2类,我们希望按照性别划分;如果要聚成3类,我们希望按照国籍划分。这种情况下,真实的分类并不是嵌套的,因此K=3的聚类并不包含K=2的结果内。因此这种情况下,层次聚类的结果可能会会比 K-均值聚类的效果更差。

The Hierarchical Clustering Algorithm

层次聚类算法很简单,我们首先要定义很来奶两个观测值之间的 dissimilarity 的指标。一帮我们会用欧几里得距离。算法具体描述如下:

1

下图为图10.10 聚类的前几步图示。

1

这个算法看上去很简单,但是还有一个问题没解决。例如上图右下图,我们如果决定 {5,7} 和 8 的不相似性呢?上面我们只提到了两个点之间的不相似性,我们如何两个 cluster 之间的不相似性呢?我们一半称两个 cluster 之间的不相似性称为 linkage 。下表描述了四种常见的 linkage ,一般我们会用 Average 和 complete 。

1

层次聚类的结果受 linkage 的影响很大,见下图

1

Choice of Dissimilarity Measure

一般来说,我们会用欧几里得距离作为 dissimilarity 的衡量指标,但是有时我们可能会想用别的指标。例如,我们可能会用两个观测值特征之间的相关系数作为评价指标,而不是距离。下图展示基于相关系数和欧几里得距离的层次聚类结果,观测值1和3的欧几里得距离很近,但是它们的相关很低;观测值1和2的欧几里得距离很远,但是相关程度很高。

1

dissimilarity 的衡量指标的选择非常重要,我们需要根据数据类型和目的进行确定。例如一个电商想要根据消费者的消费记录进行聚类。我们的目的是找到消费习惯相同的消费者,然后聚成不同的类,特定投放不同的广告。假设数据集的形式是每一行表示一个消费者,每一列表示一种商品,元素只能是0和1,0表示没买过,1表示买过。这里我们应该用什么衡量 dissimilarity 的指标呢?

如果我们用欧几里得距离,那么哪些买过商品的总数很少的顾客会被聚成一堆,这不是我们想要的结果。但是,如果我们用相关系数,那么有着相似的消费习惯的顾客会被聚成一堆(比如都买过A和B, 但是都没买过C和D的顾客),即便有些顾客的总的商品消费数目更高。因此在这种情况下,更适合使用相关系数。

除了 dissimilarity 的衡量指标,我们还需要考虑聚类前要不要进行scale,将所有特征的标准差均调整为1。为了说明这一点,我们还是用电商的例子,有些商品的购买次数可能会比较频繁,比如袜子;有些商品的购买次数会比较少,比如电脑。高频购买的商品可能在计算 dissimilarity 时比低频购买商品有更高的作用,最终在聚类结果中的作用也更大。如果我们事先将所有特征的标准差均调整为1,那么所有特征对于层次聚类的重要性均相同。最终要不要进行 scale 需要具体情况具体分析,在这个电商的例子中我们可能会选择进行 scale

下图是是否进行 scale 效果的图示,这一点对 K-均值聚类也有作用。左图为两种商品8个消费者的消费数目,中间的图为 scale 之后的效果,右图的纵坐标为换成消费金额的效果。

1

Practical Issues in Clustering

实际聚类时需要关注的问题。

Small Decisions with Big Consequences

聚类之前,我们需要先做一些决定。

  • 数据是否需要进行标准化(均值为0,标准差为1)
  • 如果使用层次聚类
    • 使用哪一种 dissimilarity 的衡量指标
    • 使用哪一种 linkage
    • 我们最终在决策树上什么地方划一道水平线,来获得具体的 clusters
  • 如果使用 K-均值聚类,K值设定为多少

这些决定影响很大,但是都是不存在一个唯一的真实答案的,都需要进行主观判断。我们一般可能会测试几次,然后挑一次结果。

Validating the Clusters Obtained

当我们聚类后,我们会想知道我们聚类的结果是不是就是真实的结果,还是仅仅是 clustering the noise 。比如,如果我们有一个独立的新的数据,那么这些数据能不能会被用同样的方式进行聚类?现在有一些新方法可以提供一个 p 值,来评价一个cluster 和我们完全随机分组相比的概率,但是目前还没有达到一个统一的共识。

Other Considerations in Clustering

K-均值聚类和层次聚类都会将所有的观测值划分到某个子群体中。但是数据中可能会存在离群点,这些点不属于任何一个 cluster ,但是由于这两种聚类方法一定要把所有的观测点都放到某个子群体中,因此离群点会非常影响聚类结果。(那我能不能先用PCA分析找到离群点,剔除离群点之后再进行聚类呢?)

聚类方法还有一个缺点是不稳健。比如你用 n 个观测值聚类了一次,然后你随机地剔除了一小撮个体,再聚类一次,你可能会得到一个不一样的结果。

A Tempered Approach to Interpreting the Results of Clustering

综合上述,你可能挑选不同的指标来做聚类的测试,最终挑选一个你觉得比较好的聚类结果。最后你可能还需要从原数据集中随机挑选一些子集,查看聚类结果的稳健性。最后的最后,你一定要注意解释聚类结果的方式,你绝对不能认为聚类结果是绝对的真实情况,你只能把聚类结果当成之后深入研究的起点(最好是用另一个独立的数据集进行进一步研究)。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2024 Vincere Zhou
  • 访问人数: | 浏览次数:

请我喝杯茶吧~

支付宝
微信