【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 14—Dimensionality Reduction 降维
Lecture 14 Dimensionality Reduction 降维
14.1 降维的动机一:数据压缩 Data Compression
现在讨论第二种无监督学习问题:降维。 降维的一个作用是数据压缩,允许我们使用较少的内存或磁盘空间,也加快算法速度。
举例:
假设用两个特征描述同一个物品的长度,x1单位是厘米cm,x2单位是英寸inches。这将导致高度冗余,所以需要减到一维。

将数据从三维降至二维: 将三维向量投射到一个二维的平面上,强迫使得所有的数据都在同一个平面上,降至二维的特征向量。

这个过程可以用于把任何维度的数据降到任何想要的维度。事实工作中,不同的团队可能会给你几百或成千上万的特征,其中很容易出现冗余特征。
14.2 降维的动机二:数据可视化 Visualization
降维可以帮助我们将高维数据可视化。
假使有关于许多不同国家的数据,每一个特征向量都有 50 个特征(如 GDP,人均 GDP,平均寿命等)。如果要将这个 50 维的数据可视化是不可能的。将其降至 2 维,便可将其可视化了。



这样做的问题在于,降维算法只负责减少维数,新产生的特征的意义就必须由我们自己去发现了。
14.3 PCA问题的公式描述 Principal Component Analysis Problem Formulation
主成分分析(PCA)是最常见的降维算法。PCA 要做的是找到一个方向向量(Vector direction),当把所有的数据都投射到该向量上时,投射平均均方误差尽可能小。方向向量是一个经过原点的向量,投射误差是从特征向量向该方向向量所作垂线的长度。如下图:

主成分分析问题,要将n维数据降至k维,目标是找到向量u(1) ,u(2) ,...,u(k) 使得总的投射误差 Projected Error 最小:

主成分分析与线性回归的比较:

主成分分析最小化的是投射误差,不作任何预测。
线性回归最小化的是预测误差,目的是预测结果。
上图中,左边的是线性回归的误差(垂直于横轴投影),右边则是主要成分分析的误差(垂直于斜线投影)。
PCA 将n个特征降维到k个,可以用来进行数据压缩,如果 100 维的向量最后可以用 10维来表示,那么压缩率为 90%。同样图像处理领域的 KL 变换使用 PCA 做图像压缩。但 PCA 要保证降维后数据的特性损失最小。
PCA 的一大好处是对数据进行降维处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度保持原有数据的信息。
PCA 的一个很大的优点是,它是完全无参数限制的。在 PCA 的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。 但这同时也是缺点,如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。
14.4 PCA算法 Principal Component Analysis Algorithm
使用PCA 从 n 维减少到 k 维:
1)均值归一化。计算出所有特征的均值,然后令 xj = xj − μj 。如果特征是在不同的数量级上,还需要将其除以标准差 σ2 。

2)计算协方差矩阵(covariance matrix) sigma Σ


3)计算协方差矩阵 Σ 的特征向量(eigenvectors):
在 Matlab 里我们可以利用奇异值分解(singular value decomposition)来得到特则向量矩阵 U,调用方式为 [U, S,V] = svd(sigma) 。(注:函数返回的矩阵 S 也有用,后续会讲到)

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

其中 Ureduce 为 n x k 维,x 为 n × 1 维,因此结果 z(i) 为 k × 1 维。 注:我们不对方差特征进行处理。

14.5 重建原始特征 Reconstruction from Compressed Representation
给定压缩后的低维数据 z(i) 怎么反向得到高维的 x(i) 数据? 即:如何根据压缩后的数据去重建原始数据?
当 x 为 2 维,z 为 1 维,z = UreduceT * x, 则相反的方程为: xappox = Ureduce ⋅ z, 这时有 xappox ≈ x。

14.5 选择主成分的数量k Choosing The Number Of Principal Components
主要成分分析最小化投射的平均均方误差,怎么选择适当降维目标 k 值(即主成分的数量)呢?
我们的目标是:在『平均均方误差与训练集方差的比例尽可能小』的情况下,选择尽可能小的 k 值。
如果希望比例小于 1%, 就意味着原本数据的偏差有 99% 都保留下来了。 另外,还可以使用5%(对应95%的偏差), 10%(对应90%的偏差) 这些比例。

具体做法:

a) 先令 k = 1,然后进行主要成分分析,获得Ureduce 和z,然后计算比例是否小于1%。
b) 如果不是的话,再令k = 2,如此类推,直到找到可以使得比例小于 1%的最小k 值。
事实上还有一些更好的方式,在 Matlab中有一个“svd”函数。 其中,SVD代表为奇异值分解(singular value decomposition),函数调用 [U, S, V] = svd(sigma) 返回一个与 Σ(即ppt中的Sigma) 同大小的对角矩阵 S(由Σ的特征值组成),两个酉矩阵 U 和 V ,且满足 Σ = U * S * V'。若 A 为 m×n 矩阵,则 U 为 m×m 矩阵,V 为 n×n 矩阵。奇异值在 S 的对角线上,非负且按降序排列,对角线之外的其它元素都是 0。
对于方阵 Σ,有

因为我们的目的是从 n 维降到 k 维,也就是选出这 n 个特征中最重要的 k 个,也就是选出特征值最大的 k 个。所以得到矩阵 S 后,我们可以直接用它来计算平均均方误差与训练集方差的比例,而不用一遍遍重复计算误差和方差:


14.7 PCA的应用建议 Advice for Applying PCA
假使我们正在针对一张 100×100 像素的图片进行某个计算机视觉的机器学习,即总共有 10000 个特征。使用 PCA 算法的步骤如下:
1. 运用 PCA 将数据压缩至 1000 个特征
2. 对训练集运行学习算法
3. 在预测时,采用之前学习得到的 Ureduce 将输入的特征 x 转换成特征向量 z ,然后再进行预测

注: 如果有交叉验证数据集,也采用对训练集学习而来的Ureduce 。
正确用法,压缩和可视化:

错误的用法:
1. 将其用于减少过拟合(通过减少特征的数量)

这样做非常不好,不如使用正则化处理。原因在于 PCA 只是近似地丢弃掉一些特征,它并不考虑任何与结果变量有关的信息,因此可能会丢失非常重要的特征。而当进行正则化处理时,会考虑到结果变量,不会丢掉重要的数据。
2. 在项目开始时便将PCA考虑进去

最好还是从所有原始特征开始,只在有必要的时候(算法运行太慢或者占用太多内存)才考虑采用 PCA。
部分公式参考:Rachel-Zhang
【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 14—Dimensionality Reduction 降维的更多相关文章
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测
Lecture 15 Anomaly Detection 异常检测 15.1 异常检测问题的动机 Problem Motivation 异常检测(Anomaly detection)问题是机器学习算法 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 16—Recommender Systems 推荐系统
Lecture 16 Recommender Systems 推荐系统 16.1 问题形式化 Problem Formulation 在机器学习领域,对于一些问题存在一些算法, 能试图自动地替你学习到 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 13—Clustering 聚类
Lecture 13 聚类 Clustering 13.1 无监督学习简介 Unsupervised Learning Introduction 现在开始学习第一个无监督学习算法:聚类.我们的数据没 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机
Lecture 12 支持向量机 Support Vector Machines 12.1 优化目标 Optimization Objective 支持向量机(Support Vector Machi ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 11—Machine Learning System Design 机器学习系统设计
Lecture 11—Machine Learning System Design 11.1 垃圾邮件分类 本章中用一个实际例子: 垃圾邮件Spam的分类 来描述机器学习系统设计方法.首先来看两封邮件 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 10—Advice for applying machine learning 机器学习应用建议
Lecture 10—Advice for applying machine learning 10.1 如何调试一个机器学习算法? 有多种方案: 1.获得更多训练数据:2.尝试更少特征:3.尝试更多 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 1_Introduction and Basic Concepts 介绍和基本概念
目录 1.1 欢迎1.2 机器学习是什么 1.2.1 机器学习定义 1.2.2 机器学习算法 - Supervised learning 监督学习 - Unsupervised learning 无 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 18—Photo OCR 应用实例:图片文字识别
Lecture 18—Photo OCR 应用实例:图片文字识别 18.1 问题描述和流程图 Problem Description and Pipeline 图像文字识别需要如下步骤: 1.文字侦测 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习
Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...
随机推荐
- 不再为命名而苦恼!使用 MSTestEnhancer 单元测试扩展,写契约就够了
有没有觉得命名太难?有没有觉得单元测试的命名更难?没错,你不是一个人!看看这个你就知道了:程序员最头疼的事:命名 或它的英文原文 Don’t go into programming if you do ...
- Viterbi算法和隐马尔可夫模型(HMM)算法
隐马尔可夫模型(HMM)及Viterbi算法 https://www.cnblogs.com/jclian91/p/9954878.html HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那 ...
- c++中重载,重写,覆盖
1.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列表(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 相同的范围(在 ...
- bzoj 3158 千钧一发——网络流
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3158 发现偶数之间一定满足第二个条件:奇数之间一定满足第一个条件 ( \( (2m+1)^{ ...
- 深入理解java虚拟机-第二章:java内存区域与内存泄露异常
2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...
- cassandra的一些概念
分区器Partitioners 在集群内,根据设置的副本数,决定数据如何分发,允许跨机房 具体看 http://teddymaef.github.io/learncassandra/cn/replic ...
- ios真机连接不上记录,再次执行脚本说找不到真机的解决
1.连接其他手机iphone 6 plus 和 iphone x 的时候,连接不上 appium desired capabilities 获取不了元素 提示 An unknown server ...
- 009:JSON
一. MySQL JSON类型 1. JSON介绍 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级 ...
- supervisor 管理
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启.它是通过fork/exec的方式把这些被管理的进程 ...
- linux下启动关闭oracle
1. linux下启动oracle su - oracle sqlplus /nolog conn /as sysdba startup exit lsnrctl start 2. linux下关闭o ...