Python机器学习算法实现

Author:louwill

Machine Learning Lab

最大熵原理(Maximum Entropy Principle)是一种基于信息熵理论的一般原理,在机器学习领域也有着广泛的应用价值。基于最大熵原理确定的分类模型也叫最大熵模型。所谓信息熵,即一种描述信息不确定程度的量。而最大熵方法认为熵在由已知信息得到的约束条件下的最大化概率分布是充分利用已知信息并对未知部分作最少的假定的概率分布。

信息熵

已知一个离散型随机变量




,其信息熵可以定义为:






为连续型随机变量,其信息熵可定义为:























其中







为分布函数的概率密度函数,










为离散点的概率分布。最大熵方法就是在给定约束条件下求得


















使得熵




达到最大值,其本质上就是一个求解约束的最优化问题。

最大熵模型

假设目标分类模型是一个条件概率分布









,其中




表示输入,




表示输出,在给定输入




的情况下,以条件概率









输出




。在给定训练数据集的情况下,学习的目标就是选择最大熵模型作为目标模型。
在给定数据集的情况下,可以确定其联合概率分布









的经验分布














和边缘概率分布







的经验分布












。然后我们用特征函数









来描述输入输出之间的一个事实,









的定义为一个0-1函数,即









满足某一事实时取值为1,否则取值为0。
特征函数









关于经验分布














的期望值为

















:

特征函数









关于模型









经验分布












的期望值为













如果模型能够从已知数据中获取足够的信息,我们就可以假设上述两个期望值相等,即有:





























具体地:

上式即可作为最大熵模型学习的约束条件,如果有




个特征函数,即有




个约束条件。

假设满足上述特征函数构造的约束条件的模型集合为




,定义在模型集合中的条件熵







最大的模型即为最大熵模型:

给定特征函数条件和概率约束条件的情况下,最大熵模型的学习等价于求解约束最优化问题:




















































将上述最大化问题改写为最小化问题:






















































通过拉格朗日乘子法可将上述约束优化转化为无约束最优化问题,并将其原始问题转化为对偶问题进行求解,定义拉格朗日函数









:

最优化的原始问题为:

























其对偶问题为:
























针对该对偶问题的求解,我们可以先尝试求解其内部的极小化问题

















,令:

其中:





















求偏导并令为0,可解得:

其中:

由式












表示的模型即为最大熵模型。

然后即可求解外部极大化问题:














将其解记为




























最大熵模型可以归结为对偶函数







的极大化,优化求解得到的




































即为最终的最大熵模型。

最大熵算法实现

最大熵模型求解本质在于求解凸优化问题。本节就不针对该求解过程提供手写算法实现。借助于maxentropy库我们看以下最大熵模型的基本实现方式。

基于maxentropy的一个简单实现案例:

import numpy as np
import maxentropysamplespace = np.arange(6) + 1
model = maxentropy.Model(samplespace)
model.verbose = True# 设置特征期望值
K = [4.5]
# 拟合最大熵模型
model.fit(f, K)

求解过程如下:

查看拟合参数:

model.params
array([ 0.37354745])

实际求解时模型也可能存在不收敛的情况,可以尝试像BFGS等不同的优化算法进行求解。

参考资料:

李航 统计学习方法 第二版

https://pypi.org/project/maxentropy/

往期精彩:

数学推导+纯Python实现机器学习算法21:马尔科夫链蒙特卡洛

数学推导+纯Python实现机器学习算法20:LDA线性判别分析

数学推导+纯Python实现机器学习算法19:PCA降维

数学推导+纯Python实现机器学习算法18:奇异值分解SVD

数学推导+纯Python实现机器学习算法17:XGBoost

数学推导+纯Python实现机器学习算法16:Adaboost

数学推导+纯Python实现机器学习算法15:GBDT

数学推导+纯Python实现机器学习算法14:Ridge岭回归

数学推导+纯Python实现机器学习算法13:Lasso回归

数学推导+纯Python实现机器学习算法12:贝叶斯网络

数学推导+纯Python实现机器学习算法11:朴素贝叶斯

数学推导+纯Python实现机器学习算法10:线性不可分支持向量机

数学推导+纯Python实现机器学习算法8-9:线性可分支持向量机和线性支持向量机

数学推导+纯Python实现机器学习算法7:神经网络

数学推导+纯Python实现机器学习算法6:感知机

数学推导+纯Python实现机器学习算法5:决策树之CART算法

数学推导+纯Python实现机器学习算法4:决策树之ID3算法

数学推导+纯Python实现机器学习算法3:k近邻

数学推导+纯Python实现机器学习算法2:逻辑回归

数学推导+纯Python实现机器学习算法1:线性回归

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群请扫码进群:

【机器学习基础】数学推导+纯Python实现机器学习算法22:最大熵模型相关推荐

  1. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

  2. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...

  3. 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...

  4. 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法

    Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...

  5. 【机器学习基础】数学推导+纯Python实现机器学习算法26:随机森林

    Python机器学习算法实现 Author:louwill Machine Learning Lab 自从第14篇文章结束,所有的单模型基本就讲完了.而后我们进入了集成学习的系列,整整花了5篇文章的篇 ...

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文介绍GBDT系列的最后一个强大的工程实现模型--CatBoost.CatBoost与XGBoo ...

  7. 【机器学习基础】数学推导+纯Python实现机器学习算法24:LightGBM

    Python机器学习算法实现 Author:louwill Machine Learning Lab 第17讲我们谈到了竞赛大杀器XGBoost,本篇我们来看一种比XGBoost还要犀利的Boosti ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法23:kmeans聚类

    Python机器学习算法实现 Author:louwill Machine Learning Lab 聚类分析(Cluster Analysis)是一类经典的无监督学习算法.在给定样本的情况下,聚类分 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法21:马尔可夫链蒙特卡洛...

    Python机器学习算法实现 Author:louwill Machine Learning Lab 蒙特卡洛(Monte Carlo,MC)方法作为一种统计模拟和近似计算方法,是一种通过对概率模型随 ...

最新文章

  1. PHP运算符与表达式
  2. ==和equals()的区别
  3. 80%开发者都不知道的以太坊骚操作:「事件」和「日志」还可以这么玩!
  4. python中导入模块的方式_Python中几种导入模块的方式总结
  5. JVM运行时结构、Java内存管理、JVM实例、HotSpot VM对象的创建、内存布局和访问定位
  6. WEB前端学习四 js什么是原始类型
  7. 制定交叉编译工具_配置交叉编译工具链-嵌入式Linux
  8. .NET中的设计模式---由吃龙虾想到的
  9. 用masterpage后页面定位
  10. 软件工程基础之需求分析
  11. js获取image中src属性的方法语句
  12. Linux环境下一种比较有用的多线程程序调试技巧
  13. HDU 5411 CRB and Puzzle(矩阵快速幂+可达矩阵)
  14. Java参数校验工具validation
  15. c 文件中调用 cpp 中函数
  16. 考研词汇测试软件,考研词汇 - 在线打字测试(dazi.kukuw.com)
  17. pg_repack 处理表和索引的膨胀
  18. 如何在 SAP UI5 应用里显示 PDF 文件试读版
  19. python高分书籍推荐_如果只推荐一本 Python 书,我要 Pick 它!
  20. MES系统中常见的数据采集方法

热门文章

  1. layui selec下的option出现之前的渲染
  2. Keras处理TIFF图像
  3. logback与log4j比较
  4. JavaScript中随着鼠标拖拽而移动的块
  5. 【UVA1378】A Funny Stone Game (博弈-求SG值-输出方案)
  6. QTP自动化测试框架的基础知识
  7. sqlserver 实现数据库全文检索
  8. 真正的取真实IP地址及利弊Asp.net
  9. android kotlin面试题,Kotlin面试25题
  10. 论文的“面子”与“里子”