本文作者:HelloDeveloper

很多人说,看了再多的文章,可是没有人手把手地教授,还是很难真正地入门AI。为了将AI知识体系以最简单的方式呈现给你,从这个星期开始,芯君邀请AI专业人士开设“周末学习课堂”——每周就AI学习中的一个重点问题进行深度分析,课程会分为理论篇和代码篇,理论与实操,一个都不能少!

读芯术,一个专注年轻人的AI学习与发展平台(ID:AI_Discovery)。

来,退出让你废寝忘食的游戏页面,取消只有胡吃海塞的周末聚会吧。未来你与同龄人的差异,也许就从每周末的这堂AI课开启了!全文共2698字,预计学习时长6分钟。

周末好啊各位同学,我们又见面了。

科幻名著《三体》里有句犀利的台词——降低维度用于攻击。不过,这个“降维”绝对不只是科幻界的专用名词。

在机器学习中,你同样得了解它。

很多初学者往往会把降维(Dimensionality reduction),特征选择(feature selection),以及特征提取(feature extraction)混为一谈,因为这三者都削减了进入模型的变量个数。

但降维是一个更为宽泛的概念,它包括了特征选择和特征提取。

虽然降维过后,最终使用的变量个数减少了,但特征选择挑选的是特征子集,也就是说,保留下来的所有特征都在原来的特征集中可以找到;而特征提取所提取的是不再是特征子集,而是原来特征的线性(或者非线性)组合,我们经过特征提取后的变量都是新的变量,它的本质是将原始高维空间向低维空间投影,我们所使用的特征不仅少了,而且不再是原来的特征。

距离是机器学习中的一个很重要的概念。每个样本可以表示为一个向量,也就是高维空间的一个点,距离可以用来衡量样本之间的相似度。但是在高维空间,距离的计算会变得非常困难,而我们关心的问题可能在低维空间就会得到很好的解决。但这不意味着低维空间只是对高维空间的近似,有些问题中,高维空间会增加很多噪声,而在低维空间中会得到比高维空间更好的性能。

在上周《如何进行特征选择(理论篇)》的学习中,相信大家已经对特征选择有了足够的认识,所以本文的“降维”特指特征提取。

对于降维有两种分类方式:其一,根据目标值(target)的参与与否,分为有监督降维和无监督降维;其二,根据高维空间与低维空间的关系,分为线性降维和非线性降维。

我们对每种方法分举一例:

主成分分析(PCA)

数学准备:

1.协方差矩阵:随机变量组成的向量,每组随机变量的协方差构成的一个对称矩阵,其对角元是每组随机变量的方差

2.矩阵的对角化:对于矩阵M,有可逆矩阵V,使得

成为对角矩阵,而M的特征值对应的特征向量组成了该可逆矩阵V。(换而言之,矩阵V的每一列对应着M的特征向量)

3.正交矩阵:转置矩阵等于其逆矩阵(

),构成矩阵的列向量彼此正交。

4.数据中心化:对每组随机变量减去均值,再除以标准差。本质是将每组随机变量变为标准的高斯分布。

PCA(Principal component analysis)是用投影的方法将高维空间压缩到低维。

想象一下,此时你站在路灯下面,你本身是三维的(此时此刻除去了时间维度),你的影子却在一个二维平面上。

如图,我们将二维空间的点投影到一条直线上。

但是,我们有无数个投影的方向,就像上图我们可以找出无数条直线来进行投影,那么哪条直线,哪个方向才是最好的呢?PCA的目标就是,找一条直线,使得投影之后的点尽可能的远离彼此,因为点之间的互相远离而不是相互重叠,就意味着某些距离信息被保留了下来。

在高维空间(维数D)的所有的样本可以被表示为一个向量:

在投影之后的低维空间(维数d),样本也是一个向量:

向量的变化可以通过一个矩阵联系起来,这个矩阵我们把它叫做投影矩阵,它的作用是将一个高维向量投影到低维空间得出一个低维向量:

此时,中心化数据的优势就体现了出来,因为经过中心化的数据,

,这就意味着数据的协方差矩阵就成了

,投影之后的协方差矩阵就成为了

,我们的目标是使其方差最大,而协方差矩阵的对角元正是方差,所以我们只需要对其求迹:

换而言之,我们需要找的投影矩阵W其实是一个使

对角化的可逆矩阵,而它的转置等于它的逆

。所以我们寻找W的过程,就是寻找

的特征向量的过程,而方差最大化的过程,也就是寻找

最大特征值的过程。

所以,我们只需要对

做特征值分解,将其特征值排序,取到前面的d个特征向量,彼此正交,构成了投影矩阵W,而它们所张成的低维空间,就是使得投影点方差最大的低维空间。

如图,这是对一个二元高斯分布用PCA进行降维后的结果,这个平面就是由两个最大的特征值对应的特征向量所张成,可以看出,特征向量彼此正交,且首先找到的是最大的特征值对应的特征向量,逐步寻找第二个,第三个.....如果我们的目标空间是n维,就会取到前n个。

线性判别分析(LDA)

数学准备:

1.均值向量:由多组随机变量组成的向量,对每一组随机变量取均值所构成的向量。

2.厄米矩阵(Hermitan ):转置等于其本身的矩阵,

3.广义瑞利熵(Rayleigh quotient):若x为非零向量,则

为A,B的广义瑞利熵,它的最大值是

的最大特征值。

4.矩阵的奇异值分解:任何实矩阵M都可以被分解成为

这三个矩阵的乘积。U和V均为正交矩阵。U的列向量是

的特征向量,V的列向量是

的特征向量,同时奇异值的大小

是的特征值的平方根。

LDA(Linear Discriminant Analysis)的基本思想也是将高维空间的样本投影到低维空间,使信息损失最少。

与PCA不同在于,PCA只针对样本矩阵,希望投影到低维空间之后,样本投影点的方差最大;但LDA不仅针对样本矩阵,还使用了类别信息,它希望投影到低维空间后,相同样本的方差最小(相同样本的集中化),不同样本的距离最大(不同样本离散化)。

如图所示,将二维空间投影到一维空间,即一条直线上。图2相比图1,类间样本距离更大,类内样本方差更小。

以二分类问题为例,我们用

表示两类样本,用

表示两类样本的均值向量,用

来表示两类样本的协方差矩阵,与PCA一样,我们假设存在一个投影矩阵W,这些量会在低维空间变成:

其中

分别为低维空间的样本,均值向量和协方差矩阵。在投影空间的相同样本的方差最小,意味着

最小;而不同样本的距离最大,意味着

最大。

我们定义原始空间的样本协方差矩阵之和为

,类内散度矩阵(whithin-class scatter matrix),用来刻画原始空间上相同样本的方差:

同时定义类间散度矩阵(between-class scatter matrix)

,用来刻画原始空间上不同样本的距离:

将以上的原则结合起来,我们的目的就变成了:

根据广义瑞利熵的形式,我们寻求最大值就变成了对

进行奇异值分解,然后选取最大的奇异值和相应的特征向量。这些特征向量所张成的低维空间,就是我们的目标空间。

读芯君开扒

课堂TIPS

• 降维在表示论中属于低维表示,本质是将原本空间压缩到更小的空间,在这个过程中保证信息损失的最小化。与之相对的是稀疏表示,它是将原本的空间嵌入到更大的空间,在这过程中保证信息损失的最小化。

• PCA有多种理解方式,除了在低维空间使得样本方差最大化,也可以理解为最小重构均方误差,将问题转化为所选低维空间重构的数据与实际数据的差。引入贝叶斯视角,还可以将PCA理解为最小化高斯先验误差。如果从流形的角度看,就是把数据看作一个拓扑空间的点集,在高斯概率空间内找到一个对应的线性流形。

• PCA和LDA的优化目标均可以用拉格朗日乘子法解决。PCA同样也可以通过奇异值分解来解决。奇异值分解方法可以理解为是特征值分解的推广,因为特征值分解要求矩阵为一个方阵,但奇异值分解并无此要求。

降维 php,线性降维方法 - 百度开发者中心的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

  2. opencv matlab三维点云,点云采样的三种方法 - 小白学视觉的个人空间 - OSCHINA - 中文开源技术交流社区...

    点击上方"小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 编辑:3D视觉工坊 本文由知乎作者GeometryHub授权转载,不得擅自二次转载. 原文链 ...

  3. php 清除浮动,清除浮动的方法 - 前端宅男的个人空间 - OSCHINA - 中文开源技术交流社区...

    使用伪元素 最早的一种方式,支持 IE6 .box { background-color: gray; border: solid 1px black; } .box .img { float: le ...

  4. 百度 语音引擎 php,百度语音合成AI - osc_pfclzjwz的个人空间 - OSCHINA - 中文开源技术交流社区...

    注意:不要使用Dw编辑PHP代码,会因为编码问题出错!! require_once 'AipSpeech.php'; // 你的 APPID AK SK const APP_ID = '112*** ...

  5. java创建两个foo方法_Java类实例化原理 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java对象的创建过程包括类初始化(类实例化两个阶段. 一.Java对象创建时机 (1)使用new关键字创建对象 (2)反射创建对象 使用Class类的newInstance方法 Student st ...

  6. leip与mysql数据库_性能分析方法 - osc_xm8bu282的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.性能分析的常用手段 1.空间换时间,利用内存缓存从磁盘上取出的数据,CPU可以直接访问内存,从而比从磁盘读取数据更高的效率. 2.时间换空间,当空间成为瓶颈的时候,切开数据分批次处理,用更少空间完 ...

  7. android 数组排重方法,js数组去重方法集合 - osc_779ncf3o的个人空间 - OSCHINA - 中文开源技术交流社区...

    //第一种方法,新建一个空数组,将原来的数组循环逐个与新数组的成员做比较,如果新数组没有该元素就push进来 var arr = ['a', 1, 1, 1, 2, 4, 4, 'b', 'c', ' ...

  8. 百度音乐api+c语言,百度音乐接口api - osc_d87glhzv的个人空间 - OSCHINA - 中文开源技术交流社区...

    百度音乐全接口 http://tingapi.ting.baidu.com/v1/restserver/ting 请求方式:GET 参数处理:format=json&calback=& ...

  9. 百度开发者中心全新升级 | 文末六一送福利

    为给开发者提供更全面.更及时.更高效的开放技术服务, 百度开发者中心全新升级啦! 百度开发者中心 https://developer.baidu.com是面向开发者的综合性技术交流平台,涵盖百度20个 ...

  10. 百度开发者中心聚力AI开放能力,打造新时代下开发者的“淘金矿”

    重点回顾: 2017年4月19日,百度宣布Apollo计划,具体为将向汽车行业及自动驾驶领域的合作伙伴提供一个开放.完整.安全的软件平台,帮助他们结合车辆和硬件系统,快速搭建一套属于自己的完整的自动驾 ...

最新文章

  1. jQuery学习笔记(一)
  2. windows10远程控制 电脑,远程桌面
  3. linux 64平台上编译32位程序: GCC编译选项 -m64 -m32 -mx32
  4. Objective-c之NSCopying
  5. android 弹出PopupWindow后背景逐渐变暗
  6. linux里查看最耗CPU的线程
  7. java 开源控件_一些好用的开源控件
  8. 下拉菜单实现树状结构_树形图:复杂层次结构的数据可视化
  9. 使用Flex生成GUID
  10. mac mysql安装失败_Mac mysql安装失败解决方法
  11. C#设计模式之16-迭代器模式
  12. react native ios 上架
  13. 前端mvc与mvvm
  14. ios java环境变量_iOS 环境变量配置(DebugReleaseTest)
  15. html轮播图片不显示不了,图片轮播的奇怪现象【图片显示不完整】
  16. 需求分析中系统参与者的概念和确定
  17. Linux4.13显卡切换,LINUX下手动切换双显卡或禁用其中一块显卡的解决办法
  18. 全国计算机二级c++上机试题.cpp,计算机二级考试C++上机考试试题
  19. Boosting(XGBoost、LightGBM以及CatBoost)
  20. STM32 使用SYN6288语音模块

热门文章

  1. 【3-hexo】为啥我又搭建了一个博客?【服务器自建博客】
  2. app上架因为副标题被App Store残忍拒绝!
  3. CSS深入理解之relative
  4. java零基础学习笔记(代码+注解+练习)_面向对象OOP
  5. package.json文件指南
  6. 紫书 UVa437巴比伦塔
  7. C++移动输出端的光标代码实现
  8. Localhost到底是干什么用的?
  9. 傻瓜式自制鼠标光标,超简单
  10. java学习心路历程