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 之 递归
一.概述 递归:指在当前方法内调用自己的现象. 递归的分类: 递归分为两种,直接递归和简介递归 直接递归称为方法自身调用自己 间接递归可以 A 方法调用 B 方法,B 方法调用 C 方法,C 方法调用 ...
- BHD钱包部署【生态池/合作池】
前序 BHD网址:https://btchd.org/#wallet 注:我这里是centos7, 所以我选linuxPC 部署 解压与配置 tar -zxf bhd-v1.3.4.0-d909c0e ...
- SR开启时LOG_MODE必须是normal
SR开启时LOG_MODE必须是normal 需要一个初始化备份,
- node.js 调用mysql 数据库
1.在package.json中添加mysql依赖 命令:npm install mysql --save 2.项目中添加mysql文件夹 > 文件夹下创建config文件夹,并在config下 ...
- layui表单
{include file="Public:inner_header" /} <link rel="stylesheet" href="__ST ...
- javascript之ECMAScript:语法的操作标准
一.如何书写一个javascript代码 javascript代码需要写在javascript标签中才会生效,而javascript标签可以写在任何地方,但考虑到规范化及页面的加载问题,最好是写在bo ...
- NumPy 百题大冲关,冲鸭!
角色名称:NumPy 角色描述:NumPy是一个NASA都在用的扩展库. NumPy提供了许多高级的数值编程技能,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而战斗.是很多大型 ...
- POI中的CellType类型以及值的对应关系
POI 中的CellType类型以及值的对应关系 CellType 类型 值 CELL_TYPE_NUMERIC 数值型 0 CELL_TYPE_STRING 字符串型 1 CELL_TYPE_FOR ...
- 链表实现队列(python)
# -*- coding: utf-8 -*- from collections import deque class Node(object): def __init__(self, value=N ...
- python_面向对象——双下划线方法
1.__str__和__repe__ class Person(object): def __init__(self,name,age): self.name = name self.age = ag ...