接上一次生成式模型,本文主要通过Logistics Regression讲解判别式模型

由上文生成式模型的讲解,我们大致了解了生成式模型,首先通过假设某些条件求出了联合概率密度分布,再通过贝叶斯公式求出相应的分类概率。

判别式模型则是完全通过数据进行分析,没有任何人为的假设。

首先我们看一下上文中最后推出的后验概率:
P(blue∣x)=P(x∣blue)P(blue)P(x∣blue)P(blue)+P(x∣green)P(green)=11+P(x∣green)P(green)P(x∣blue)P(blue)\begin{aligned} P(blue|x) &= \frac{P(x|blue)P(blue)}{P(x|blue)P(blue)+P(x|green)P(green)}\\ &= \frac{1}{1+\frac{P(x|green)P(green)}{P(x|blue)P(blue)}} \end{aligned} P(blue∣x)​=P(x∣blue)P(blue)+P(x∣green)P(green)P(x∣blue)P(blue)​=1+P(x∣blue)P(blue)P(x∣green)P(green)​1​​

此时我们令 z=lnP(x∣blue)P(blue)P(x∣green)P(green)z=ln\frac{P(x|blue)P(blue)}{P(x|green)P(green)}z=lnP(x∣green)P(green)P(x∣blue)P(blue)​,求出P(x∣green)P(green)P(x∣blue)P(blue)=e−z\frac{P(x|green)P(green)}{P(x|blue)P(blue)} = e^{-z}P(x∣blue)P(blue)P(x∣green)P(green)​=e−z
带入P(blue∣x)P(blue|x)P(blue∣x)变为

P(blue∣x)=11+e−zP(blue|x) =\frac{1}{1+e^{-z}}P(blue∣x)=1+e−z1​

学过的同学一看就知道这就是Logistics distribution。这个图像估计都看腻了,我就不讲解了。

目前的问题就是需要知道我们假设的 zzz 是什么样的。z=lnP(x∣blue)P(blue)P(x∣green)P(green)z=ln\frac{P(x|blue)P(blue)}{P(x|green)P(green)}z=lnP(x∣green)P(green)P(x∣blue)P(blue)​。
此处我直接写出结论,不再进行推导了。说明一下如何推导,我们可以假设P(x∣blue),P(x∣green)P(x|blue),P(x|green)P(x∣blue),P(x∣green)服从某一种分布。将其分布带入到后验概率。即可求出

z=wx+bz = wx+bz=wx+b

这种样式。(无论用哪种分布,都会得到这样的形式,这样就不要人为假设服从哪种分布了
既然这样, 那我们直接将函数变为

P(blue∣x)=11+e−(wx+b)P(blue|x) =\frac{1}{1+e^{-(wx+b)}}P(blue∣x)=1+e−(wx+b)1​

目前我们的任务是如何求出 w,bw,bw,b 。我们只有样例数据,当然只能利用样例数据来求了。。那怎么求呢,因为数据有自变量取值,样例分类。—— 那我们就可以定义一个损失函数,利用梯度下降求出最优的 w,bw,bw,b

首先利用最大似然估计

H(w,b)=∏i=1N(yiP(blue∣xi)+(1−yi)(1−P(blue∣xi)))H(w,b) = \prod_{i=1}^{N}(y^iP(blue|x^i)+(1-y^i)(1-P(blue|x^i)))H(w,b)=i=1∏N​(yiP(blue∣xi)+(1−yi)(1−P(blue∣xi)))

遇到连乘的问题首先取 lnlnln 变为连加。

H(w,b)=∑i=1Nln(yiP(blue∣xi)+(1−yi)(1−P(blue∣xi)))H(w,b) = \sum_{i=1}^{N} ln (y^iP(blue|x^i)+(1-y^i)(1-P(blue|x^i)))H(w,b)=i=1∑N​ln(yiP(blue∣xi)+(1−yi)(1−P(blue∣xi)))

目标函数变为:

w′,b′=arg⁡max⁡w,bH(w,b)w^{'},b^{'} = \mathop{\arg \max_{w,b} H(w,b)}w′,b′=argw,bmax​H(w,b)

为了好看,改一下:

w′,b′=arg⁡min⁡w,b−H(w,b)w^{'},b^{'} = \mathop{\arg \min_{w,b} -H(w,b)}w′,b′=argw,bmin​−H(w,b)

接下来就可以利用梯度下降了。

此处用梯度下降

w′=w−η∂H(w,b)∂wb′=b−η∂H(w,b)∂b\begin{aligned} w^{'} &= w - \eta \frac{\partial H(w,b)}{\partial w} \\ b^{'} &= b -\eta \frac{\partial H(w,b)}{\partial b} \end{aligned} w′b′​=w−η∂w∂H(w,b)​=b−η∂b∂H(w,b)​​

将H(w,b)H(w,b)H(w,b)代入可得

w′=w−η∑i=1n(p(xi)−yi)∗xib′=b−η∑i=1np(xi)−yi\begin{aligned} w^{'} &= w - \eta \sum_{i=1}^{n} ( p(x^i)- y^i )*x^i \\ b^{'} &= b -\eta \sum_{i=1}^{n} p(x^i) - y^i \end{aligned} w′b′​=w−ηi=1∑n​(p(xi)−yi)∗xi=b−ηi=1∑n​p(xi)−yi​

最终求得 w∗w^{*}w∗ 和 b∗b^{*}b∗

迭代10000次得到的结果为
w=[−1.481021231.37684754]b=3.773931680340649\begin{aligned} w &= [-1.48102123 1.37684754] \\ b &= 3.773931680340649 \end{aligned} wb​=[−1.481021231.37684754]=3.773931680340649​
画出P(blue∣x)P(blue|x)P(blue∣x)的等高线可以看出在概率为0.5时还是能较好的分开两组数据

可以看出判别式模型中,完全是依据数据进行的分析,没有添加任何人为的假设(对于任意的分布zzz都满足z=wx+bz=wx+bz=wx+b的形式),直接根据贝叶斯后验概率进行的推导。

至此两种模型都讲完,这两者模型各有优缺点,当数据很少的时候,或许生成式模型中人为加入的限制更加有利于数据的分类,这会使得拟合效果更好。


附上代码:

# classification
# only use part[0] & part[1]
# @author Hongchuan CAO
# @date 2019-7-8from sklearn import datasets
import numpy as np
import matplotlib.pyplot as pltclass SGD(object):def __init__(self):self.iris = datasets.load_iris()self.part = [[], [], []]def classify(self):for i in range(len(self.iris.target)):self.part[self.iris.target[i]].append(self.iris.data[i, :2])# change list to arrayfor i in range(0, 3):self.part[i] = np.array(self.part[i])print(self.part[0][1])def gradient(self):w = np.array([1., 1.])b = 4learn_ratio = 0.001iteration = 10000for j in range(iteration):sum_w = np.array([0., 0.])sum_b = 0for i in range(len(self.part[0])):sum_w += (1.0 / (1 + np.exp(-1 * (np.dot(w, self.part[0][i].T) + b))) - 1) * self.part[0][i]sum_b += (1.0 / (1 + np.exp(-1 * (np.dot(w, self.part[0][i].T) + b))) - 1)for i in range(len(self.part[1])):sum_w += (1.0 / (1 + np.exp(-1 * (np.dot(w, self.part[1][i].T) + b)))) * self.part[1][i]sum_b += (1.0 / (1 + np.exp(-1 * (np.dot(w, self.part[1][i].T) + b))))w = w - learn_ratio * sum_w / (len(self.part[0]) + len(self.part[1]))b = b - learn_ratio * sum_b / (len(self.part[0]) + len(self.part[1]))print(j, '-----------')print(w,b)return w, bdef ff(self, w, b, x):return 1.0 / (1 + np.exp(-1 * (np.dot(w, x.T) + b)))def plot1(self):w, b = self.gradient()xx = [x for x in np.arange(2, 8, 0.1)]yy = [y for y in np.arange(1, 7, 0.1)]Z = [[self.ff(w, b, np.array([x, y])) for x in xx] for y in yy]X, Y = np.meshgrid(xx, yy)cntr1 = plt.contourf(X, Y, Z)plt.clabel(cntr1, colors='k', inline_spacing=3, fmt='%.1f', fontsize=10)plt.plot(self.part[0][:, 0], self.part[0][:, 1], 'b.', label='0')plt.plot(self.part[1][:, 0], self.part[1][:, 1], 'g.', label='1')# plt.plot(self.part[2][:,0], self.part[2][:,1], 'r.', label='2')plt.legend()plt.xlabel('attribute0')plt.ylabel('attribute1')plt.show()if __name__ == '__main__':obj = SGD()obj.classify()obj.plot1()

机器学习——判别式/生成式相关推荐

  1. 机器学习--判别式模型与生成式模型

    原文地址为:机器学习--判别式模型与生成式模型 一.引言 本材料参考Andrew Ng大神的机器学习课程 http://cs229.stanford.edu 在上一篇有监督学习回归模型中,我们利用训练 ...

  2. 【机器学习】生成式模型和判别式模型

    在机器学习中,对于有监督学习可以将其分为两类模型:判别式模型和生成式模型.判别式模型是针对条件分布建模,而生成式模型则针对联合分布进行建模. 1.抛砖引玉 假设有训练数据(X,Y),X是属性集合,Y是 ...

  3. 机器学习:生成式模型与判别式模型

    监督学习的任务就是学习一个模型,应用这一模型,对给定的输入预测相应的输出.这个模型的一般形式为决策函数: 或者条件概率分布: . 监督学习方法又分为生成方法和判别方法,对应生成式模型(Generati ...

  4. 机器学习_生成式模型与判别式模型

    从概率分布的角度看待模型.给个例子感觉一下: 如果我想知道一个人A说的是哪个国家的语言,我应该怎么办呢? 生成式模型 我把每个国家的语言都学一遍,这样我就能很容易知道A说的是哪国语言,并且C.D说的是 ...

  5. 机器学习 之 生成式模型 VS 判别式模型

    [摘要] 判别式模型,就是只有一个模型,你把测试用例往里面一丢,label就出来了,如SVM.生成式模型,有多个模型(一般有多少类就有多少个),你得把测试用例分别丢到各个模型里面,最后比较其结果,选择 ...

  6. 机器学习:生成式模型和判别式模型

    决策函数Y=f(X)与条件概率分布P(Y|X) 决策函数Y=f(x):输入一个x,它就输出一个y值,这个y与一个阈值比较,根据比较结果判定x属于哪个类别. 条件概率分布P(y|x):输入一个x,它通过 ...

  7. 【机器学习】生成式神经网络

    [生成式模型] [自动编码器] 自动编码器是一种无监督(其特点是训练样本数据的标记信息未知,因此其目标往往是要通过对无标签训练样本的学习来揭示出数据的内在规律)的神经网络模型,其目标是通过训练网络忽略 ...

  8. 【机器学习】生成式对抗网络模型综述

    生成式对抗网络模型综述 摘要 生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉.自然语言处理.半监督学习等重要领域.生成式对抗网络最最直接的应用是数据的生成,而数据 ...

  9. 机器学习中的判别式模型和生成式模型

    首发于人工智能 写文章 机器学习中的判别式模型和生成式模型 Microstrong 微信公众号:Microstrong,人工智能算法工程师 已关注 78 人赞同了该文章 目录: 基本概念 用例子说明概 ...

最新文章

  1. python123程序设计题说句心里话_用c++写一个简单的计算器程序
  2. php 判断来源 微信客户端_PHP判断手机端、PC端 、微信代码实例
  3. 启明云端分享| 2.4寸磁编码旋钮方案智能屏
  4. [搜索]Trie树的实现
  5. python创建矩阵_在Python中创建矩阵的Python程序
  6. 计算机分数的简便运算,分数的简便运算和分数的解方程
  7. 经验分享:java批量读取txt文件入库
  8. 证明一个距离空间是完备的
  9. PMP模拟题200道,中英双对照,附答案解析
  10. 避免社会工程和网络钓鱼攻击
  11. Vue项目:电商后台管理管理系统
  12. 你的第一桶金是如何赚到的?
  13. 腾讯文档表格内存优化总结
  14. python画聚类树状图_如何在scipy/matplotlib中绘制和标注层次聚类树状图
  15. Redis从精通到入门——数据类型Zset实现源码详解
  16. 利用python爬取实习僧网站上的数据
  17. 纤亿通谈大型数据中心互联之T级光传输解决方案
  18. 在家无聊就重装个系统吧 三分钟教你重装安装系统
  19. RTOS 操作系统学习笔记
  20. 彻底解决不要脸的360更改浏览器主页

热门文章

  1. 总结下利用python赚外快的方法,在闲余时间月赚2k~5k,从入门到精通的教程在最下面自取!
  2. 研究生如何选择适合自己的导师
  3. db2数据库备份与恢复命令
  4. 解决google模拟手机浏览器,鼠标指针消失的问题
  5. javascript mosh object
  6. Max杀毒,最强插件,解决清理各种max病毒各种弹窗提示
  7. 分布式虚拟交换机和标准交换机
  8. c/c++中cons的不同
  9. java填充多边形_JAVA绘制填充多边形输出文字保存成图片的示例
  10. DatePicker和TimePicker