Principal component analysis(PCA)

中文就是主成成分分析。在学数学建模的时候将这分为了评价类的方法(我实在是很难看出来,在机器学习中是属于无监督学习降维方法的一种线性降维方法。

举一个最简单的栗子(下图,二维的数据降到一维,就得找到一条直线将所有的点都投影到该直线上,这条直线需要满足的条件就是投影在这条直线上的所有点的方差最大,减少信息的损失。



PCA主要用于当数据的维度过高或者不同维度的数据之间存在相关的关系,造成了机器学习性能的下降的问题。这个时候PCA就是要将高维特征转化为独立性较高的低维特征,降低特征之间的相关性。

Math of warning!

\(X_{nxm}\):n维特征的数据,\(Z_{kxm}\):k维特征的数据,PCA技术就是要找到一组\(W_{kxn}\)使得\(Z=W\cdot X\),同时\(Maximize(\sum_i^kVar(Z_i))\),\(Z_i\)表示第i-D下的投影。

  • 第一步 将X降到\(Z_1,Z_2\)上

    \(Z_1=W_1\cdot X\)

    \(Var(Z_1)=\frac{1}{m}\sum_{j=1}^m(Z_{1j}-\overline{Z_1})^2\),\(|W_1|=1\)投影但是不影响大小

    \(Z_2=W_2\cdot X\)

    \(Var(Z_2)=\frac{1}{m}\sum_{j=1}^m(Z_{2j}-\overline{Z_2})^2\),\(|W_2|=1\)投影但是不影响大小,但是为了是方差最大或者说使特征之间的相关性最低,\(W_1\cdot W_2=0\)

    PS:如果不加这个条件的话\(W_1==W_2\)

  • 第二步 求解\(Var(Z_1),Var(Z_2)\)



    PS:注意这里加\(\cdot\)是向量积,不加的是矩阵乘法(坑

  • \(Z_{1j}=W_1\cdot X_j,\overline{Z_1}=\frac{1}{m}\sum_{j=1}^mZ_{1j}=\frac{1}{m}\sum_{j=1}^mW_1\cdot X_j=W_1\cdot \overline{X_j}\)

  • \(Var(Z_1)=\frac{1}{m}\sum_{j=1}^m(W_1\cdot X_j-W_1\cdot \overline{X_j})^2=\frac{1}{m}\sum_{j=1}^m[W_1\cdot (X_j-\overline{X_j})]^2=W_1^T[\frac{1}{m}\sum_{j=1}^m(X_j-\overline{X_j})(X_j-\overline{X_j})^T]W_1=W_1^TCov(X)W_1=W_1^TSW_1,S=Cov(X)\)

  • 接下来是最大化\(Var(Z_1)\),存在Constraint:\(|W_1|=1,W_1.TW_1-1=0\),利用拉格朗日算子法

    \(g(W_1)=W_1^TSW_1-\alpha(W_1.TW_1-1)\)

    \(\forall i<=m, \frac{\partial g(W_1)}{\partial W_{1i}}=0\rightarrow SW_1-\alpha W_1=0\) 可知\(W_1\)是S的特征向量,\(\alpha\)是S的特征值

    \(Var(Z_1)=W_1^TSW_1=W_1^T\alpha W_1=\alpha W_1^TW_1=\alpha\),要是方差最大则\(\alpha\)是S的最大特征值,\(W_1\)为所对应的特征向量。

  • 按照相同的思路来最大化\(Var(Z_2)\),存在constraints:\(W_2^TW_2-1=0,W_1^TW_2=0\)

    \(g(W_2)=W_2^TSW_2-\alpha(W_2^TW_2-1)-\beta(W_2^TW_1)\)

    \(\forall i<=m, \frac{\partial g(W_2)}{\partial W_{2i}}=0\)

    \(\rightarrow SW_2-\alpha W_2-\beta W_1=0 \rightarrow W_1^TSW_2-\alpha W_1^TW_2-\beta W_1^TW_1=0\)

    \(\rightarrow \beta=W_1^TSW_2=(W_1^TSW_2)^T=W_2^TSW_1=W_2^T\lambda W_1=\lambda W_2^TW_1=0\)

    因为\(\beta=0\)所以\(SW_2=\alpha W_2\),同理可知\(W_1\)是S的特征向量,\(\alpha\)是S的特征值

    \(Var(Z_2)=W_2^TSW_2=\alpha\),要想方差最大且满足约束条件(隐含条件S是Symmetric的,特征向量是正交的),则\(\alpha\)是第二大的特征值且\(W_2\)是对应的特征向量。

  • 第三步 得出结论

    降至不同空间维度上保存的信息量的大小是降维所用S的特征向量所对应的特征值的大小决定的

Conclusions

1、因为S一定是实对称矩阵,则经过对S的奇异值分解以后\(S=Q\sum Q^T\),\(\sum\)是一个对角线为S的特征值的矩阵,Q是特征值对应的特征列向量矩阵,从Q中抽取特征值最大的对应的特征列向量就可以进行降维,并且通过特征值算出简单的信息损失情况。

import numpy as np
U,S,V=np.linalg.svd(S)

人生此处,绝对乐观

PCA技术的自我理解(催眠的更多相关文章

  1. 降维PCA技术

    降维技术使得数据变得更易使用,并且它们往往能够去除数据中的噪声,使得机器学习任务往往更加精确. 降维往往作为预处理步骤,在数据应用到其它算法之前清洗数据.有很多技术可以用于数据降维,在这些技术中,独立 ...

  2. Thread线程join方法自我理解

    Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...

  3. 《Python爬虫技术:深入理解原理、技术与开发》已经出版,送Python基础视频课程

    好消息,<Python爬虫技术:深入理解原理.技术与开发>已经出版!!!   JetBrains官方推荐图书!JetBrains官大中华区市场部经理赵磊作序!送Python基础视频课程!J ...

  4. gslb(global server load balance)技术的一点理解

    gslb(global server load balance)技术的一点理解 前言 对于比较大的互联网公司来说,用户可能遍及海内外,此时,为了提升用户体验,公司一般会在离用户较近的地方建立机房,来服 ...

  5. SPP空间金字塔池化技术的直观理解

    空间金字塔池化技术, 厉害之处,在于使得我们构建的网络,可以输入任意大小的图片,不需要经过裁剪缩放等操作. 是后续许多金字塔技术(psp,aspp等)的起源,主要的目的都是为了获取场景语境信息,获取上 ...

  6. 【转】浅谈对主成分分析(PCA)算法的理解

    以前对PCA算法有过一段时间的研究,但没整理成文章,最近项目又打算用到PCA算法,故趁热打铁整理下PCA算法的知识.本文观点旨在抛砖引玉,不是权威,更不能尽信,只是本人的一点体会. 主成分分析(PCA ...

  7. 关于PCA主成分分析的一点理解

    PCA 即主成分分析技术,旨在利用降维的思想,把多指标转化为少数几个综合指标. 假设目前我们的数据特征为3,即数据维度为三,现在我们想将数据降维为二维,一维: 我们之前的数据其实就是三维空间中的一个个 ...

  8. 关于C#的委托(delegate)的自我理解

    首先描述一个事情,一个老师饿了,他要去买东西填饱肚子,然后他发现他的学生“小李”在玩,没学习,于是就委托“小李”去帮他买吃的. 根据这件事我们来分析: 首先得有个老师(老师饿了是他的方法,老师买东西也 ...

  9. android 的生命周期自我理解

    android的active的生命周期,经过网站的blog学习,加上自己的理解总结如下: 第1种:全新的启动应用程序顺序 onCreate--->onStart---->onResume ...

随机推荐

  1. 我们基于kaldi开发的嵌入式语音识别系统升级成深度学习啦

    先前的文章<三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的>说我们花了不到三个月的时间搭了一个基于kaldi的嵌入式语音识别系统,不过它是基于传统的GMM-HMM的 ...

  2. vue-awesome-swiper手动滑动后不再自动轮播的问题

    <swiper :options="swiperOption" ref="mySwiper" > <!--轮播图内容--> </s ...

  3. $Poj2376\ Poj3171\ Luogu4644\ Cleaning\ Shifts$ 数据结构优化$DP$

    $Poj$    $AcWing$    $Luogu$ $ps:$洛谷题目与$Poj$略有不同,以下$Description$是$Poj$版.题目的不同之处在于洛谷中雇用奶牛的费用不相同,所以不可以 ...

  4. 解决mariadb字符级不是utf8问题

    解决方法:在my.cnf配置文件中添加如下几个指令 [client]  default-character-set=utf8 [mysqld] character-set-server=utf8 in ...

  5. makefile个人理解

    makefile makefile抽象层面的理解 学习某一样东西之前一定要明确学习的目的,即学习了这项工具能解决一些什么问题,其优势是什么? makefile的优势就是能够动态根据文件的新旧来决定是否 ...

  6. 学以致用,react学习前奏准备阶段

    ReactJS:支持React开发,提供JSX代码提示,高亮显示,ReactJS官方介绍 1.cdm→  componentDidMount: fn() { ... }   cdm 2.cdup→  ...

  7. 基于Netty和SpringBoot实现一个轻量级RPC框架-Server篇

    前提 前置文章: Github Page:<基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇> Coding Page:<基于Netty和SpringBoot实现 ...

  8. 第一篇博客-- 走上IT路

    首先介绍一下本人,我是一名在校大学生,在一次学长分享学习经验时了解到,写博客可以帮助复习.所以这就是我要写博客的原因. 我是非常喜欢网络安全技术,因此我选择了我这个专业.在接下来的一段时间我会在这里记 ...

  9. Spring Boot2 系列教程 (十一) | 整合数据缓存 Cache

    如题,今天介绍 SpringBoot 的数据缓存.做过开发的都知道程序的瓶颈在于数据库,我们也知道内存的速度是大大快于硬盘的,当需要重复获取相同数据时,一次又一次的请求数据库或者远程服务,导致大量时间 ...

  10. 使用 git 将代码推送到多个仓库

    使用 git 将代码推送到多个仓库 起因     起初,在 GitHub 建了一个仓库,200+ 的 commits .后来(终于在眼泪中明白...误