Note sth about LDA(Linear Discriminant Analysis)
这篇来说说LDA的复习,LDA在第二次作业的博客中也提及了,但是那是作业思考,所以决定再开一篇只说LDA的。

动机:
  LDA的中文名字——线性判别分析。其主要功能还是降维(N $\rightarrow$ k)。
LDA算法:(用一个二维特征的二分类来说明,因为图好画←_←)
至于多分类,可以参考博客LDA线性分析推广到多分类
  明确LDA是如何进行降维(线性判别的),LDA考虑的和PCA不同之处在于——PCA的样本空间是一个样本,你来做主成分提取;而LDA的样本是一堆样本,你来找轴映射,从而将这些样本分离。于是乎,LDA考虑的目标是——最大化类间距离与最小化类内距离。(即不同类样本尽量离得远,同类尽量离得近)
算法公式概述:

$$ \mu_i = \frac{1}{N_i} \sum_{x \in X_i} x $$
$$ \overline{z_i} = w^T \mu_i = w^T \frac{1}{N_i} \sum_{x \in X_i} x = \frac {1}{N_i} \sum_{x \in X_i} w^Tx $$
Between-calss Scatter:$ J_b = || \overline{z_1} - \overline{z_2} || $
Within-class Scatter:$ J_w = s_1^2 + s_2^2 $,$ s_i = \sum_{z \in Z_i} (z-\overline{z_i})^2 $
  其实,上式中的$\overline{z_i}$就是$i$这类的中心。即下图中的$\overline{x_i}$,显然右图效果更好,因为左图其实两个类的部分样本映射完已经重叠了。


问题:
  显然我们希望最大化$J_b$,而最小化$J_w$,而且是同时的,那么我们应该如何构造我们的优化目标函数?下面提供几个思路:
1、$ arg max J(w) = J_b - J_w $
2、$ arg max J(w) = \frac{J_b}{J_w} = \frac{w^T S_b w}{w^T S_w w} $
  是不是都可以?当$J_b$变大而$J_w$减小的时候,让上述两个值最大,就是我们所需的答案。但是其实$J_b - J_w$是不可以的。因为还要考虑一个问题,虽然$J_b$和$J_w$都是正的,但是谁大谁小我们并不清楚,所以1式是会爆出负数的,而一旦爆出负数,结果就可能会出错,举个例子:$3-100>4-110$,但是$\frac{3}{100}<frac{4}{110}$,显然就出错了。而2因为都是正数,所以可以很好地进行优化。
  紧接着,我们观察一下$ arg max J(w) = \frac{w^T S_b w}{w^T S_w w} $,会发现其实$w$的解是不唯一的,因为如果$w$是解,显然$a*w$也是解,为了方便得解出解,我们添加一个约束,并将问题转化为:$arg max J_b(w) = w^T S_b w$,其中$ w^T S_w w = 1 $,这个和$ arg max J(w) = \frac{w^T S_b w}{w^T S_w w} $是等价的,但是我们可以发现——$arg max J_b(w) = w^T S_b w$,其中$ w^T S_w w = 1 $,又是一个带约束的优化问题,请出Lagrange-multipliers(拉格朗日乘子法)
  我们可以得到:
$$ L(w,\lambda) = w^T S_b w - \lambda(w^T S_w w - 1) $$
$$ \frac{\partial L}{\partial w} = 2S_b w - wS_w w $$
  此时,若$S_w$可逆,则$S_{w}^{-1} S_b w = \lambda w$,又回到了解特征方程的问题,如果$S_w$不可逆呢?我们可以求$S_w$的伪逆,这样问题也是可以解决的。
关于伪逆,即若$X$与$A^T$同型,且满足:$AXA=A$,$XAX=X$,则$X$为$A$的伪逆矩阵。

ML_Review_LDA(Ch5)的更多相关文章

  1. Mongodb Manual阅读笔记:CH5 安全性

    5 安全性 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读 ...

  2. 《代码整洁之道》ch5~ch9读书笔记 PB16110698(~3.15) 第二周

    <代码整洁之道>ch5~ch9读书笔记 本周我阅读了本书的第5~9章节,进一步了解整洁代码需要注意的几个方面:格式.对象与数据结构.错误处理.边界测试.单元测试和类的规范.以下我将分别记录 ...

  3. 《图解机器学习-杉山将著》读书笔记---CH5

    CH5 稀疏学习 重点提炼 提出稀疏学习的缘故: 虽然带有约束条件的最小二乘学习法结合交叉验证法,在实际应用中是非常有效的回归方法,但是,当参数特别多时,计算参数以及预测值需要大量时间.此时,我们要解 ...

  4. 计算机体系结构——CH5 标量处理机

    计算机体系结构--CH5 标量处理机 右键点击查看图像,查看清晰图像 X-mind 计算机体系结构--CH5 标量处理机 先行控制技术 指令得重叠执行方式 顺序执行方式 一次重叠执行方式 二次重叠技术 ...

  5. SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库

    5.启动SQL Server服务和数据库 在数据库和服务启动过程中,经常会出现的问题: 1.SQL Server实例无法正常启动 2.系统数据库无法正常启动 3.网络配置失败 4.用户数据库无法启动 ...

  6. ch5 MySQL 备份与恢复

    第 5 章 MySQL 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 My ...

  7. linux 私房菜 CH5 笔记

    知识点 linux 大小写敏感 接口的切换 [Ctrl] + [Alt] + [F1] ~ [F6] :文字接口登入 tty1 ~ tty6 终端机: [Ctrl] + [Alt] + [F7] :图 ...

  8. C++ Primer 5 CH5 语句

    5.1 简单语句 空语句: ; 5.2 语句作用域 5.3 条件语句 switch 语句:表达式与某个 case 匹配成功,执行 case 之后的语句直到 break 或者 switch 结尾,cas ...

  9. [HBase Manual]CH5 HBase运行模式:单实例和分布式

    HBase运行模式:单实例和分布式 HBase运行模式:单实例和分布式 1.单实例模式 1.1 单实例在HDFS下 2.分布式 2.1 伪分布式 3完全分布式 HBase有2种运行模式,单实例和分布式 ...

随机推荐

  1. vue中组件之间的通信

    一.vue中组件通信的种类 父组件向子组件的通信 子组件向父组件的通信 隔代组件之间的通信 兄弟 组件 之间的通信 二.实现通信的方式  props vue自定义的事件 消息订阅与发布 vuex sl ...

  2. Django组件之modelform

    Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样 ...

  3. 20.Vue中获取DOM元素和组件

    1.获取DOM元素和组件:this.$refs

  4. 模仿DotnetCore中间件的方式,做一个列表过滤的功能

    我们的很多功能当中都会遇到对版本进行过滤的场合,例如你可能需要对列表中的数据的时间进行过滤.版本过滤.渠道以及地区信息进行过滤. 原本的做法:设计很多个过滤方法,通过枚举的方式组合,选择需要过滤哪些方 ...

  5. Codeforces Round #582 (Div. 3)-G. Path Queries-并查集

    Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...

  6. python中set(集合),深浅拷贝以及一些补充知识点

    1.set集合 特点:无序,不重复,元素必须可哈希(不可变) 作用:去重复 本身是可变的数据类型.有增删改查操作.{集合的增删改查操作应用较少,这里不做详细介绍了(这里的增有一个方法update注意这 ...

  7. Mac系统上,Firefox和Selenium不兼容的情况

    解决办法,检查环境: Python 2.7.10 Firefox 46版本 Selenium 2.53.6 注意:将Firefox自动更新关闭,否则可能会出现自动升级以后无法执行Selenium用例的 ...

  8. Cache 和 Buffer 的区别在哪里

    Cache和Buffer是两个不同的概念,简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据.在很 ...

  9. Selenium常用API的使用java语言之19-调用JavaScript代码

    虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法.在这种情况下,就可以借助JavaScript来控制浏览器的滚动条.WebDriver提供了execu ...

  10. 如何的keil试试调试中,看逻辑分析仪Logic viwer

    在调试过程中,可以使用keil自带的逻辑分析仪查看变量的试试信息,减少串口输出,提高部分cpu的效率,可以添加以下信息: 1.gpio引脚 2.全局变量 全局静态变量.局部变量是不行的. 然后,添加变 ...