cs229_part7
PCA
问题背景
回顾一下我们特征选择中的问题。如果特征非常多,而且有一些特征是重复的,那么我们可以想办法剔除掉一些无用的特征。那里我们提到一个计算互信息的方法。那么这里换一种降维方法。
比如说这样的一种比较极端的情况,我们数据是二维的,但是很明显能看的出来有一个维度对于分类是没有任何作用的,那我们可以把这个数据投影到x轴上面,变成这样:
这样我们就把二维的数据降到了一维。
当然这只是一种比较极端的情况,但是对于任意情况也是可以推广的。比如上面这个情况,投到x轴是最好的情况,而投到y轴上是最差的情况。因为投到y轴上就变成了一个点,还怎么分类。
那么主要的想法就是,我们找到一个超平面,然后把特征投到超平面上面,那要怎么投呢,就是投完之后使得点之间的距离越大越好。
形式描述
如果我们的样本在超平面上的投影是\(\mathbf { W } ^ { T } x _ { i }\)那么投影后样本的方差就是\(\sum _ { i } \mathbf { W } ^ { T } x _ { i } x _ { i } ^ { T } \mathbf { W }\)
那么优化目标就是:
\[
\left.\begin{array} { c } { \max _ { \mathbf { W } } \operatorname{tr} \left( \mathbf { W } ^ { \text{T} } \mathbf { X } \mathbf { X } ^ { \text{T} } \mathbf { W } \right) } \\ { \mathbf { s .t .} \mathbf { W } ^ { \text{T} } \mathbf { W } = \mathbf { I } } \end{array} \right.
\]
利用拉格朗日算子可得:
\[
\mathbf { X } \mathbf { X } ^ { \text{T} } \mathbf { W } = \lambda \mathbf { W }
\]
于是对\(\mathbf { X } \mathbf { X }\)做特征分解取所需要的特征即可。
过程就是:
- 对样本集进行中心化处理:\(x _ { i } \leftarrow x _ { i } - \frac { 1} { m } \sum _ { i = 1} ^ { m } x _ { i }\)
- 计算协方差矩阵:\[\mathbf { X } \mathbf { X }\]
- 对协方差矩阵进行特征分解
- 取最大的d个特征作为所需要的特征向量\(w _ { 1} ,w _ { 2} ,\dots ,w _ { d }\)
- 得到投影矩阵\(\mathbf { W } = \left( w _ { 1} ,w _ { 2} ,\ldots ,w _ { d } \right)\)
如果这个推导过程看不懂的话请翻阅参考。
参考
cs229_part7的更多相关文章
- cs229课程索引
重要说明 这个系列是以cs229为参考,梳理下来的有关机器学习传统算法的一些东西.所以说cs229的有些内容我会暂时先去掉放在别的部分里面,也会加上很多重要的,但是cs229没有讲到的东西.而且本系列 ...
随机推荐
- php—Spl库常用数据结构基本用法
数据结构之一 : 栈 //zhan $stack = new SplStack(); $stack->push('data1'); $stack->push('data2'); echo ...
- 2017 Multi-University Training Contest - Team 1 Balala Power!
Talented Mr.Tang has n strings consisting of only lower case characters. He wants to charge them wit ...
- html 手机端click 事件去掉黑色阴影效果
添加css样式 html{-webkit-text-size-adjust: 100%;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);} 1. -web ...
- sql server 日期 查询技巧
CONVERT(varchar(100), SendTime, 23) –-sql里的字段SendTime参数 selectdateName(weekday,getDate());--返回当前星期 s ...
- Android 8.0 NotificationChannel 采坑实例
Android O 上Notification的新特性: 通知通道功能 1. 简介: 通知通道功能使开发者管理自己应用的通知成为一个组或者一个通道,用户可以通过通知通道完成设置通知,如:阻止所有通知, ...
- 从binlog恢复数据及Mysqlbinlog文件删除
做了mysql主从也有一段时间了,这两天检查磁盘空间情况,发现放数据库的分区磁盘激增了40多G,一路查看下来,发现配置好主从复制以来到现在的binlog就有40多G,原来根源出在这里,查看了一下my. ...
- 重置Mysql的root密码及用户权限设置
一.重置Mysql的root密码 方法一: 直接进入localhost/phpmyadmin修改用户root的权限,设置密码: 方法二: 进入mysql控制台:mysql->use mysql ...
- Java文件操作系列[3]——使用jacob操作word文档
Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...
- MySQL存储过程(批量生成论坛中发帖、回帖、主题等数据)
USE 数据库名称1;DROP PROCEDURE IF EXISTS 数据库名称1.存储过程名称;delimiter $$CREATE PROCEDURE 数据库名称1.存储过程名称(in v_co ...
- LeetCode Add and Search Word - Data structure design (trie树)
题意:实现添加单词和查找单词的作用,即实现字典功能. 思路:'.' 可以代表一个任何小写字母,可能是".abc"或者"a.bc"或者"abc.&quo ...