CS229 Lecture 02
最近忙成狗,各种意义上。第二章其实之前已经看过了但是已经完全忘记了,于是重新看了一遍当复习。
判别学习算法:直接学习$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的更多相关文章
- CS229 笔记02
CS229 笔记02 公式推导 $ {\text {For simplicity, Let }} A, B, C \in {\Bbb {R}}^{n \times n}. $ $ {\bf {\t ...
- ML Lecture 0-2: Why we need to learn machine learning?
在Github上也po了这个系列学习笔记(MachineLearningCourseNote),觉得写的不错的小伙伴欢迎来给项目点个赞哦~~ ML Lecture 0-2: Why we need t ...
- CS229 Lecture 01
CS229 Lecture notes 01 机器学习课程主要分为4部分:监督学习:学习理论:无监督学习:增强学习. $x^{(i)}$表示特征,$y^{(i)}$表示目标,$i=1...m$.m是训 ...
- 李宏毅老师机器学习课程笔记_ML Lecture 0-2: Why we need to learn machine learning?
引言: 最近开始学习"机器学习",早就听说祖国宝岛的李宏毅老师的大名,一直没有时间看他的系列课程.今天听了一课,感觉非常棒,通俗易懂,而又能够抓住重点,中间还能加上一些很有趣的例子 ...
- [Stats385] Lecture 01-02, warm up with some questions
Theories of Deep Learning 借该课程,进入战略要地的局部战斗中,采用红色字体表示值得深究的概念,以及想起的一些需要注意的地方. Lecture 01 Lecture01: De ...
- K-Means 聚类算法
K-Means 概念定义: K-Means 是一种基于距离的排他的聚类划分方法. 上面的 K-Means 描述中包含了几个概念: 聚类(Clustering):K-Means 是一种聚类分析(Clus ...
- 【十大经典数据挖掘算法】EM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maxim ...
- 在线最优化求解(Online Optimization)之一:预备篇
在线最优化求解(Online Optimization)之一:预备篇 动机与目的 在实际工作中,无论是工程师.项目经理.产品同学都会经常讨论一类话题:“从线上对比的效果来看,某某特征或因素对xx产品的 ...
- 机器学习 —— 基础整理(五)线性回归;二项Logistic回归;Softmax回归及其梯度推导;广义线性模型
本文简单整理了以下内容: (一)线性回归 (二)二分类:二项Logistic回归 (三)多分类:Softmax回归 (四)广义线性模型 闲话:二项Logistic回归是我去年入门机器学习时学的第一个模 ...
随机推荐
- javabean 数组对应yml中的写法
gate-info: gate-list: - channel: channel-one io-flag: I - channel: channel-two io-flag: E 上面的是 yml 文 ...
- DBF 文件 ORACLE 数据库恢复
DBF 文件 ORACLE 数据库恢复 清·魏源<庸易通义>:"至道问学之有知无行,分温故为存心,知新为致知,而敦厚为存心,崇礼为致知,此皆百密一疏." 起因 在我们的 ...
- Memcached、Redis、Mongodb比较
Memcached(内存Cache) Memcached 是一个高性能的分布式内存对象缓存系统.通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库 ...
- 攻防世界 - Crypto(一)
base64: 根据题目base64可知编码方式,下载附件发现是一个txt文件,把内容用工具解码就彳亍了,即可得到flag, flag: cyberpeace{Welcome_to_new_World ...
- SAP GUI用颜色区分不同的系统
对于经常打开多个窗口的SAP用户,有时候可能同时登录了生产机.测试机和开发机,为了避免误操作,比如在测试要执行的操作,结果在生产机做了,结果可想而知. 虽然可以通过右下角查看再去判断,但是总是没有通过 ...
- 视图V_160M和表T_160M的维护
今天发现一个视图,通过SM30居然无法维护,这个视图就是V_160M,表为T_160M,是采购相关的系统消息, 不过别着急,有办法维护的,呵呵,看下面: 试一试OMCQ这个事物代码吧! 分享出来,给需 ...
- SAP 修改表和表中数据
平时修改表中数据的方式有一下几种: 1.一般就是通过SE11或者是SE16进去,找到那条记录,然后将模式变成EDIT,然后修改保存. 2.通过SQL语句在程序中实现数据库表的修改操作 3.通过SE16 ...
- php压缩文件夹并下载到本地
/** * @param $path 要压缩的文件夹路径 * @param $filename 要生成的压缩包名称 */ public function create_zip($path,$filen ...
- [Usaco2015 dec]Breed Counting
原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=4397 用线段树维护区间和即可.时间复杂度\(O((N+Q)logN)\). #includ ...
- 在.NET Core 中实现健康检查
.NET Core中提供了开箱即用的运行状况检查,首先,我将在.NET Core API应用程序中执行运行状况检查,接下来,我们将使用DbContext集成SQL Server或数据库的运行状况检查, ...