Python机器学习:最大熵模型

信息论里,熵是可以度量随机变量的不确定性的,已经证明的:当随机变量呈均匀分布的时候,熵值最大,一个有序的系统有着较小的熵值,无序系统的熵值则较大。

机器学习里面,最大熵原理假设:描述一个概率分布的时候,在满足所有约束条件的情况下,熵值最大的模型是最好的。

我们假设:对于离散随机变量x,假设x有M哥取值,记p_i=P(x=i),那么他的熵就被定义为:

H(p)=-\sum_{i=1}^{M}p_i \ln p_i

对于连续变量x,假设他的概率密度函数是f(x),那么,他的熵就是:

H(f)=\int f(x)\ln f(x)

首先,看最大熵模型的导出:

和之前一样,给定一个大小为m的集合:D=\left \{ (x_1,y_1), (x_2,y_2),\cdots , (x_m,y_m)\right\}假设输入变量为X,输出变量是Y,用频率来代替概率,可以估计出X的边缘分布和(X,Y)的联合分布为:

\left\{\begin{matrix} \widetilde{p}(x,y)=\frac{N_{x,y}}{m} & \\ \widetilde{p}(x)=\frac{N_x}{m}& \end{matrix}\right.

其中,N_{x,y}N_{x}分别表示训练样本中(X=x,Y=y)的出现的频数和X=x出现的频数,在样本量足够大的情况下,我们可以认为\widetilde{p}(x)反映了真实的样本分布,基于这个,最大熵模型可以用条件熵来进行建模,而非最大熵原理中一般意义上的熵,这样就间接起到了缩小模型假设空间的作用。

H(p)=-\sum_{(x,y)\in D}\widetilde{p}(x)P(y|x)\log P(y|x)

根据定义,最大熵模型是在满足一定约束条件下熵最大的模型,其思路就是:从样本集合在使用特征函数f(x,y)来抽取特征,然后希望特征函数f(x,y)关于经验联合分布\widetilde{p}(x,y)的期望,等于特征函数f(x,y)关于模型p(y|x)和经验边缘分布\widetilde{p}(x)的期望。

特征函数关于经验联合分布的期望定义为:

E_{\widehat{p}}(f)=\sum \widehat{p}(x,y)f(x,y)

 特征函数f(x,y)关于模型p(y|x)和经验边缘分布\widetilde{p}(x)的期望:

E_{p}(f)=\sum_{(x,y)\in D}\widetilde{p}(x)p(y|x)f(x,y)

也就是希望:

\widetilde{p}(x,y)=\widetilde{p}(x)p(y|x)

我们称p(x,y)=p(x)p(y|x)为乘法准则,最大熵模型的约束希望在不同的特征函数f(x,y)下通过估计p(y|x)的参数来满足乘法准则。

那么,最大熵模型的学习过程就可以转换成一个最优化问题的求解过程,就是在给定若干特征提取函数f_i(x,y),i=1,2,3,\cdots,M以及y的所有可能值集合C的条件下,求解:

\left\{\begin{matrix} max H(p)=-\sum_{(x,y)\in D}\widetilde{p}(x)p(y|x)\log p(y|x) & \\ s.t. E_{\widetilde{p}}(f_i)=E_p(f_i)&\\ \sum_{y\in C}p(y|x)=1& \end{matrix}\right.

把这个最大化问题转换成最小化问题,即min-H(p),可以用拉格朗日乘子法来求解:

Lag(p,\omega)=-H(p)+\omega_0 (1-\sum_{y\in C}p(y|x))+\sum_{i=1}^{M}\omega_i(E_p(f_i)-E_{\widetilde{p}})(f_i)

其中的Omega是映入的拉格朗日乘子,通过最优化Lag(p,\omega),可以得到:

p_{\omega}(y|x)=\frac{1}{Z_{\omega(x)}}e^{\sum_{i=1}^{M}\omega_if_x(xy)}

其中,

Z_{\omega}(x)=\sum_{y\in C}e^{\sum_{i=1}^{M}\omega_if_i(x,y)}

最大熵模型和逻辑回归之间的关系:对于多分类问题(k不小于2),我们可以定义f_i(x,y=c_k)=\lambda_ik x_i,那么:

p_{\omega}(y=c_k|x)=\frac{1}{Z_\omega(x)}e^{\sum_{i=1}^{M} \omega_i f_i(x,y)}=\frac{1}{Z_\omega(x)}e^{a_k^{T}x}

其中:

\left\{\begin{matrix} Z_\omega(x)=\sum_{y \in C}(\sum_{i=1}^{M}\omega_i f_i(x,y))=\sum_{i=1}^{K}e^{a_k^tX}& \\ a_k^T=(\omega_1\lambda_{1k},\omega_2\lambda_{2k},\cdots,\omega_M\lambda_{Mk})^T& \end{matrix}\right.

这时,,最大熵模型等价于多分类逻辑回归。

最大熵模型可以通过拟牛顿法,梯度下降法等方法学习。

然后我们来看一下书上给额度利用逻辑回归模型实现乳腺癌的预测:

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
cancer=load_breast_cancer()
x_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.2)
model=LogisticRegression()
model.fit(x_train,y_train)
train_score=model.score(x_train,y_train)
test_score=model.score(x_test,y_test)
print("train score:{train_score:.6f};test score:{test_score:.6f}".format(train_score=train_score,test_score=test_score))
图1:结果展示

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/6060.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HAL库】HAL库STM32cubemx快速使用

文章目录整体框图一、基础工程1 新建工程2 配置RCC3 配置SYS4 工程设置5 生成代码6 keil设置下载&复位二、必备外设1 目录规范2 LED2 RTC3 USART4 KEY三、其他外设1 OLED(模拟IIC、模拟SPI)2 BH1750光强检测3 MQ2烟雾检测3 MQ4甲醛检测4 DHT11温湿度…

基于蓄电池进行调峰和频率调节研究【超线性增益的联合优化】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…

第04章_运算符

第04章_运算符 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公…

该不该放弃嵌入式,单片机这条路?

本文几乎浓缩了我从业10几年的精华,内容涵盖我转行、打工、创业的经历。 建议从头到尾不要错过一字一句,因为字里行间的经验之谈,或许能成为你人生重要转折点。 全文3700多字,写了6个多小时,如果你赶时间,建…

【17】核心易中期刊推荐——深度学习 | 遥感图像处理

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

【学会这几个VSCode插件,让你的Python代码更优秀】

VSCode(Visual Studio Code)是由微软研发的一款免费、开源的跨平台文本(代码)编辑器,一般主要用于轻量级的编程代码工作,就非常适合Python,同时在前端开发方面也有举足轻重的地位。但如果想用于…

蓝桥杯集训·每日一题Week3

Trie AcWing 835. Trie字符串统计(算法基础课) 思路: Trie是一种高效地存储和查找字符串集合的数据结构,适用于字符串不太复杂的情况。其形状是一个以0为根节点的树,查询和插入的效率都比较高,有插入和查询两种操作。…

制造业的寒冬真的要来了吗?

制造业的寒冬真的要来了吗?其实当前,我国制造业发展水平是处于全球第三阵列,排名第四的: 但能处第三序列靠前,还是因为“规模发展”起了重要支撑——依靠规模拉动发展。所以如果从“质量效益”、“结构优化”、“持续发…

【AI探索】我问了ChatGPT几个终极问题

终于尝试了一把ChatGPT的强大之处,问了一下关心的几个问题: chatGPT现在在思考吗?有没有什么你感兴趣的问题? 你认为AI会对人类产生哪些方面的影响? 你对人类所涉及到的学科有了解吗?你认为在哪些方面与人类…

JetPack Compose之Modifier修饰符

前言 在Compose中,每一个组件都是带有Compose注解的函数,被称为Composable。Compose已经预置了很多的Compose UI组件,这些组件都是基于Material Design规范设计的,例如Button,TextField,TopAPPBar等。在布…

IOC、AOP、和javca面试题

一、 1、控制反转(IOC) 将创建管理对象的工作交给容器来做。在容器初始化(或在某个时间节点)通过反射机制创建好对象,在使用时直接从容器中获取。 控制反转:将对象的控制权反过来交给容器管理。 IOC实现…

既然有http 请求,为什么还要用rpc调用?

先弄明白什么是RPC。 RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之…

【面试】Java并发编程面试题

文章目录基础知识为什么要使用并发编程多线程应用场景并发编程有什么缺点并发编程三个必要因素是什么?在 Java 程序中怎么保证多线程的运行安全?并行和并发有什么区别?什么是多线程多线程的好处多线程的劣势:线程和进程区别什么是…

基于java+ssm+vue病人跟踪治疗信息管理系统的搭建及源码

源码获取方式见文末 一.需求简介 病人治疗信息管理系统采用B/S模式,实现安全、快捷、高效的病人跟踪治疗信息管理。传统手工管理模式效率低下,已无法满足病人需求。 信息化时代的到来,使得开发病人跟踪治疗信息管理系统成为必然。 本系统采…

Linux 串口RS232/485/GPS 驱动实验(移植minicom)

目录Linux 下UART 驱动框架I.MX6U UART 驱动分析硬件原理图分析RS232 驱动编写移植minicomRS232 驱动测试RS232 连接设置minicom 设置RS232 收发测试RS485 测试RS485 连接设置RS485 收发测试GPS 测试GPS 连接设置GPS 数据接收测试串口是很常用的一个外设,在Linux 下…

python入门(一)conda的使用,创建修改删除虚拟环境,以及常用命令,配置镜像

文章目录背景1.conda的下载地址:2.安装3.执行常用命令1)查看版本2)查看所有虚拟环境3)创建虚拟环境4)激活虚拟环境5)关闭虚拟环境6)删除虚拟环境7)创建python2.7的虚拟环境8)使用pyt…

命令行上的数据科学第二版 二、开始

原文:https://datascienceatthecommandline.com/2e/chapter-2-getting-started.html 贡献者:Ting-xin 在这一章中,我需要确定你能够利用命令行做数据科学,为此你需要能满足一些条件。条件主要分为三个部分:&#xff08…

SQLyog图形化界面工具【超详细讲解】

目录 一、SQLyog 介绍 二、SQLyog 社区版下载 三、SQLyog 安装 1、选择Chinese后点击OK 2、点击“下一步” 3、选择“我接受”后点击“下一步” 4、点击“下一步” 5、修改安装位置(尽量不要安装在C盘),点击“安装” 6、安装后点击“…

剥茧抽丝,细数模块化的前世今生

写在前面 本篇是前端工程化打怪升级的第 1 篇,关注专栏 | 小册传送门 | 案例代码 近几年,时常会感叹,前端,发展的太迅猛了。日新月异的新概念,异彩纷呈的新思想泉水般涌出;前端项目的复杂度、开发成本、维护…

Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档

原文:https://automatetheboringstuff.com/2e/chapter15/ PDF 和 Word 文档是二进制文件,这使得它们比纯文本文件复杂得多。除了文本,它们还存储大量的字体、颜色和布局信息。如果您想让您的程序读写 PDF 或 Word 文档,您需要做的…
最新文章