主成分分析法(PCA)(含SVD奇异值分解)等降维(dimensionality reduction)算法-sklearn

亲们早安、午安、晚安,上一篇主成分分析法(PCA)等降维(dimensionality reduction)算法-Python主要是了解了PCA的原理和基于Python的基本算法实现,本文主要是学习scikit-learn (sklearn)中关于降维(dimensionality reduction)的一些模型,侧重于PCA在sklearn中的实现。

在sklearn中的Dimensionality Reduction中,包含的降低特征维度的方法包括主成分分析法PCA(这里面又包括不同类型的PCA方法,一般的PCAKernelPCA, SparsePCA, TruncatedSVD, IncrementalPCA )、因子分析法FA(factor analysis)、独立成分分析ICA

1、主成分分析法PCA

1)Exact PCA 

这个方法主要是利用上一篇主成分分析法(PCA)等降维(dimensionality reduction)算法-Python中的方法,基于奇异值分解(Singular Value Decomposition)来线性降维到低维度的空间。

啥?怎么跑出来个奇异值分解SVD?这是线性代数里的名词,关于线性代数的知识,推荐查看网易公开课里的麻省理工线性代数课程,里面有关于SVD的详细计算。当然,如果想知道SVD的几何意义,我觉得We Recommend a Singular Value Decomposition非常好,图文并茂,极力推荐,由此也进一步理解了主成分分析PCA。

(1)SVD

首先考虑对角矩阵如M,如果M与一个向量(x,y)相乘如图1,表示将(x,y)进行长度的变化如图2:

图1
图2

根据图2的变化可知,对角矩阵M的作用是将水平垂直网格作水平拉伸(或者反射后水平拉伸)的线性变化。

如果M是图3中的对称矩阵,那么它和向量(x,y)相乘后,也可以找到一组网格线(如图4)

图3
图4

看着图4有点蒙圈,貌似不是简单的线性变化,辣么,先把图4中左边图旋转45度,然后再乘以M,然后得到下面的情况:

图5

图5表明,先旋转45度,然后再和M相乘,此时又可以只进行简单的拉伸变化。

对比图4-5,当原始矩阵乘以对称矩阵时,不一定还是进行线性变化(只在一个方向进行伸缩变化),除非这个映射时,两边的正交网络是一致的。

再比如更加一般的非对称非对角矩阵M(如图6):

图6
图7

观察图7,对于任意一个向量,当一个一般矩阵M作用在其上面时,很难只是做线性变化。但是,我们可以如图7最下面一行的变化,找一组网格,找两个正交向量来表示向量。

图8


图9

对角矩阵Σ对角线上的取值σ_1,σ_2就是矩阵M的奇异值。

图10

综上所述:奇异值分解SVD几何意义:对于任何的一个矩阵,我们要找到一组两两正交单位向量序列,是的矩阵作用在此向量序列后得到新的向量序列保持两两正交。奇异值的几何意义:这组变化后的新的向量序列的长度。从图10中看到,奇异值分解和特征值求解很相似,但是特征值必须是方阵才存在,但任何矩阵都可以进行奇异值分解。

好啦,奇异值分解SVD差不多搞清楚了,为啥要进行奇异值分解,其实它表现的就像PCA的意义那样,用这些关键较少数量的奇异值(奇异向量)来表示原来可能比较庞大的东东,因此,在图像压缩等方向应用的比较多。如下:

比如,图11是一个15*25的图片,其像素组成是图12中的M矩阵

图11
图12

结果计算发现,图12中M的非零奇异值只有三个:σ1= 14.72;σ2= 5.22;σ3= 3.31

那么,根据上面奇异值几何意义,其实图11中的图片是可以用这三个奇异值向量来表示的:M=u1σ1v1^T+u2σ2v2^T+u3σ3v3^T,,这一将原来可能要对375个像素点的计算变为123个像素点的计算。还有个问题需要强调,可能实际图片不像图11中那样纯粹,可能存在噪声,如图13(图中出现的那些灰色的地方表示噪声)

图13

图13中像素矩阵得到的奇异值为:σ1= 14.15;σ2= 4.67;σ3= 3.00;σ4= 0.21;σ5= 0.19...

σ15= 0.05等,但是看到还是前三个特征值比较大,因此,继续用σ1,σ2,σ3表示该图片,其他的奇异值舍去,最终得到新的图片见图14,显然图14中噪声变少了。

图14

关于SVD的这个奇异的理解(同时包含PCA于SVD的联系),下面知乎大牛的解释可能更清楚点:

图15
图16

(2)简单PCA模型

class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)

n_components->表示最终要保留的主成分特征数,如果不设置,则保留全部特征

whiten->是否进行白化,默认为false。啥是白化?因为我们在PCA中,保留主要的特征来计算决策,因此难免有误差,为了降低误差,通过白化来降低特征值之间的相关性,使其协方差矩阵变为对角矩阵。具体,来自知乎大牛关于PCA白化的解释很详细,请参考下图17:

图17

在PCA中,原始数据如图17最左边的红色图表示;然后用原始矩阵减去均值,然后求解协方差矩阵,将数据依据协方差矩阵方差最大的轴进行旋转,得到图17中部绿色显示内容;然后进行白化whiten,就是白化操作的输入是特征基准上的数据,然后对每个维度除以其特征值来对数值范围进行归一化。如果数据服从多变量的高斯分布,那么经过白化后,数据的分布将会是一个均值为零,且协方差相等的矩阵(及单位协方差矩阵),如图17中最右边蓝色图示。

svd_solver->指定奇异值分解SVD的方法,由于特征分解是奇异值分解SVD的一个特例,一般的PCA库都是基于SVD实现的。有4个可以选择的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。randomized一般适用于数据量大(数据量超过500*500),数据维度多同时主成分比例又较低(低于80%)的PCA降维,它使用了一些加快SVD的随机算法。 full则是传统意义上的SVD,使用了scipy库对应的实现。arpack和randomized的适用场景类似,区别是randomized使用的是scikit-learn自己的SVD实现,而arpack直接使用了scipy库的sparse SVD实现。默认是auto,即PCA类会自己去在前面讲到的三种算法里面去权衡,选择一个合适的SVD算法来降维。一般来说,使用默认值就够了。

举栗子1:

图18 栗子1准备数据
图19 栗子1PCA处理数据
图20 栗子1效果图

篇幅有限(其实是能力+精力有限,捂脸),sklearn中的PCA模型先介绍到这里,以后再深入研究。希望内容对大家有所帮助,也希望大牛不吝赐教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容