降维分析
为什么要降维?
我们在处理数据的时候,必然将某一样本(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分析。