软分类:y 的取值只有正负两个离散值,例如 {0, 1}

硬分类:y 是正负两类区间中的连续值,例如 [0, 1]

一、感知机

主要思想:分错的样本数越少越好

用指示函数统计分错的样本数作为损失函数,不可微;

对错误分类样本,∑ -yi * f(xi) = ∑ -yi * WTxi  (因为求和项一定大于0,所以损失函数越小表示错误分类的样本越少)

二、线性判别分析

主要思想:同一类别的样本方差足够小,不同类别之间分散开(类内小,类间大)

Rayleigh quotient 和 generalized Rayleigh quotient

函数 R(A, x) = xHAx / xHx ,其中 A 是 Hermitan矩阵,如果是实矩阵则满足 AT = A。

性质:λmin  <= R(A, x) <= λmax   ,即最大值为 A 的最大特征值、最小值为 A 的最小特征值

函数 R(A, B, x) = xHAx / xHBx ,其中 A、B 是 Hermitan矩阵,B 正定。

令 x = B-1/2x',由瑞利商性质可知,R(A, B, x) 的最大值是 B-1/2AB-1/2 (或者 B-1A)的最大特征值,最小值是其最小特征值

与 LDA 的关系:

二类:

  数据是 p 维,只有两个类别,经过 LDA 投影到投影到一条直线,投影直线为向量 w(只关心其方向,设为单位向量即可),样本点xi 在直线上的投影为zi = wTx,记类别 1 和类别 2 两个集合为c1、c2,对 p 维数据 x 两个集合的样本均值和方差分别为 μc1 、 μc2 、Sc1 、Sc2

  样本点投影到直线后有样本均值 zk拔 和样本方差 Sk

  LDA 目标函数的定义要让类内方差小类间方差大,则

  J(W) = (z1拔 - z2拔 )2 / (S1 + S2)  

     = wTc1 - μc2)(μc1 - μc2)Tw /  wT (Sc1 + Sc2) w

     = wT Sw /  wT Sw w

  这个目标函数的 argmax 可以对其求导后令导数为零,得到向量 w 正比于 Sw-1c1 - μc2)。也可以直接利用瑞利商的结论,最大值为 Sw-1Sb 的最大特征值,二分类时 Sw 的方向恒为 μc1 - μc2 (因为(μc1 - μc2)Tw 结果是 scalar),令 Sw  = λ (μc1 - μc2) ,代入 (Sw-1Sb)w = λw,得到 w = Sw-1c1 - μc2) 结果一样。

多类:  

  数据是 p 维,有 K 个类别,经过 LDA 投影到低维(q 维)平面,基为(w1,w2,...,wq),共同构成矩阵Wpxq

  J(W) = WSW / WT Sw W,类间方差 S= Σ Nj (μcj - μ)(μcj - μ)T ,for j = 1, 2, ..., K;类内方差 Sw =  Σ Σ (xi - μcj)(xi - μcj)T for j = 1, 2, ..., K  and every xi in ci

  为了应用瑞利商结论,分子分母都各自求主对角线元素乘积,J(W) = ∏ wiSwi / wiT Sw w,for i = 1, 2, ..., q 。目标函数的最大值为 Sw-1Sb 最大的q个特征值的乘积,W 就由这 q 个最大特征值对应的特征向量组成。

  注意降到的维度 q 最大为 K-1。(因为知道了前K-1个 μcj 后最后一个μcj 可以由前K-1个表示)

监督降维:根据以上分析,对 xi 就可以进行降维 zi = WTxi

分类:LDA 用来分类的思路,假设各个类别的数据符合各自的高斯分布,LDA 投影后用 MLE 计算各个类别的均值和方差,就得到了各个类别服从高斯的概率密度函数。对于一个新样本,将其投影后的向量代入各类的分布计算一下概率,最大的就是样本所属的类。

三、Logistic 回归

判别模型,直接用一个函数拟合,计算后验概率 P(y|x)。直接用 MLE 来估计参数 W / 用梯度下降优化求参数 W 。

为什么不能用均方误差作为logistic regression的损失函数?——均方误差不能准确衡量分类效果的好坏
如果用的话,考虑两种情况
1. label 是1,而 f(x) = 0,那其实现在距离目标很远,但是微分值却是0,
2. label是0,但是 f(x) =1,微分算出来也是0,也不对,原因就出在sigmoid函数求导之后会出现 f(x) * (1-f(x))。
所以,这并不符合实际,距离优化目标远的情况微分值却很小,用均方误差是很难优化到一个好的结果。
 
logistic regression 再如何改进?—— cascading logistic regression models  神经网络

看一下 logistic regression 和 linear regression 中的梯度:

sigmoid函数怎么来的?——高斯判别分析

四、高斯判别分析:

生成模型,不对条件概率 P(y | x) 直接建模,引入 P(y) 的先验分布。

根据贝叶斯定理(执果索因):P(y | x) = P(x | y)P(y) / P(x),也即 P(y=ck | xi) 正比于 P(x| y=ck) P(y=ck),分别对这两部分建模后,对于一个新样本计算P(y=c| xi),概率最大的ck 就是样本所属的类别。

以二分类为例,对先验 P(y=ck) 建模最直觉的想法就是遍历所有训练数据,计算 P(y=ck) = Nk / N 。这个结果其实也就来源于,假设 Y 服从参数为 p 的伯努利分布,通过 MLE 进行参数估计。

对似然 P(x | y=ck) 的估计呢?——对每个类别都假设 P(x | y=ck) 服从均值为 μk 、方差为 Σ的高斯分布就好了。

P(x | y=ck) = ∏ P(x| y=ck) ,for every xin c,MLE 估计所有的 μk 和 Σ

结果比较差,怎么改进? ——不同类别的高斯分布共享同一个 Σ,减少参数改善过拟合。

可以看出,高斯判别分析认为输入的各个维度特征之间存在相关性。

能不能和 sigmoid 函数联系起来?

先看一个后验概率表达式,把分子除下去就看到熟悉的 σ (z) 形式了,可以发现 sigmoid 函数的作用就是把 logit 压到 probability。

另一个结论:似然设为服从高斯分布,且不同类别的高斯分布共享方差矩阵的情况下,高斯判别分析:

那为什么不直接去找 W 和 b 呢? ——logistic regression

概率判别模型和概率生成模型的一点比较分析:

为什么 discriminative model 要比generative model的效果要好?—— 先验等假设限制了生成模型效果,但并不是所有情况下都更好。
因为generative model 做了一些假设,比如是高斯分布,伯努利分布,是不是朴素贝叶斯(假定不同维度是独立的)。
所以:
  1. 训练集比较小的时候,这些“脑补”反而可能会更有效,这时候discriminative model就会受数据的影响更大。
  2. 同理 generative model 对数据噪声也不太敏感。
  3. Priors and class-dependent probabilities(先验和似然)可以从不同的来源去估计。
 

五、朴素贝叶斯

服从条件独立性假设

后验概率最大化 等价于 期望风险最小化

线性分类 Linear Classification的更多相关文章

  1. 从损失函数优化角度:讨论“线性回归(linear regression)”与”线性分类(linear classification)“的联系与区别

    1. 主要观点 线性模型是线性回归和线性分类的基础 线性回归和线性分类模型的差异主要在于损失函数形式上,我们可以将其看做是线性模型在多维空间中“不同方向”和“不同位置”的两种表现形式 损失函数是一种优 ...

  2. 【cs231n】图像分类-Linear Classification线性分类

    [学习自CS231n课程] 转载请注明出处:http://www.cnblogs.com/GraceSkyer/p/8824876.html 之前介绍了图像分类问题.图像分类的任务,就是从已有的固定分 ...

  3. 1. cs231n k近邻和线性分类器 Image Classification

    第一节课大部分都是废话.第二节课的前面也都是废话. First classifier: Nearest Neighbor Classifier 在一定时间,我记住了输入的所有的图片.在再次输入一个图片 ...

  4. [Scikit-learn] 1.4 Support Vector Machines - Linear Classification

    Outline: 作为一种典型的应用升维的方法,内容比较多,自带体系,以李航的书为主,分篇学习. 函数间隔和几何间隔 最大间隔 凸最优化问题 凸二次规划问题 线性支持向量机和软间隔最大化 添加的约束很 ...

  5. 【cs231n】线性分类笔记

    前言 首先声明,以下内容绝大部分转自知乎智能单元,他们将官方学习笔记进行了很专业的翻译,在此我会直接copy他们翻译的笔记,有些地方会用红字写自己的笔记,本文只是作为自己的学习笔记.本文内容官网链接: ...

  6. CS231n课程笔记翻译3:线性分类笔记

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Linear Classification Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,巩子嘉和堃堃进行校 ...

  7. [CS231n-CNN] Image classification and the data-driven approach, k-nearest neighbor, Linear classification I

    课程主页:http://cs231n.stanford.edu/ Task: Challenges: _________________________________________________ ...

  8. Android线性布局(Linear Layout)

    Android线性布局(Linear Layout) LinearLayout是一个view组(view group),其包含的所有子view都以一个方向排列,垂直或是水平方向.我们能够用androi ...

  9. FastReport.Net使用:[24]其他控件(邮政编码(Zip Code),网格文本(Cellular Text)以及线性刻度尺(Linear Gauge))

    邮政编码(Zip Code) Zip Code仅支持数字(0~9) Zip Code支持数据列绑定,表达式,文本等模式 可通过修改SegmentCount属性的值来确定Zip Code的位数. 数字右 ...

随机推荐

  1. python 多个装饰器的调用顺序

    python 多个装饰器的调用顺序 一般情况下,在函数中可以使用一个装饰器,但是有时也会有两个或两个以上的装饰器.多个装饰器装饰的顺序是从里到外(就近原则),而调用的顺序是从外到里(就远原则). 原代 ...

  2. MYSQL Got error 28 from storage engine

    网络查找该异常信息,发现 Got error 28 from storage engine 查了一下,数据库文件所在的盘应该没事,应该是数据库用的临时目录空间不够 引用 磁盘临时空间不够导致. 解决办 ...

  3. 提高JavaScript 技能的12个概念

    JavaScript 是一种复杂的语言.如果是你是高级或者初级 JavaScript 开发人员,了解它的基本概念非常重要.本文介绍 JavaScript 至关重要的12个概念,但绝对不是说 JavaS ...

  4. C#开发中常用的加密算法总结

    相信很多人在开发过程中经常会遇到需要对一些重要的信息进行加密处理,今天给大家分享我个人总结的一些加密算法: 常见的加密方式分为可逆和不可逆两种方式 可逆:RSA,AES,DES等 不可逆:常见的MD5 ...

  5. windows中实现python,redis服务自动重启(任务计划程序+bat脚本)

    需求:银行电脑无法自动开机,只能 通过 应用相关服务每天自动重启的方式实现 服务更新并且防止服务假死,内存过大 等情况 相关工具:win10系统中,使用windows自带的任务计划程序 和 bat脚本 ...

  6. Lock和synchronized比较详解(转)

    从Java5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock. 也许有朋友会问,既然都可以通过synchronized来实现同步访问了, ...

  7. Linux运维跳槽必备

    Linux运维跳槽必备的40道面试精华题 1.什么是运维?什么是游戏运维?1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常, 在他运转的过程中,对他进行维护,他集合了 ...

  8. java ServletContextListener 实现UDP监听

    使用spring boot实现项目启动时的监听, UDPListener import java.io.IOException;import java.io.UnsupportedEncodingEx ...

  9. 个人永久性免费-Excel催化剂功能第56波-获取Excel对象属性相关自定义函数

    之前零散开发过一些自定义函数获取Excel对象属性,此次再细细地把有价值的属性都一一给开发完成,某些场景下,有这些小函数还是可以比较方便地实现一些通过Excel界面没法轻松获取到的信息. 修复与更新 ...

  10. isinstance/type/issubclass的用法,反射(hasattr,getattr,setattr,delattr)

    6.23 自我总结 面向对象的高阶 1.isinstance/type/issubclass 1.type 显示对象的类,但是不会显示他的父类 2.isinstance 会显示的对象的类,也会去找对象 ...