sklearn 数据降维

数据降维

针对每一张表格,维度是指样本的数量 (行数) 或者特征的数量 (列数)。一般如果没有特殊说明,维度说的是特征的数量,一维是指只有一个特征,二维是指有两个特征。

对于图像,维度就是图像中特征向量的个数。一维就是一条直线,二维就是平面坐标系,N 维就是 N 维空间。

降维算法中的"降维"是指减少特征矩阵的维度,这样可以提高计算速度,还有利于进行可视化。

一般来说,使用 PCA 降维的效果要比特征选择好很多,可以使用很少的新特征来承载绝大部分有效信息,可以参考实例 手写数字的降维

主成分分析 PCA

在进行特征选择时,有种方法是根据数据的方差进行过滤。如果一个特征的方差很小,则意味着这个特征上有大量的值是相同的,那么这个特征对标签而言就没有区分度,这种特征就不带有多少有效信息。相反,如果一个特征的方差很大,则说明这个特征上带有大量的信息。

在降维算法中,PCA 使用的信息衡量指标就是样本方差,又称 "可解释性方差",方差越大,特征所携带的信息量就越多。
V_{var}=\frac{1}{n-1}\sum_{i=1}^n(x_i-\hat{x}^2)^2
其中:V_{var} 就是该特征样本方差的无偏估计量。

思考:为什么分母是 n-1 而不是 n

通过 PCA 进行降维的步骤:

  1. 输入原特征矩阵,结构为 (M, N),M 为样本数,N 为特征数;
  2. 决定降维后的特征数量 K;
  3. 通过某种空间变换,找出 N 个新的特征向量,以及所构成的新的 N 维向量空间,并计算出两者之间的变换关系;
  4. 找出特征矩阵在新的特征空间中的坐标;
  5. 只选取方差最大的 K 个方向,删除没有被选中的。这就成功地将特征矩阵由 N 维降为 K 维。

实际上,找出一个新的 N 维特征空间,让数据能够被压缩在少数特征上,并且总信息量不损失太多的技术就是空间坐标变换,是通过矩阵分解来完成。PCA 和 SVD 是两种不同的矩阵分解方法,用于衡量信息量的方法不同而已。

降维之后,PCA 找到的每个特征向量就叫 "主成分",被丢弃的特征向量被认为包含的信息量很少,被视为方差。
X = Q\Sigma Q^{-1} (PCA)\\ X = U\Sigma V^T (SVD)
思考:特征选择和降维都是特征工程的一部分,有什么不同?

特征选择是从已知的特征中选取携带信息最多的特征,选取之后的特征仍具有可解释性,我们能很明确地知道该特征代表什么含义。

降维是将已有的特征进行压缩,降维之后的特征是将原有的特征进行线性或非线性组合而成的,具有不可解释性。降维之后的新特征虽然携带大量的信息,但是我们却无法明确知道其含义。因此,降维算法更像是特征创造的一种。

由此可见,降维一般不适用于探索特征和标签之间关系的模型 (如线性回归),因为无法解释新特征和标签之间的关系;所以在线性回归模型中,应使用特征选择。

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

其中:n_componets: 表示降维之后的维度,除了输入整数之外,还可以是 mle(最大似然估计),这时会使用 "最大似然估计" 自动选择 n_componets 的值。

选择最合适的 n_componets

当参数 n_componets 不填写任何信息时,默认为 min(X.shape) 个特征,相当于没有进行降维,因为一般来说,样本数都会大于特征数。但是我们却可以使用 pca.explained_variance_ratio_ 这一属性来查看各个特征值所含信息量的占比,并以此绘制方差贡献率曲线,以此来选择最合适的 n_componets

使用 PCA 进行矩阵分解需要进行求解特征矩阵的协方差矩阵等一系列繁琐的矩阵运算,但是使用 SVD 分解矩阵却简便许多,不需要计算协方差矩阵,就可以直接求出新特征空间和降维后的特征矩阵。但另一方面, PCA 使用方差来衡量数据所携带的信息量,但是 SVD 的信息衡量指标 "奇异值" 相比于方差却满意理解。

因此,sklearn 将降维流程分成了两部分,一部分是求解新的特征空间 V,由 SVD 分解完成以大大降低矩阵分解的难度;另一部分是求解从原有的特征空间到新的特征空间的变换矩阵和新特征矩阵,这由 PCA 来完成,这就实现了用 SVD 便于计算的性质求解变换矩阵,却依然使用方差作为信息量的评估指标。具体流程如下:

所以 PCA 类的初始化定义中有 SVD 分解器的参数 svd_solver,使用属性 components_ 便可查看坐标变换矩阵 V_{k,n}.

重要参数 svd_solverrandom_state

svd_solver : 在降维过程中,用于决定矩阵分解的方式,有四种模式可选:{'auto', 'full', 'arpack', 'randomized'},默认为 auto

  • auto:基于 X.shapen_components 的默认策略来选择分解器,如果特征矩阵的尺寸大于 500×500,并且要提取的特征数 K 小于数据最小维度 min(X.shape) 的 80%,就使用效率比较高的 randomized 方式;否则,就进行完整的 SVD,然后根据要提取的特征数 K 进行截断。
  • full:调用 scipy.linalg.svd 中的标准的 LAPACK 分解器来生成精确完整的 SVD 矩阵,这种模式适合于数据量不是特别大,计算时间充足的情况,生成的精确完整的 SVD 矩阵的结构为:U_{m,m},\Sigma_{m,n},V_{n,n}^T
  • randomized:在完成的精确的SVD分解中引入随机性,分解器会先生成多个随机向量,然后一一监测这些随机向量中是否有符合需要的,如果符合就保留这个特征向量。这种模式比 full 模式要快很多,并且能够保证运行运行效果,很适合特征矩阵很大,计算量庞大的情况。
  • arpack:从scipy.spare.linalg.svds 调用 ARPACK 分解器来进行奇异值的截断分解 (SVD truncated),分解时就使用要提取的特征维度 K,并且会结合 randomized 模式下的随机性,这样可以加快运算速度,很适合特征矩阵很大的情况,但是一般只适用于稀疏矩阵。截断后的SVD分解出的结构为:U_{m,k},\Sigma_{k,k},V^T_{n,n}

参数 whiten:

控制数据是否进行"白化"处理,将 V 中的特征向量都转换为单位向量,且方向相互垂直,即点积为 0.

属性 components_:

属性 components_ 会返回新特征向量,并由此可以计算出新的特征矩阵 X_dr. 在矩阵分解时,在原有的特征基础上,找出能够让信息尽量聚集的新特征向量,这些新特征向量组成的新特征空间其实就是 V(k, n) 。当 V(k, n) 是数字时,几乎无法判断 V(k, n) 和原有特征究竟有什么关系;但是如果原有特征是图像, V(k, n) 这个空间向量就可以进行可视化. 这时对两张图进行对比,就可以看出新特征空间究竟从原始数据里提取了什么重要信息。具体应用可以参考 人脸识别中的components_

属性 explained_variance_ratio_:

会返回一个列表,其中的元素是新的特征所含信息量占总信息量的百分比,并且按从大到小进行排列。

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

推荐阅读更多精彩内容