[机器学习笔记]Note12--降维

继续是机器学习课程的笔记,本节介绍的是降维方法,这也是非监督学习中的一个问题,主要介绍主要成分分析(Principal Component Analysis,PCA)算法。

降维

动机一:数据压缩

使用降维的一个原因是数据压缩。下面通过几个例子来介绍降维。

第一个例子是将数据从二维降至一维。假设我们要采用两种不同的仪器来测量一些东西的尺寸,其中一个仪器测量结果的单位是英尺,另一个仪器测量的结果单位是厘米,我们希望将测量的结果作为机器学习的特征。现在的问题是,两种仪器对同一个东西测量的结果不完全相等(由于误差、精度等),而将两者都作为特征有些重复,因而,我们希望将这个二维的数据降至一维。如下图所示:

这里写图片描述

具体做法就是,找出一条合适的直线,如上图下方那条直线,然后将所有的数据点都投射到该直线上,然后用z(i)标识,这样便完成了从二维数据x(i)向一维数据z(i)的映射。这样得到的新特征只是原有特征的近似,但好处是将需要的存储、内存占用量减半,而已可以让使用这些数据的算法运行得更快

第二个例子是将数据从三维降至二维。这个例子的过程与上面类似,是将三维向量投射到一个二维平面上,强迫使得所有的数据都在同一个平面上,降至二维的特征向量。

这里写图片描述

这样的处理过程可以被用于把任何维度的数据都降到任何想要的维度,如将1000维的特征降至100维。

动机二:数据可视化

在许多机器学习问题中,如果我们能将数据可视化,这有助于我们寻找到一个更好的解决方案,而降维可以帮助做到数据可视化。

一个例子是假设现在有关于许多不同国家的数据,每一个特征向量都有50个特征(如,GDP,人均GDP,平均寿命等),如下图所示。

这里写图片描述

如果要将这个50维的数据可视化是不可能的,但是使用降维的方法将其降至2维,那就可以将其可视化。如下图所示,用新的特征z1z2来表现。

这里写图片描述

这样的问题就是,降维的算法只负责减少维度,而新特征的意义就必须由我们自己去发现了。对于上述例子,我们根据新的二维特征画出一个二维图,如下图所示,用点z(i)表示每个国家,那么可能会发现水平轴可能对应的是一个国家的面积或者是GDP,而纵轴计算对应人均GDP或者幸福感等。

这里写图片描述

主要成分分析(Principal Component Analysis,PCA)

主要成分分析时最常见的降维算法。

在PCA中,如果是将二维数据降至一维,我们要做的就是找到一个方向向量(Vector direction),当我们将所有的数据都投射到该向量上时,我们希望投射平均均方误差可以尽可能地小。方向向量时一个经过原点的向量,而投射误差是从特征向量向该方向向量作垂线的长度。如下图所示

这里写图片描述

下面给出PCA问题的一般描述:

  • 问题是将n维数据降至k维
  • 目标是找到向量u(1),u(2),,u(k)使得总的投射误差最小

    然后是比较PCA和线性回归的,这两种算法是不同的算法。PCA最小化的是投射误差,而线性回归尝试的是最小化预测误差。线性回归的目的是预测结果,而PCA不作任何预测。如下图所示

    这里写图片描述

左图是线性回归的误差,而右图是PCA的误差。

PCA算法

接下来是介绍PCA的具体实现过程。

首先是预处理过程,做的是均值归一化。需要计算出所有特征的均值μj=1mmi=1x(i)j,然后令xj=xjμj。如果特征是不同数量级的,还需要将其除以标准差σ2

接下来就是正式的PCA算法过程了。也就是要计算协方差矩阵(covariance matrix)。而协方差矩阵=1mmi=1(x(i))(x(i))T

然后就是计算协方差矩阵的特征向量(eigenvectors)。在Octave语言中可以利用**奇异值分解(singular value decomposition,SVD)来求解,[U,S,V] = svd(sigma)

对于一个n×n维度的矩阵,上式中的U是一个具有与数据之间最小投射误差的方向向量构成的矩阵。如果我们希望将数据从n维降至k维,我们只需要从U中选取前K个向量,获得一个n×k维度的矩阵,这里用Ureduce表示,然后通过如下计算获得要求的新特征向量z(i):

z(i)=UTreduce×x(i)

其中xn×1维的,因此结果是k×1维。

注意,这里我们部队偏倚特征进行处理。

在压缩过数据后,我们可以采用如下方法来近似地获得原有的特征:x(i)approx=Ureducez(i)

选择主要成分的数量

PCA需要将n维数据降至k维数据,这里的k也就是PCA需要确定的参数K,也就是主要成分的数量。

主要成分分析是要减少投射的平均均方误差

1mi=1m||x(i)x(i)approx||2

而训练集的方差是1mmi=1||x(i)||2

我们希望的是在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的K值

一般来说,我们希望这个比例,如下所示,是小于1%,即意味着原本数据的偏差有99%都保留下来了。

1mmi=1||x(i)x(i)approx||21mmi=1||x(i)||20.01

而如果选择保留95%的偏差,便能显著地降低模型中特征的维度了。

所以做法可以是,先令K=1,然后进行PCA,获得Ureducez,然后计算比例是否小于1%。如果不是,再令K=2,如此类推,直到找到可以使得比例小于1%的最小K值(原因是各个特征之间通常情况存储某种相关性)。

还有一些更好的方式来选择K,在Octave语言中调用svd函数的时候,我们获得三个参数:[U,S,V]=svd(sigma)。其中S是一个n×n的矩阵,只有对角线上有值,其他单元都是0,我们可以使用这个矩阵来计算平均均方误差与训练集方差的比例:

1mmi=1||x(i)x(i)approx||21mmi=1||x(i)||2=1ki=1Siimi=1Sii1%

也就是:
ki=1Siimi=1Sii0.99

应用PCA

假设我们正在针对一张100×100像素的图片进行某个计算机视觉的机器学习,即总共有10000个特征。这里可以使用PCA来降维来提高算法的速度。做法如下:

  1. 第一步是使用PCA将数据压缩至1000个特征;
  2. 对训练集运行学习算法;
  3. 在预测的时候,使用第一步学来的Ureduce将测试集中的特征x转换成新的特征向量z,然后再进行预测。

注意:只有在训练集才运行PCA算法,而将训练集中学到的Ureduce应用到交叉验证集和测试集中。

错误使用PCA的情况有:

  1. 将PCA用于减少过拟合(减少特征的数量)。这样做并不好,不如尝试归一化处理。原因是PCA只是近似地丢弃掉一些特征,它并不考虑与结果变量有关的信息,因此可能丢掉非常重要的特征。而当进行归一化处理时,会考虑到结果变量,不会丢掉重要的数据。
  2. 默认地将PCA作为学习过程中的一部分。这虽然很多时候有效果,但最好还是从原始特征开始,只在有必要的时候(算法运行太慢或者占用太多内存)才考虑使用PCA。

小结

本节内容介绍了使用降维的两大原因,一个是进行数据压缩,减少内存的使用,提高算法速度,第二个是为了数据可视化,从而找到一个更好的解决问题的方法。

降维方法中最常用的就是PCA算法,所以本节内容主要是介绍PCA算法的基本做法,具体实现过程,以及使用的方法和注意事项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jetty java 实例_Maven+Jetty+Servlet 简单示例

一个朋友让我帮他写一个基于 Servlet JettyDerby 实现的项目。本文先介绍 MavenJettyServlet 的整合例子。1、添加依赖pom.xml 里添加依赖javax.servletjavax.servlet-api3.1.0org.eclipse.jetty9.4.14.v20181114jetty-webapp2、准备两个 Servlet 例子HelloServletpackage com.…

节后的人才市场开始活跃了?

今天居然接到一个印度打来的电话,一印度MM操着纯正的印度英语居然说是从Linkedin上找到我的,希望我能参加他们杭州公司的面试,费了很大的劲也没让她弄明白我不愿意relocate。 只能说节后的人才市场就像快烧开的水,分子们开始活跃了…

mysql 静态表 是不是 myisam_mysql的静态表和动态表的区别,MyISAM和InnoDB的区别

静态表字段长度固定,自动填充,读写速度很快,便于缓存和修复,但比较占硬盘,动态表是字段长度不固定,节省硬盘,但更复杂,容易产生碎片,速度慢,出问题后不容易重…

[机器学习笔记]Note13--异常检测

继续是机器学习课程的笔记,本节课内容是异常检测,它是一个非监督学习算法,用于发现可能不应该属于一个已定义的组中的数据。 密度估计 首先是给出一个例子,如下图所示,是一个测试飞机引擎的例子,给定数据…

html5新增元素

一、HTML5新增结构元素 之前,我们只能用万能的div标签,并为其设置不同的id如header, footer, sidebar等来分别表达头部,底部或者侧栏等。而现在代码编写者不再需要为id的命名费尽心思,对于手机、阅读器等设备更有语义的好处。 HTM…

python 代码转程序_精悍的Python代码段-转

1 文件处理readlines() 和 writelines()方法可以讲列表元素依次写到文件中;file类本身没有提供复制方法,可以使用read()和write()方法模拟实现文件的拷贝,也可以使用shutil模块:shutil.copyfile(hello.txt,hello2.txt)shutil.move…

[机器学习笔记]Note14--推荐系统

继续是机器学习课程的笔记,本节课将介绍推荐系统的内容。 问题形式化 推荐系统是机器学习的一个非常重要的应用,在很多音乐、购物等网站都有推荐系统,如豆瓣,淘宝,网易云音乐等都是有使用到推荐系统的,因…

手机应用开发的方式不能完全套用到iPad上

对于一些复杂的游戏,许多人已经不能满足于手机小巧的屏幕,大屏的画面感就成为许多人选择平板电脑的重要因素。当越来越多的80后开始为人父母,孩子们从大人手中得到的礼物,也不再局限于零食、玩具和游乐场入场券。随着智能手机的普…

java面向对象编程思想_Java面向对象编程思想

面向对象三个特征:封装、继承、多态封装:语法:属性私有化(private)、提供相对应的get/set 的方法进行访问(public)、在set/get的方法中对属性的数据 做相对应的业务逻辑的判断思想:封装外面的程序不能直接访问本类的属性&#xff…

[机器学习笔记]Note15--大规模机器学习

继续是机器学习课程的笔记,本节内容主要是介绍大规模机器学习的内容。 大型数据集的学习 对于一个过拟合的模型,增加数据集的规模可以帮助避免过拟合,并获得一个更好的结果。 但是对于一个大规模的数据,比如有100万个数据量的训…

Linux管道和重定向 ---多命令协作

管道及重定向就是Linux多命令协作的基础机制Linux的Shell对数据流进行以下分类定义:   stdin 标准输入 编号为:0 默认:键盘  stdout 标准输出 编号为:1 默认:终端  stderr 标准错误 编号为&…

java 骰子_基本随机滚动骰子Java

5 个答案:答案 0 :(得分:12)Random.nextInt()具有不可预测的行为 - 它可以为整数生成所有可能的值,包括负数。改为使用Random.nextInt(numSides) - 它将从[0,numSides]返回一个整数,即包括0并排除numSides。要获得所需的功能[1&am…

[机器学习笔记]Note16--应用示例:图像文字识别

继续是机器学习课程的笔记,本节课是最后一节内容了,主要是介绍一个应该–图中文字的识别。 问题描述和流程图 图像文字识别应用就是从给定的图片中识别文字。这比从一份扫描文档中识别文字要复杂得多。一个例子图片如下所示: 为了完成这样的…

java中文处理_Java的中文乱码处理

1,设置编译器的编码(Eclipse)、Window >preferences>Workspace> Text file encoding下的Other设置为UTF-8设置jsp页面的编码(Eclipse)Window >preferences>Web> JSPFile>Encoding设置为UTF-82.从前端获取的数据乱码(1)request.setCharacterEnc…