最近忙成狗,各种意义上。第二章其实之前已经看过了但是已经完全忘记了,于是重新看了一遍当复习。

判别学习算法:直接学习$p(y|x)$,或学习一个假设$h_{\theta}(x)$输出结果

生成学习算法:对$p(x|y)$进行建模(feature, class label),然后根据$p(y|x)=\frac{p(x|y)p(y)}{p(x)}$和$p(x)=p(x|y=1)p(y=1)+p(x|y=0)p(y=0)$计算结果。

高斯判别分析

假设p(x|y)服从多元高斯分布$z~N(\mu,\Sigma)$。其中$\mu$为均值,$\Sigma=E[(x-\mu)(x-\mu)^{T}]$为协方差矩阵。

假设y服从伯努利分布。即$p(y)=\phi^{y}(1-\phi)^{1-y}$。

则其服从高斯分布的模型:

$p(x|y=0)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp(-\frac{1}{2}(x-\mu_0)^T\Sigma^{-1}(x-\mu_0))$

$p(x|y=1)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}exp(-\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1))$

则其似然函数为:$l(\phi, \mu_0, \mu_1, \Sigma)=log\prod p(x^{(i)},y^{(i)})=log\prod p(y^{(i)}|x^{(i)},\theta)$

与此相比,logistic回归的似然函数为:$log\prod p(y^{(i)}|x^{(i)}, \theta)$

此时,各参数结果如下:

$\phi=\frac{1}{m}\sum_{i=1}^{m}1\{y^{(i)}=1\}$

$\mu_0=\frac{\sum_{i=1}^{m}1\{y^{(i)}=0\}x^{(i)}}{\sum_{i=1}^{m}1\{y^{(i)}=0\}}$

$\mu_1=\frac{\sum_{i=1}^{m}1\{y^{(i)}=1\}x^{(i)}}{\sum_{i=1}^{m}1\{y^{(i)}=1\}}$

$\Sigma=\frac{1}{m}\sum_{i=1}^{m}(x^{(i)}-\mu_{y^{(i)}})(x^{(i)}-\mu_{y^{(i)}})^T$

预测公式如下:$argmax_y p(y|x)=argmax_y \frac{p(x|y)p(y)}{p(x)}=argmax_y p(x|y)p(y)$

当y服从均匀分布时,p(y)相同,公式可简化为$argmax_y p(x|y)$

高斯分布模型与Sigmoid函数的对比:

对于$P(y=1|x)=\frac{p(x|y=1)p(y=1)}{p(x)}$来说,其越接近一侧时,值越接近0;越接近另一侧时,值越接近1。这与Sigmoid函数的情况是类似的。

这里$P(x)=P(x|y=1)p(y=1)+P(x|y=0)p(y=0)$。

相比与logistic,高斯分布是一个更强的假设。即,对于未知的数据,如果假设其服从高斯分布,但是其实际是服从泊松分布的。那么此时logistic回归仍然能取得不错的效果。但如果数据确实服从高斯分布,则利用高斯分布模型可以取得更好的效果。

事实证明,生成算法的优点在于需要更少的数据,logistic回归的优点在于假设更少,模型更健壮。

另,若x|y=1和x|y=0均服从指数分布族,那么p(y=1|x)为logistic回归函数。

朴素贝叶斯

应用:垃圾邮件分类。

若假设y=0或1,1表示是垃圾邮件,0表示不是垃圾邮件。那么首先问题在于,如何确定一封邮件的特征向量。

遍历词典,若该词出现则为1,未出现则为0。

对于一个50000词的词典,其模型应该如下:$p(x|y), x\in{0, 1}^n, n=50000$。那么若采用多项式模型,其共有$2^{50000}-1$个参数(所有参数的和为1)。

若使用朴素贝叶斯模型,则需要做一个非常强的假设(朴素贝叶斯假设):给定y的时候,$x_i$是条件独立的。

即$p(x_1,...,x_{50000}|y)=p(x_1|y)p(x_2|y, x_1)...p(x_{50000}|y, x_1, x_2,...,x_{49999})$

$=p(x_1|y)p(x_2|y)...p(x_{50000}|y)=\prod_{i=1}^{n}p(x_i|y)$

这个假设意味着:某个单词在邮件中是否出现,对其他单词是否出现没有影响。这个假设显然是不符合实际的,但是其仍然是一个有效的算法。这个模型跟贝叶斯网络类似。

模型参数如下:$\phi_{i|y=1}=p(x_i=1|y=1)$,$\phi_{i|y=0}=p(x_i=1|y=0)$,$\phi_y=p(y=1)$。

joint似然性:$L(\phi_y,\phi_{i|y=0},\phi_{i|y=1})=\prod_{i=1}^{m}p(x^{(i)},y^{(i)})$。

则极大似然的参数为:$\phi_{j|y=1}=\frac{\sum_{i=1}^{m}1\{x_{j}^{(i)}=1\wedge y^{(i)}=1\}}{\sum_{i=1}^{m}1\{y^{(i)}=1\}}$(垃圾邮件中某词出现的比例)

$\phi_{j|y=0}=\frac{\sum_{i=1}^{m}1\{x_{j}^{(i)}=1\wedge y^{(i)}=0\}}{\sum_{i=1}^{m}1\{y^{(i)}=0\}}$(非垃圾邮件中某词出现的比例)

$\phi_{y}=\frac{\sum_{i=1}^{m}1\{y^{(i)}=1\}}{m}$(垃圾邮件占所有邮件的比例)

若预测一封邮件是否为垃圾邮件,即需要计算p(y=1|x)

$p(y=1|x)=\frac{p(x|y=1)p(y=1)}{p(x)}=\frac{(\prod_{i=1}^{n}p(x_i|y=1))p(y=1)}{(\prod_{i=1}^{n}p(x_i|y=1))p(y=1)+(\prod_{i=1}^{n}p(x_i|y=0))p(y=0)}$

Laplace平滑

对于$p(y=1)=\frac{\#"1"s}{\#"0"s+\#"1"s}$, 对每一项都加1,即$p(y=1)=\frac{\#"1"s+1}{\#"0"s+1+\#"1"s+1}$

更一般的,如果y可以取k种值,则$p(y=j)=\frac{\sum_{j=1}^{m}1\{y^{(i)}=j\}+1}{m+k}$

朴素贝叶斯的一个变种

$x\in\{1,2,...,k\}$,此时$p(x|y)=\prod_{i=1}^{k}p(x_i|y)$,这里的$x_i$服从多项式分布(代替伯努利分布)。

对于连续的数据,可以先将其离散化。

对于词汇序列的分类(多元伯努利事件模型)

之前的对垃圾邮件的分类方法,丢失了单词出现次数的信息。

多项式事件模型

对于第i个数据(邮件),其特征向量为$\{x_1^{(i)},...,x_{n_i}^{(i)}\}$,其中$x_i$为第i个数据的单词个数。$x_j\in\{1,2,...,50000\}$为单词在字典中的索引。

此时,$p(x,y)=p(y)\prod_{i=1}^{n}p(x_i|y)$,n是邮件的长度。

其参数为:$\phi_{k|y=1}=p(x_j=k|y=1)$

$\phi_{k|y=0}=p(x_j=k|y=0)$

$\phi_y=p(y=1)$

其极大似然函数为$\phi_{k|y=1}=\frac{\sum_{i=1}^{m}1\{y^{(i)}=1\}\sum_{j=1}^{n}1\{x_{j}^{(i)}=k\}}{\sum_{i=1}^{m}1\{y^{(i)}=1\}\cdot n}$(垃圾邮件中词k出现的次数占总垃圾邮件长度的百分比)

$\phi_{k|y=0}=\frac{\sum_{i=1}^{m}1\{y^{(i)}=0\}\sum_{j=1}^{n}1\{x_{j}^{(i)}=k\}}{\sum_{i=1}^{m}1\{y^{(i)}=0\}\cdot n}$(非垃圾邮件中词k出现的次数占总非垃圾邮件长度的百分比)

$\phi_y=\frac{\sum_{i=1}^{m}1\{y^{(i)}=1\}}{m}$(垃圾邮件占总邮件数的百分比)

上述极大似然估计也可以使用Laplace平滑。

非线性分类器:

对于logistic回归$h_{\theta}(x)=\frac{1}{1+e^{-\theta^{T}x}}$,可以认为假设值大于0.5时分类为1,小于0.5时分类为0.

根据之前提到的指数分布族的知识,服从指数分布族的分布都可以看作logistic后验分布。朴素贝叶斯也属于这类模型,所以其本质还是线性分类器。

神经网络:多个Sigmoid函数,value函数与反向传播。

CS229 Lecture 02的更多相关文章

  1. CS229 笔记02

    CS229 笔记02 公式推导 $ {\text {For simplicity, Let }} A, B, C \in {\Bbb {R}}^{n \times n}. $ ​ $ {\bf {\t ...

  2. ML Lecture 0-2: Why we need to learn machine learning?

    在Github上也po了这个系列学习笔记(MachineLearningCourseNote),觉得写的不错的小伙伴欢迎来给项目点个赞哦~~ ML Lecture 0-2: Why we need t ...

  3. CS229 Lecture 01

    CS229 Lecture notes 01 机器学习课程主要分为4部分:监督学习:学习理论:无监督学习:增强学习. $x^{(i)}$表示特征,$y^{(i)}$表示目标,$i=1...m$.m是训 ...

  4. 李宏毅老师机器学习课程笔记_ML Lecture 0-2: Why we need to learn machine learning?

    引言: 最近开始学习"机器学习",早就听说祖国宝岛的李宏毅老师的大名,一直没有时间看他的系列课程.今天听了一课,感觉非常棒,通俗易懂,而又能够抓住重点,中间还能加上一些很有趣的例子 ...

  5. [Stats385] Lecture 01-02, warm up with some questions

    Theories of Deep Learning 借该课程,进入战略要地的局部战斗中,采用红色字体表示值得深究的概念,以及想起的一些需要注意的地方. Lecture 01 Lecture01: De ...

  6. K-Means 聚类算法

    K-Means 概念定义: K-Means 是一种基于距离的排他的聚类划分方法. 上面的 K-Means 描述中包含了几个概念: 聚类(Clustering):K-Means 是一种聚类分析(Clus ...

  7. 【十大经典数据挖掘算法】EM

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maxim ...

  8. 在线最优化求解(Online Optimization)之一:预备篇

    在线最优化求解(Online Optimization)之一:预备篇 动机与目的 在实际工作中,无论是工程师.项目经理.产品同学都会经常讨论一类话题:“从线上对比的效果来看,某某特征或因素对xx产品的 ...

  9. 机器学习 —— 基础整理(五)线性回归;二项Logistic回归;Softmax回归及其梯度推导;广义线性模型

    本文简单整理了以下内容: (一)线性回归 (二)二分类:二项Logistic回归 (三)多分类:Softmax回归 (四)广义线性模型 闲话:二项Logistic回归是我去年入门机器学习时学的第一个模 ...

随机推荐

  1. 深入理解linux-free命令原理(2)

    linux free 命令用法说明 概述: 这篇文章比较深入的从free为起点  折射出的一些概念:比如  buff/cache是怎么一回事[涉及内存页等话题]:  available这个参数与fre ...

  2. 基于LDAP&&Role-based Authorization Strategy实现Jenkins团队权限管理

    在实际工作中,存在多个团队都需要Jenkins来实现持续交付,但是又希望不同团队之间进行隔离,每个项目有自己的view, 只能看到自己项目的jenkins job. 但是,jenkins默认的权限管理 ...

  3. .netcore利用perf分析高cpu使用率

    目录 一 在宿主机运行perf 二 容器内安装perf 1,重新构建镜像 2,下载火焰图生成脚本 3,安装linux-perf 三 CPU占用分析 1,perf record捕获进程 2,生成火焰图 ...

  4. version can neither be null, empty nor blank

    在用mybatis-generator逆向生成mapper和DAO的时候,出现了这个错误. mybatis-generator:generate 原因是在pom.xml中我的mysql依赖没有写版本号 ...

  5. Java基础概念性问题整理,面试题型整理,附带答案详解供参考,首次整理!

    题目目录 Java基础 1.JDK1.8新特性? 2.面向对象和面向过程的区别? 3.什么是值传递和引用传递? 4.什么是不可变对象? 5.讲讲类的实例化顺序? 6.java 创建对象的几种方式 7. ...

  6. 解决Tengine健康检查引起的TIME_WAIT堆积问题

    简介: 解决Tengine健康检查引起的TIME_WAIT堆积问题 一. 问题背景 "服务上云后,我们的TCP端口基本上都处于TIME_WAIT的状态"."这个问题在线下 ...

  7. 【Linux】linux中用vim来比较文件内容不同

    1. 使用vim的比较模式打开两个文件: vim -d file1 file2 或 vimdiff file1 file2 2. 如果已经打开了文件file1,再打开另一个文件file2进行比较: : ...

  8. Linux Shell 编程基础详解——吐血整理,墙裂推荐!

    第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...

  9. URL重定向 - Pikachu

    概述: 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能 ...

  10. RSA共模攻击

    在安恒月赛中碰到一道密码学方向的ctf题 附上源码 from flag import flag from Crypto.Util.number import * p=getPrime(1024) q= ...