【ML】从特征分解,奇异值分解到主成分分析
1.理解特征值,特征向量
一个对角阵\(A\),用它做变换时,自然坐标系的坐标轴不会发生旋转变化,而只会发生伸缩,且伸缩的比例就是\(A\)中对角线对应的数值大小。
对于普通矩阵\(A\)来说,是不是也可以找到这样的向量,使得经\(A\)变换后,不改变方向而只伸缩?答案是可以的,这种向量就是\(A\)的特征向量,而对应的伸缩比例就是对应的特征值。
特征值会有复数是为什么?
首先要知道,虚数单位\(i\)对应的是旋转\(90^o\),那么,如果特征值是复数,则对应的特征向量经矩阵\(A\)变换后将会旋转\(90^o\),且伸缩率是复数的模。
2.矩阵的分解1:特征值分解
一个方阵\(A\),它的线性无关的特征向量个数不会超过其维度,不同特征值对应的特征向量一定是线性无关的。而同一特征值对应的特征向量也不一定相关。
但是,如果重复特征值重复计数,特征值的个数一定是\(n\),对应的也有\(n\)个特征向量。那么矩阵就可以分解:
\(Ax_i=\lambda x_i\)
\(AX=\Lambda X\)
其中,\(\Lambda\)是将\(A\)的特征值作为对角元素的对角阵,\(X\)是与特征值位置对应的特征向量(列)排成的矩阵。
\(A=X^{-1}\Lambda X\)
从而,可以将\(A\)分解为上面的形式,这样,在计算,分析性质等会很有帮助。
一个应用就是PCA时,对协方差矩阵\(A^TA\)做特征分解,以提取主成分。
3.矩阵的分解2:奇异值分解SVD
上面的特征值分解只针对于方阵,而对于一般矩阵,可不可以做类似分解呢?
这就是奇异值分解。
什么是奇异值:A的奇异值是\(A^TA\)的特征值的平方根。因为矩阵是变换,经非方阵\(A\)变换后也有向量其方向不变,只伸缩,这个伸缩率就是奇异值,对应的向量为\(A^TA\)的特征向量。
酉矩阵:\(A^T=A^{-1}\)的矩阵。
什么是奇异值分解?
具体来说:对于非方阵\(A\),它的奇异值分解形式是:
\(A=U\sum V^T\)
其中,\(A:m*n;U:m*m ; \sum : m*n; V:n*n\),且\(、U、V\)都是酉矩阵。
\(\sum\)矩阵只有对角线元素不为0,称为奇异值。
并且:
\(V\)是矩阵\(A^TA\) 的标准化特征向量构成的矩阵,称为右奇异向量矩阵。右奇异向量实现列数压缩。
\(U\)是矩阵\(A^TA\)的标准化特征向量构成的矩阵,称为左奇异向量矩阵。左奇异向量实现列数压缩。
\(\sum\)矩阵对角线的奇异值就是矩阵\(A^TA\)的特征值的平方根。
下面推导一下为什么是这样:
奇异值分解,将\(m*n\)的矩阵\(A\),分解为:
$A=U\sum V^T $
则:\(A^T=V\sum^T U^T => A^TA=V\sum^TU^TU\sum V^T=V\sum^2V^T\)
上面用到了\(U^TU=I\)。
即得到了:
$ A^TA=V\sum^TU^TU\sum V^T=V\sum^2V^T$
因而很显然,方阵\(A^TA\)的标准化特征向量排列成的矩阵就是\(V\),而特征值开根号就是奇异值。
所以,从这里也可知,奇异值的个数就是\(A^TA\)的特征值个数。
4. 主成分分析PCA
为什么做主成分分析?
做数据分析处理,针对每个样本都收集了大量特征,设样本数为\(m\),特征数为\(n\),则我们得到的数据矩阵为:
\(A=[m*n]\);每行为一个样本,每列为一个特征。
大量的数据会导致处理计算复杂,并且多个特征相互之间可能存在多重相关关系,导致把所有数据放在一起处理过分拟合了某些指标;而盲目的删除一些特征又可能导致关键信息的损失。
如何减少特征数,又保留住绝大部分信息呢?+正则化项可以自动学习这个过程。PCA主成分分析可以实现这个目的,其本质是数据降维。
怎么做主成分分析?
1.找主成分方向:正交的
将列数\(n\)降维到\(n'\),怎么做呢?如果有一个维度它的变化不大,那么包含的信息就很少,自然可以删除,但在现有数据下,很难看出哪个维度变化不大,数据是杂乱的。因此将其变换到以特征向量为基的坐标系下,\(n\)维矩阵自然可以变换到\(n\)维特征向量坐标系,这样,所有\(n\)个特征是相互正交的。变换到新的坐标系后,由于特征值的大小表征了离散程度,哪个特征变化小就可以通过特征值大小看出来。
根据最大方差理论,变化大的维度含有的信息远大于变化小的。
求PCA方向就是\(A^TA\)的特征值方向。
为什么要对\(A^TA\)求特征向量呢(为什么是这个方向)?
这是因为,原本我们想将列向量变换到正交的特征向量方向,即寻找新的坐标系,将每条数据在这个新的坐标系下标出。这个方向实际上就是\(A^TA\)的特征向量的方向。因为,根据第5部分,\(A=U\sum V^T=>AV=U\sum\),可以看到,\(V\)的各个向量的方向就是相互正交方向,这个方向使得数据\(A\)的列向量变换后依然正交。而如何将列向量变换到正交方向上去呢?投影。这个式子也给了我们答案,即相乘,类似于内积,(一个向量到另一个向量的投影)。因此,这样就将所有列向量(特征)映射到了相互正交的空间,倘若有的变量变化不大,此时可以根据特征值大小看出,即特征值小则方差小,信息量小。
另外可以发现,中心化后,\(A^TA\)就是协方差矩阵,这是为什么许多教材上直接说对协方差矩阵求特征向量,特征向量的方向就是主成分方向。
那么,确定了主成分方向,如何确定使用哪几个主成分呢?
特征值的意义就是特征向量方向上的伸缩率,因此,特征值的大小衡量了该主成分方向上的离散程度,特征值越大,则越离散,方差越大,信息越多。
因此可以定义贡献率:该特征值/特征值之和。
所以,只要选取特征值最大的几个主成分方向以及对应的主成分向量(主成分特征)就可以了。这是为什么教材中按特征值大小排序。
总结一下主成分步骤:
要将列特征变换到另一个空间,使得特征之间是相互正交的,即变换后的\(n\)维特征正好处于新坐标系的轴上。
- 求\(A^TA\)特征值以及对应的特征向量,按大小排序。
- 该特征向量就是新的坐标轴方向,将A的各行向新的特征值方向上做投影,得到主成分。
- 根据贡献率,选择需要的主成分数。
上面的过程很类似于奇异值分解,实际上,学习库中的PCA不会真的对\(A^TA\)求特征向量,这太费时了,因为求特征向量实际上就要首先求特征多项式,大于三阶不存在通用算法求解。实际上,scikit-learn做奇异值分解的途中,有算法可以直接得到右边的\(V\),从而确定了方向。
PCA的缺点是解释性不强,即变换后的特征到底代表了什么是不能够解释的,但这不影响PCA很有效,对我来说更重要的是帮助理解特征值分解和奇异值分解。
【ML】从特征分解,奇异值分解到主成分分析的更多相关文章
- 学习笔记DL006:特征分解,奇异值分解
特征分解. 整数分解质因素. 特征分解(eigendecomposition),使用最广,矩阵分解一组特征向量.特征值.方阵
- 【Math for ML】矩阵分解(Matrix Decompositions) (下)
[Math for ML]矩阵分解(Matrix Decompositions) (上) I. 奇异值分解(Singular Value Decomposition) 1. 定义 Singular V ...
- 【Math for ML】矩阵分解(Matrix Decompositions) (上)
I. 行列式(Determinants)和迹(Trace) 1. 行列式(Determinants) 为避免和绝对值符号混淆,本文一般使用\(det(A)\)来表示矩阵\(A\)的行列式.另外这里的\ ...
- Auto ML自动特征工程
Auto ML自动特征工程 特征工程是在做机器学习训练的过程中必不可少的环节,特征工程就是找出对模型结果有益的特征交叉关系,通常特征工程需要耗费算法工程师大量的精力去尝试.针对这样的场景,PAI推出智 ...
- 从矩阵(matrix)角度讨论PCA(Principal Component Analysis 主成分分析)、SVD(Singular Value Decomposition 奇异值分解)相关原理
0. 引言 本文主要的目的在于讨论PAC降维和SVD特征提取原理,围绕这一主题,在文章的开头从涉及的相关矩阵原理切入,逐步深入讨论,希望能够学习这一领域问题的读者朋友有帮助. 这里推荐Mit的Gilb ...
- 特征值分解,奇异值分解(SVD)
特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法.两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征. 1. 特征值: 如果说一个向 ...
- ML.NET 示例:推荐之矩阵分解
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:推荐之One Class 矩阵分解
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- StanFord ML 笔记 第八部分
第八部分内容: 1.正则化Regularization 2.在线学习(Online Learning) 3.ML 经验 1.正则化Regularization 1.1通俗解释 引用知乎作者:刑无刀 ...
随机推荐
- 还在问跨域?本文记录js跨域的多种实现实例
前言 众所周知,受浏览器同源策略的影响,产生了跨域问题,那么我们应该如何实现跨域呢?本文记录几种跨域的简单实现 前期准备 为了方便测试,我们启动两个服务,10086(就是在这篇博客自动生成的项目,请戳 ...
- C# 绘制PDF嵌套表格
嵌套表格,即在一张表格中的特定单元格中再插入一个或者多个表格,使用嵌套表格的优点在于能够让内容的布局更加合理,同时也方便程序套用.下面的示例中,将介绍如何通过C#编程来演示如何插入嵌套表格到PDF文档 ...
- 什么是mybatis?
[学习笔记] 什么是mybatis: Mybatis本质是一种半自动化的ORM框架,前身是ibatis,除了要pojo和映射关系之外,还需要些sql语句. 怎么看待ORM框架: 处理矛盾的,java程 ...
- 授权管理-LDAP-介绍与环境搭建
LDAP介绍 转自:https://blog.csdn.net/tanshizhen119/article/details/79942315 还是先来百度百科介绍. LDAP是轻量目录访问协议,英文全 ...
- Fundebug支持浏览器报警
摘要: 除了邮件报警和第三方报警,我们新增了浏览器报警功能. 邮件报警与第三方报警 Fundebug是专业的应用BUG监控服务,当您的线上应用,比如网页.小程序.Java等发生BUG时,我们会第一时间 ...
- html文档知识补充
13.form表单(*******) 功能:前后数据交互,帮你提交任意的数据 input通过控制type属性来展示不同的获取用户输入的页面效果 type属性总结: text:纯文本 password: ...
- iOS----------适配iOS12
library not found for -lstdc++.6.0.9 原因是苹果在XCode10和iOS12中移除了libstdc++这个库,由libc++这个库取而代之,苹果的解释是libstd ...
- Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 by:授客 QQ:1033553122 测试环境 功能需求 实现思路 代码实践(关键技术点实现) 代码模块组织 ...
- Unity 2D 效应器与来回移动的实现
1.效应器 Point Effector 2D: 点效应器.进入区域,吸引或排斥物体 Area Effector 2D: 区域效应器,可以用来做马里奥的管道移动效果 Surface Effector ...
- MongoDB中数组类型相关的操作
概述 在MongoDB的模式中,我们经常将一些数据存储到数组类型中,即我们常见的嵌套模式设计的一种实现方式.数组的这种设计实现方式在关系数据库中是没有或者说不常见的.所以,通过本文我们来梳理一下Mon ...