降维分析
为什么要降维?
我们在处理数据的时候,必然将某一样本(sample)的特点用一组特征(feature)来表示。传统的二分法可以简单地用一个特征(或者少数几个特征)来区分大量样本之间的差异或者共性,比如:用性别来划分消费者群体、用年龄来划分用药水平、用业绩指标来划分雇员贡献等等。
但是在数据科学的发展过程中,人们发现很多数据没有办法只用几个特征来描述,必须使用成千上万的特征,比如:
(1)一个细胞的性质必须用两三万个基因的表达量来描述,
(2)一个临床病例需要几百个不同的临床指标来描述,
(3)一个企业的经济学属性必须用许多不同的参数来描述。
仅靠直觉的方式,很难从如此大量的特征中归纳出,到底是哪些关键特征影响了样本的固有属性,也无法对大规模数量的样本进行有意义的分类。
更重要的是,在成千上万的特征中,很多时候并不是某几个特征定义了样本的属性,而是很多特征的一种特定方式的组合导致了样本的独特性质。例如在天气预报这个领域,我们虽然可以从一些简单事实来推测未来天气的变化(如“朝霞不出门,晚霞行千里”),但是若想精确地描述一个地域的天气状态,必然需要将气流、湿度、云层、湍流、经纬度、海陆结构等多方面的参数综合考虑,才有可能更准确地预测未来的天气变化。
为了从成千上万的特征中,找到是哪几种组合方式,最终导致了样本之间的差异性,我们需要将特征进行降维。而降维的过程,概括来说,就是从大量的特征中,找到能够更简明而准确地描述样本属性的几个组合方式。
降维分析,一般来说属于无监督类型的机器学习,因为在降维之前,我们并不知道哪些样本更相似,哪些样本之间差异大,我们更不会知道样本是如何聚类或者分群的。我们需要知道的,仅仅是每个样本是如何用一批特征来描述的。
一个最直接的降维方法,就是找到最能描述样本特征的线性组合,也就是下面要讨论的主成分分析方法(Principal component analysis, 简称PCA)。
PCA方法
对于任意一个 的非负矩阵
(包含
个样本,每个样本都有
个特征),总可以用如下方式将其对角化:
其中是
的矩阵,
是
的对角矩阵,
是
的矩阵。由于
和
都是酉矩阵,即
,因此我们在上式等号两边的左右各乘以
和
,可以得到:
这一变换称为奇异值分解(Singular Value Decomposition, 简称SVD)。上面公式也可以用图像表示为:
注意到上面的红色方框了吗?如果仅保留红框内的部分,这个等式也是成立的:
其中是
的矩阵,
是
的矩阵,
是
的对角矩阵,
中的
个对角元素就称为
的
个主成分。注意
是远小于
和
的。这样做有什么好处呢?我们可以在上式的等号两边的左右各乘以
和
,得到:
这里和
都不是酉矩阵,因此
并不严格等于
。但是当
的值取得比较合适的时候,
非常接近于
。由于
是远小于样本数
和特征数
的,因此我们可以用小得多的矩阵
、
和
来描述矩阵
中每个样本的特征。例如,我们可以做如下变换:
这样,一个包含个样本和
个特征的矩阵
,就变成了一个包含
个样本和
个主成分的矩阵
。矩阵
中任意两个样本之间的关联性和差异性都是和矩阵
中的样本几乎是完全一样的。每个主成分都是原来的
个特征的线性组合,而组合的参数就是
矩阵的每一列。
这样的PCA变换,就把原来需要用成千上万个特征来描述的样本,变换成用几个或者十几个主成分来描述的样本,同时又保留了样本之间的关联性和差异性。
PCA分析的优点:
(1)变换的过程中,每个样本的信息几乎是无损地从个特征传递到了
个主成分;
(2)变换是可逆的,矩阵乘以
就变换回
矩阵(非常接近于
矩阵);
(3)如果新加入一个样本,无需重新做PCA分析,直接把样本
的
个特征乘以
,就变成了主成分空间中的样本
。
然而,PCA分析中,主成分的数目不能取得太小,否则
矩阵就无法包含
矩阵中每个样本的所有信息。一般来说,当特征数
比较大的时候(例如
),
的值在5~40之间比较合适。这一特点,导致我们用前2个或者3个主成分来画2维或者3维的样本分布图的时候,很难直观地看到不同样本之间的差异性,以及同一类型样本的聚类效果。如果要在2维(或3维)空间中,更明显地看到样本聚成了几个大类,需要借助tSNE分析或者UMAP分析。