机器学习基础:降维分析

降维分析

为什么要降维?

我们在处理数据的时候,必然将某一样本(sample)的特点用一组特征(feature)来表示。传统的二分法可以简单地用一个特征(或者少数几个特征)来区分大量样本之间的差异或者共性,比如:用性别来划分消费者群体、用年龄来划分用药水平、用业绩指标来划分雇员贡献等等。

但是在数据科学的发展过程中,人们发现很多数据没有办法只用几个特征来描述,必须使用成千上万的特征,比如:

(1)一个细胞的性质必须用两三万个基因的表达量来描述,

(2)一个临床病例需要几百个不同的临床指标来描述,

(3)一个企业的经济学属性必须用许多不同的参数来描述。

仅靠直觉的方式,很难从如此大量的特征中归纳出,到底是哪些关键特征影响了样本的固有属性,也无法对大规模数量的样本进行有意义的分类。

更重要的是,在成千上万的特征中,很多时候并不是某几个特征定义了样本的属性,而是很多特征的一种特定方式的组合导致了样本的独特性质。例如在天气预报这个领域,我们虽然可以从一些简单事实来推测未来天气的变化(如“朝霞不出门,晚霞行千里”),但是若想精确地描述一个地域的天气状态,必然需要将气流、湿度、云层、湍流、经纬度、海陆结构等多方面的参数综合考虑,才有可能更准确地预测未来的天气变化。

为了从成千上万的特征中,找到是哪几种组合方式,最终导致了样本之间的差异性,我们需要将特征进行降维。而降维的过程,概括来说,就是从大量的特征中,找到能够更简明而准确地描述样本属性的几个组合方式。

降维分析,一般来说属于无监督类型的机器学习,因为在降维之前,我们并不知道哪些样本更相似,哪些样本之间差异大,我们更不会知道样本是如何聚类或者分群的。我们需要知道的,仅仅是每个样本是如何用一批特征来描述的。

一个最直接的降维方法,就是找到最能描述样本特征的线性组合,也就是下面要讨论的主成分分析方法(Principal component analysis, 简称PCA)。

PCA方法

对于任意一个 m\times n 的非负矩阵A(包含m个样本,每个样本都有n个特征),总可以用如下方式将其对角化:

A=U\Sigma V^T

其中Um\times m的矩阵,\Sigmam\times n的对角矩阵,Vn\times n的矩阵。由于UV都是酉矩阵,即UU^T=VV^T=I,因此我们在上式等号两边的左右各乘以U^TV,可以得到:

U^TAV=\Sigma

这一变换称为奇异值分解(Singular Value Decomposition, 简称SVD)。上面公式也可以用图像表示为:

图1:奇异值分解(SVD)

注意到上面的红色方框了吗?如果仅保留红框内的部分,这个等式也是成立的:

\tilde{U} ^TA\tilde{V}=\tilde{\Sigma}

其中\tilde{U}m\times k的矩阵,\tilde{V}n\times k的矩阵,\tilde{\Sigma}k\times k的对角矩阵,\tilde{\Sigma}中的k个对角元素就称为Ak个主成分。注意k是远小于mn的。这样做有什么好处呢?我们可以在上式的等号两边的左右各乘以\tilde{U}\tilde{V}^T,得到:

\tilde{U} \tilde{\Sigma} \tilde{V}^T=\tilde{U}\tilde{U}^TA\tilde{V}\tilde{V}^T= \tilde{A} \approx A

这里\tilde{U}\tilde{V}都不是酉矩阵,因此\tilde{A}并不严格等于A。但是当k的值取得比较合适的时候,\tilde{A}非常接近于A。由于k是远小于样本数m和特征数n的,因此我们可以用小得多的矩阵\tilde{U}\tilde{V}\tilde{\Sigma}来描述矩阵A中每个样本的特征。例如,我们可以做如下变换:


图2:主成分分析(PCA)

这样,一个包含m个样本和n个特征的矩阵A,就变成了一个包含m个样本和k个主成分的矩阵B。矩阵B中任意两个样本之间的关联性和差异性都是和矩阵A中的样本几乎是完全一样的。每个主成分都是原来的n个特征的线性组合,而组合的参数就是\tilde{V}矩阵的每一列。

这样的PCA变换,就把原来需要用成千上万个特征来描述的样本,变换成用几个或者十几个主成分来描述的样本,同时又保留了样本之间的关联性和差异性。

PCA分析的优点:

(1)变换的过程中,每个样本的信息几乎是无损地从m个特征传递到了k个主成分;

(2)变换是可逆的,B矩阵乘以\tilde{V}^T就变换回\tilde{A}矩阵(非常接近于A矩阵);

(3)如果新加入一个样本i,无需重新做PCA分析,直接把样本im个特征乘以\tilde{V},就变成了主成分空间中的样本i

然而,PCA分析中,主成分的数目k不能取得太小,否则B矩阵就无法包含A矩阵中每个样本的所有信息。一般来说,当特征数n比较大的时候(例如n>>1000),k的值在5~40之间比较合适。这一特点,导致我们用前2个或者3个主成分来画2维或者3维的样本分布图的时候,很难直观地看到不同样本之间的差异性,以及同一类型样本的聚类效果。如果要在2维(或3维)空间中,更明显地看到样本聚成了几个大类,需要借助tSNE分析或者UMAP分析。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容