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没有讲到的东西.而且本系列 ...
随机推荐
- Guard Duty (medium) Codeforces - 958E2 || (bzoj 2151||洛谷P1792) 种树 || 编译优化
https://codeforces.com/contest/958/problem/E2 首先求出N个时刻的N-1个间隔长度,问题就相当于在这些间隔中选K个数,相邻两个不能同时选,要求和最小 方法1 ...
- js验证textarea里面是否有换行符
var reg = /[\r\n]+/g;if(reg.test(reason)){ PopAlert("不能有换行符!"); return;}
- qq登录,新浪微博登录接口申请过程中遇到的问题
接口申请下来了,开发很容易的,参数传到就可以了.以前就做过这方面的开发,但是申请还是第一次,网上有关这方面的东东不是很多,所以记录一下申请过程. 1,qq登录接口申请 申请地址是:http://con ...
- .Net应用导入、导出Excel文件
本次阐述的导入和导出都围绕此Demo进行
- MD5加密的方法
#region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="strPwd&quo ...
- wine使用
wineqq 不能输入问题winecfg在 wine 设置里,选择函数库添加 riched20, 就行了(原装领先于内建) wineqq 可以输入不能输入中文问题原因:fictx组件缺失 搜狗输入法没 ...
- TCP简单程序
服务器段: package com.dcz.socket; import java.io.IOException; import java.io.OutputStream; import java.n ...
- substring和substr,slice和splice
substring 和 substr 这二货都是针对字符串而言的,且都是返回一个副本,而不是在原字符串上直接操作. 上代码: var str = '0123456789'; console.log( ...
- google kickstart 2018 round D A Candies
思路: 对于small数据,由于求和及奇数数量两个限制条件均满足区间单调性,可以直接使用尺取法(滑动窗口法)求解. 对于large数据,奇数数量依然是满足区间单调性的.首先使用尺取法,找到所有满足奇数 ...
- vue+webpack+VS Code入门简单的项目配置
为了方便,这边的编译器选择的是VS Code (Visual Studio Code); 打开VS Code,选择好自己的工作空间,然后新建一个文件夹作为我们项目的文件夹,然后,show time: ...