惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Engineering at Meta
Engineering at Meta
腾讯CDC
宝玉的分享
宝玉的分享
H
Help Net Security
I
InfoQ
博客园 - Franky
The GitHub Blog
The GitHub Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Microsoft Security Blog
Microsoft Security Blog
M
MIT News - Artificial intelligence
博客园_首页
美团技术团队
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
The Cloudflare Blog
博客园 - 司徒正美
Vercel News
Vercel News
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
月光博客
月光博客

Go Further

【教程】manim动画制作工具 【直观算法】二叉搜索树算法总结 【直观算法】二叉树遍历算法总结 【直观算法】Egg Puzzle 鸡蛋难题 博客文章总目录 TensorSpace 一个3D神经网络可视化框架 【直观详解】通俗易懂了解什么是黎曼猜想 支持币与去中心化商业模式 那些值得一看的TED演讲附全文文稿笔记 【区块链】共识算法与如何解决拜占庭将军问题 【直观详解】让你永远忘不了的傅里叶变换解析 【直观详解】泰勒级数 微信跳一跳解题报告 Dota2-A帐效果 深入浅出看懂AlphaGo Zero/AlphaGo元 【直观详解】线性代数中的转置正交正规正定 程序员技能图谱 【直观详解】线性代数的本质 【直观详解】什么是正则化 Pandas-Wiki 【区块链】比特币与金融、ICO和监管 【区块链】现代区块链与新技术 【区块链】一文看懂区块链:一步一步发明比特币 【直观详解】拉格朗日乘法和KKT条件 【直观详解】支持向量机SVM Dota2伤害类型详解 【直观详解】机器学习分类器性能指标详解 【直观详解】信息熵、交叉熵和相对熵 Dota2机制总结 【直观详解】Logistic Regression
【直观详解】什么是PCA、SVD
2017-10-05 · via Go Further

【阅读时间】
【内容简介】

在说明一个解释型内容的过程中,我一直坚信,带有思考的重复的是获取的知识的唯一捷径,所以会加入很多括号的内容,即另一种说法(从不同角度或其他称呼等),这样有助于理解。加粗的地方我也认为是比较重要的关键字或者逻辑推导,学习有一个途径就是划重点,做笔记。

What & Why PCA(主成分分析)

PCA,Principal components analyses,主成分分析。广泛应用于降维,有损数据压缩,特征提取和数据可视化。也被称为Karhunen-Loeve变换

降维的方法角度来看,有两种PCA的定义方式,这里需要有一个直观的理解:什么是变换(线性代数基础),想整理一下自己线性代数的可以移步我的另一篇文章:【直观详解】线性代数的本质

但是总的来说,PCA的核心目的是寻找一个方向(找到这个方向意味着二维中的点可以被压缩到一条直线上,即降维),这个方向可以:

  • 最大化正交投影后数据的方差(让数据在经过变换后更加分散

往低维度的投影直观表示图

紫色的直线 $u_1$ 即是关于 ${x_1,x_2}$ 二维的正交投影的对应一维表示
PCA定义为使绿色点集的方差最小(方差是尽量让绿色所有点都聚在一坨
其中的蓝线是原始数据集(红点)到低纬度的距离,这可以引出第二种定义方式

  • 最小化投影造成的损失(下图中所有红线(投影造成的损失)加起来最小)

投影造成的损失

投影造成的损失

PCA 主成分分析主要目的是为了减少数据维数,其中Auto-encoder也是一种精巧的降维手段

What & Why SVD(奇异值分解)

SVD,Singular Value Decomposition,奇异值分解。最直观的解释如下图所示

往低维度的投影直观表示图

我们知道,矩阵描述的是一种变换(如果对这个概念有疑惑的,欢迎移步我的博客笔记:线性代数的本质)奇异值分解是矩阵分解的其中一种。换句话说,从上图的圆变换为右边的椭圆,通过一个 $\mathbf M$ 矩阵就可以做到,但是,我们知道,非方阵是很不好处理的,我们希望,可以把 $\mathbf M$ 矩阵表示的变换,分解为其他几种变换的组合(注意,分解之后,被分解的分量包含 $\mathbf M$ 的信息,我们可以使用这些分量来进行操作),这几个变换我们希望是方阵,或者有特殊的性质。

$$ \mathbf M = \mathbf U \cdot \mathbf \Sigma \cdot \mathbf V^* $$

$\mathbf M$ 是一个m×n阶矩阵(输入为n维向量,输出为m维向量

$\mathbf U$ 的列组成一套基向量,m×m阶矩阵,为$\mathbf M \mathbf M^*$ 的特征向量

$\mathbf \Sigma$ 对角矩阵,对角线上的值称为奇异值,可视为在输入与输出之间进行的标量的“伸缩尺度控制”。为 $\mathbf M \mathbf M^*$ 或 $\mathbf M^* \mathbf M$ 的非零特征值的平方根

$\mathbf V^*$ 是 $\mathbf V$ 的共轭转置(实数域即 $\mathbf V^T$),n×n阶矩阵,$\mathbf V$ 的列组成一套基向量,为 $\mathbf M^* \mathbf M$ 的特征向量

这里我们发现这个 $\mathbf U$ 还有 $\mathbf V$ 都是方阵,恰好满足之前的需求

且有 $\mathbf U \mathbf U^T = \mathbf I_n$ 同时 $\mathbf V \mathbf V^T = \mathbf I_m$ ,所以 $\mathbf U$ 和 $\mathbf V$ 是正交矩阵,而我们知道,正交矩阵对应的变换,就是旋转变换

对于 $\mathbf \Sigma$ 来说,我们知道特征值就是表示的度量伸缩程度的因子,即上图中的伸缩压缩程度(图中很直观的体现了这一点)

总结,SVD就是把一个非方阵(压缩变换)分解为一个旋转➜伸缩压缩➜旋转三个变换(矩阵),如上图所示

How PCA