ML_Review_PCA(Ch4)
Note sth about PCA(Principal Component Analysis)
ML6月20日就要考试了,准备日更博客,来记录复习一下这次ML课所学习的一些方法。
博客是在参考老师的ppt,以及戳这里,学习播客之后完成的,主要运用ppt的公式,因为博客公式自己链过去就可以看了(;_;)。
看学习博客的时候,发现它内附了另一篇作者自己的文章,和我微信公众号看到的几乎一模一样。???可是作者不是同一个人
动机:
PCA的中文名字——主成分分析。顾名思义,是分析主成分的,何为主成分?那是一个事物组成部分里面为主的成分,至少从我的角度来说开始离题,我区分PCA和LDA(之后会更)的方法就是如此。PCA本身不能做分类(当然可以拿它降维完的特征再进一步进行分类),而LDA最直观的直接分类就是在两类的时候,LDA转换完的特征值可以直接分类(一正一负)。离题结束PCA能的最主要的事情大概就是降维了,这也就是PCA的动机。
PCA算法:
首先,需要明确的是,PCA是根据方差来降维的,假设我们有个N维的向量,我们想降维到k维(k<=N),那么我们应该如何操作?降维至k,其实就是拿k个轴去表示目前的N维特征,显然不一定能够完全表示,但是丢失少量的信息是我们完全可以接受的(参考Subsampling)。那我们是不是第一次应该求出方差最大的轴,那第二次呢?我们应该求出方差次次大的轴!没错,但是约束条件是,第二次的轴必须和第一次的正交(参考XOY坐标系),那么第三个其实就是在垂直前两个轴所组成平面的平面上,方差最大的轴。显然,操作k次之后便得到了k个特征。这里有一种直观感受——如果样本是二维的,并且空间分布为一个椭圆,那么第一次的轴就是实轴,如果还要求第二次的话就是虚轴。
其次,考虑一下方差,方差其实是一维特征的东西,推到高维,计算的应该是协方差。思考一下,互不相关的轴、从大到小的(协)方差。是否可以求出样本的协方差矩阵,最后求得这个矩阵的特征值与特征向量,然后取k个,就是所求答案?答案是肯定的。
算法公式概述:
$$ X \in R^{N * m} $$
$$ \overline{x} = \frac{1}{m} \sum_{i=1}^{m} x_i $$
$$ \Sigma = \frac{1}{m} \sum_{i=1}^{m} (x_i-\overline{x})(x_i-\overline{x})^T $$
$ {\lambda_i, \mu_i} $ the top k principle components(eigenvalue, eigenvector) and i = 1,2,......,k
问题:
我们不难发现,将N维特征降至k维的方法很好,但也有一个很容易考虑到的问题,k是多少?显然,k越大,我们提取的特征就越接近原来的样本,可是这样就失去了降维的意义;而如果k过小,这样一来我们抓住了重点,可却也只抓住了重点,如果大家在重点上都表现得很好,那么又失去了区分度(类似于考试重点题,大家都会做)。于是乎我看到了老师与博客的不同,先说博客的:试,调节一个阈值去尝试然后评估,最后确定k之。显然可行,也非常符合我的考虑。但是我瞄到了老师的处理方法,发现老师运用了一个很寻常,但是式子很好看的方法——拉格朗日乘子法。为什么可以用拉格朗日乘子法?其实这需要将问题做一些转化,描述如下。
用拉格朗日乘子法解决找k的问题:
$$ x \in R^N $$
$$ X = [x_1,x_2,......,x_m] \in R^{N * m} $$
$$ U = (\mu_1,\mu_2,......,\mu_n) \in R^{N * N} $$
$$ y = Ux $$
$$ x = U^Ty = \sum_{i=1}^{N} \mu_i y_i $$
$$ \widehat{x} = \sum_{i=1}^{M} \mu_i y_i, (M \leq N) $$
$$ \epsilon = E{ || x - \widehat{x} ||^2 } = \frac{1}{m} \sum_{j=1}^{m} || x_j - \widehat{x_j} || $$
GOAL:
$$ arg min \epsilon^2, s.t U^T U = I_N $$
从这里我们可以看出,我们得到了一个优化目标argmin
也得到了一个约束条件s.t
,那么接下来就是拉格朗日乘子法的过程了。将$\epsilon$展开会发现,$\epsilon^2 = \sum_{i=M+1}^{N} \mu_i^T\Sigma\mu_i$,之后结合约束以及拉格朗日乘子法的过程,我们得到:$$ L = \epsilon^2 - \sum_{i=M+1}^{N} \lambda_i(\mu_i^T\mu_i-1) $$
之后用L对$\mu$求偏导,得到:$ \frac{\partial L}{\partial\mu_i} = [2\Sigma\mu_i-2\lambda_i\mu_i] = 0 $
现在形式就非常明显了——$ \Sigma\mu_i = \lambda\mu_i $,解出特征值,特征向量就结束了。
其实,PCA在我看来说白了就是一句话:在方差最大的方向上(信号学相信样本是方差大的,而噪声是方差小的为什么???),选择一根轴,使得样本到轴的投影距离之和最小。
ML_Review_PCA(Ch4)的更多相关文章
- Mongodb Manual阅读笔记:CH4 管理
4 管理 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...
- 《代码整洁之道》ch1~ch4读书笔记 PB16110698 (~3.8 第一周)
<代码整洁之道>ch1~ch4读书笔记 <clean code>正如其书名所言,是一本关于整洁代码规范的“教科书”.作者在书中通过实例阐述了整洁代码带来的种种利处以及混乱代码 ...
- 《图解机器学习-杉山将著》读书笔记---CH4
CH4 带有约束条件的最小二乘法 重点提炼 提出带有约束条件的最小二乘学习法的缘故: 左图中可见:一般的最小二乘学习法有个缺点----对于包含噪声的学习过程经常会过拟合 右图:有了空间约束之后,学 ...
- 计算机体系结构——CH4 输入输出系统
计算机体系结构--CH4 输入输出系统 右键点击查看图像,查看清晰图像 X-mind 计算机体系结构--CH4 输入输出系统 输入输出原理 特点 实时性 与设备无关性 异步性 输入输出系统的组织方式 ...
- [Ocean Modelling for Begineers] Ch4. Long Waves in a Channel
Ch4. Long Waves in a Channel 简介 本章主要介绍明渠中分层流体模拟.练习包括浅水表面波,风暴潮.内波和分层流体模拟. 4.1 有限差分法详细介绍 4.1.1 泰勒公式 4. ...
- SQL Server 2012实施与管理实战指南(笔记)——Ch4数据库连接组件
4.数据库连接组件 访问数据库有多种不同的技术,包括ADO,ODBC,OLEDB,ADO.NET等这些都有一些共性.首先要建立连接(Connection),然后通过命令(Command)对数据库进行访 ...
- ch4 MySQL 安全管理
第 4 章 MySQL 安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司 ...
- 【FSFA 读书笔记】Ch4 Volume Analysis & Cr 5 PC-based Partitions
Volume Analysis 1. “卷”可以理解为从逻辑上对物理存储设备的重新编制,便于操作系统管理. (A volume is a collection of addressable secto ...
- C++ Primer 5 CH4 表达式
4.1 基础 函数调用也是一种特殊的运算符,它对运算对象的数量没有限制. C++ 的表达式要么是左值,要么是右值.左值可以位于赋值语句的左边,右值则不可以. 当一个对象被用作右值的时候,用的是对象的值 ...
随机推荐
- 配置java环境遇到的问题及解决方案
第一个问题: 安装SDK过程中有过报错,就要注意文件是否齐全,我看了下sdk文件夹下的platforms里面是空的.打开sdk里面的SDK Manager.exe,勾选一个安卓版本进行下载即可. 第二 ...
- 剑指offer-链表相关
剑指offer面试常考手撸算法题-链表篇 1. 从头到尾打印链表 class Solution { public: // 可以先压栈,再出栈到vector // 时间/空间:O(n) vector&l ...
- Android笔记(二十四) Android中的SeekBar(拖动条)
拖动条和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程度,而拖动条则通过滑块的位置来标识数值——而且拖动条允许用户拖动滑块来改变值,因此拖动条通常用于对系统的某种数值进行调节,比如调节音量等 ...
- Android笔记(五) Activity的启动模式
Android中Activity是由返回栈来管理的,在默认情况下,每当启动一个新的Activity,它都会在返回栈中入栈,并且出于栈的顶端.但是有些时候Activity已经在栈的顶端了,也就不需要再启 ...
- frp服务搭建
安装命令 C wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/ma ...
- Java面试题及答案解析
面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...
- 基于Java+Selenium的WebUI自动化测试框架(二)-----页面操作接口
在有了基础的Position类之后,我们需要考虑我们在寻找完页面元素之后,需要做什么.这个“做”什么,可以理解为我们在页面上需要对应的一系列动作.比如:点击,输入,切换窗口,寻找元素,判断元素是否存在 ...
- P1168 中位数[堆 优先队列]
题目描述 给出一个长度为NNN的非负整数序列AiA_iAi,对于所有1≤k≤(N+1)/21 ≤ k ≤ (N + 1) / 21≤k≤(N+1)/2,输出A1,A3,…,A2k−1A_1, A_3 ...
- 前端学习笔记--CSS布局--float定位
1.float属性 box1向右移动,box2顶替了box1的位置,box3顶替了box2的位置. 2.clear属性 案例: 一列三行布局: <!DOCTYPE html> <ht ...
- cvte2018春招前端开发实习面试分享
编程题问题描述: 返回整数数组中出现次数第n多的数字(返回值可能有多个) 最近在找实习,面试二面最后出了一道这样的编程题,当时有思路但语法有错误,而且很紧张,最后没有运行出来,导致凉凉,回来重新思考了 ...