关于最大熵模型的介绍请看:http://www.cnblogs.com/hexinuaa/p/3353479.html

以下是GIS训练算法的python实现,代码不到100行。

from collections import defaultdict

import math

class MaxEnt(object):

def __init__(self):

self.feats = defaultdict(int)

self.trainset = []

self.labels = set()

def load_data(self,file):

for line in open(file):

fields = line.strip().split()

# at least two columns

if len(fields) < 2: continue

# the first column is label

label = fields[0]

self.labels.add(label)

for f in set(fields[1:]):

# (label,f) tuple is feature

self.feats[(label,f)] += 1

self.trainset.append(fields)

def _initparams(self):

self.size = len(self.trainset)

# M param for GIS training algorithm

self.M = max([len(record)-1 for record in self.trainset])

self.ep_ = [0.0]*len(self.feats)

for i,f in enumerate(self.feats):

# calculate feature expectation on empirical distribution

self.ep_[i] = float(self.feats[f])/float(self.size)

# each feature function correspond to id

self.feats[f] = i

# init weight for each feature

self.w = [0.0]*len(self.feats)

self.lastw = self.w

def probwgt(self,features,label):

wgt = 0.0

for f in features:

if (label,f) in self.feats:

wgt += self.w[self.feats[(label,f)]]

return math.exp(wgt)

"""

    calculate feature expectation on model distribution

    """

def Ep(self):

ep = [0.0]*len(self.feats)

for record in self.trainset:

features = record[1:]

# calculate p(y|x)

prob = self.calprob(features)

for f in features:

for w,l in prob:

# only focus on features from training data.

if (l,f) in self.feats:

# get feature id

idx = self.feats[(l,f)]

# sum(1/N * f(y,x)*p(y|x)), p(x) = 1/N

ep[idx] += w * (1.0/self.size)

return ep

def _convergence(self,lastw,w):

for w1,w2 in zip(lastw,w):

if abs(w1-w2) >= 0.01:

return False

return True

def train(self, max_iter =1000):

self._initparams()

for i in range(max_iter):

print 'iter %d ...'%(i+1)

# calculate feature expectation on model distribution

self.ep = self.Ep()

self.lastw = self.w[:]

for i,win enumerate(self.w):

delta = 1.0/self.M * math.log(self.ep_[i]/self.ep[i])

# update w

self.w[i] += delta

print self.w

# test if the algorithm is convergence

if self._convergence(self.lastw,self.w):

break

def calprob(self,features):

wgts = [(self.probwgt(features, l),l) for l in self.labels]

Z = sum([ w for w,l in wgts])

prob = [ (w/Z,l) for w,l in wgts]

return prob

def predict(self,input):

features = input.strip().split()

prob = self.calprob(features)

prob.sort(reverse=True)

return prob

执行:

prepare training data:

Outdoor Sunny Happy

Outdoor Sunny Happy Dry

Outdoor Sunny Happy Humid

Outdoor Sunny Sad Dry

Outdoor Sunny Sad Humid

Outdoor Cloudy Happy Humid

Outdoor Cloudy Happy Humid

Outdoor Cloudy Sad Humid

Outdoor Cloudy Sad Humid

Indoor Rainy Happy Humid

Indoor Rainy Happy Dry

Indoor Rainy Sad Dry

Indoor Rainy Sad Humid

Indoor Cloudy Sad Humid

Indoor Cloudy Sad Humid

open ipython to run the following commands:

In [11]: import maxent

In [12]: model = maxent.MaxEnt()

In [13]: model.load_data('data/gameLocation.dat')

In [14]: model.train()

In [11]: import maxent

In [12]: model = maxent.MaxEnt()

In [13]: model.load_data('data/gameLocation.dat')

In [14]: model.train()

iter 1 ...

iter 2 ...

iter 3 ...

iter 4 ...

iter 5 ...

iter 6 ...

iter 7 ...

iter 8 ...

iter 9 ...

iter 10 ...

iter 11 ...

iter 12 ...

iter 13 ...

iter 14 ...

iter 15 ...

iter 16 ...

iter 17 ...

iter 18 ...

iter 19 ...

iter 20 ...

iter 21 ...

iter 22 ...

iter 23 ...

iter 24 ...

iter 25 ...

iter 26 ...

iter 27 ...

iter 28 ...

iter 29 ...

iter 30 ...

iter 31 ...

iter 32 ...

iter 33 ...

iter 34 ...

iter 35 ...

iter 36 ...

iter 37 ...

iter 38 ...

iter 39 ...

iter 40 ...

iter 41 ...

iter 42 ...

iter 43 ...

iter 44 ...

iter 45 ...

iter 46 ...

iter 47 ...

iter 48 ...

iter 49 ...

iter 50 ...

iter 51 ...

iter 52 ...

iter 53 ...

iter 54 ...

iter 55 ...

iter 56 ...

iter 57 ...

iter 58 ...

iter 59 ...

iter 60 ...

iter 61 ...

iter 62 ...

iter 63 ...

iter 64 ...

iter 65 ...

iter 66 ...

iter 67 ...

iter 68 ...

iter 69 ...

iter 70 ...

iter 71 ...

iter 72 ...

iter 73 ...

iter 74 ...

iter 75 ...

iter 76 ...

iter 77 ...

iter 78 ...

iter 79 ...

iter 80 ...

iter 81 ...

iter 82 ...

iter 83 ...

iter 84 ...

iter 85 ...

iter 86 ...

iter 87 ...

iter 88 ...

iter 89 ...

iter 90 ...

iter 91 ...

iter 92 ...

iter 93 ...

iter 94 ...

iter 95 ...

iter 96 ...

iter 97 ...

iter 98 ...

iter 99 ...

iter 100 ...

iter 101 ...

iter 102 ...

iter 103 ...

iter 104 ...

iter 105 ...

iter 106 ...

iter 107 ...

iter 108 ...

iter 109 ...

iter 110 ...

iter 111 ...

iter 112 ...

iter 113 ...

iter 114 ...

iter 115 ...

iter 116 ...

iter 117 ...

iter 118 ...

iter 119 ...

iter 120 ...

iter 121 ...

iter 122 ...

iter 123 ...

iter 124 ...

iter 125 ...

iter 126 ...

iter 127 ...

iter 128 ...

iter 129 ...

iter 130 ...

iter 131 ...

iter 132 ...

iter 133 ...

iter 134 ...

iter 135 ...

iter 136 ...

iter 137 ...

iter 138 ...

iter 139 ...

iter 140 ...

iter 141 ...

iter 142 ...

iter 143 ...

iter 144 ...

In [16]: model.predict('Sunny')

Out[16]: [(0.9763203118841158, 'Outdoor'), (0.02367968811588421, 'Indoor')]

In [18]: model.predict('Cloudy')

Out[18]: [(0.7136730549489295, 'Outdoor'), (0.28632694505107054, 'Indoor')]

95行代码实现最大熵模型训练相关推荐

  1. 无需一行代码,完成模型训练和部署,这个AI工具开始公测

    本文转载自淘系技术,文末附官网下载链接. 阿里巴巴淘系技术开源轻量级深度学习推理引擎 MNN 以来,得到了业界的普遍认可 -- 数十家企业成为 MNN 的用户,不乏有一线科技企业:此外,MNN 还与上 ...

  2. 训练代码_无需一行代码,完成模型训练和部署,这个AI工具开始公测

    本文转载自淘系技术,文末附官网下载链接. 阿里巴巴淘系技术开源轻量级深度学习推理引擎 MNN 以来,得到了业界的普遍认可 -- 数十家企业成为 MNN 的用户,不乏有一线科技企业:此外,MNN 还与上 ...

  3. 12行代码AC——试题 算法训练 猴子吃包子——解题报告

    励志用尽量少的代码做高效的表达. 注意点: 挨个算吃包子的时间势必会因为省略小数的问题导致结果不准确. 因此,对于本题:我的核心思路是:分数代替小数,使用除法+取余的方式化简分数,进而解题. 代码: ...

  4. 一天star量破千,300行代码,特斯拉AI总监Karpathy写了个GPT的Pytorch训练库

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理:公众号@机器之心 本文仅做学术分享,如有侵权,请联系删除. 如果说 GPT 模型是所向披靡的战舰 ...

  5. 阿里云机器学习平台PAI论文高效大模型训练框架Whale入选USENIX ATC‘22

    近日,阿里云机器学习PAI关于深度学习模型高效的分布式训练框架的论文< Whale: Efficient Giant Model Training over Heterogeneous GPUs ...

  6. Python实现最大熵模型

    一 最大熵原理 首先介绍一下什么是熵 ,设X是一个取有限个值的离散随机变量 其概率分布如下 则随机变量X的熵可以表示为 并且我们知道熵越大,不确定性就越大 熵的具体讲解参考文章信息熵公式的详细讲解 最 ...

  7. blockchain 区块链200行代码:在JavaScript实现的一个简单的例子

    blockchain 区块链200行代码:在JavaScript实现的一个简单的例子 了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上 ...

  8. 什么,PyTorch还能开发新药?哈佛推出这款工具包,10行代码训练“药神”模型...

    萧箫 编辑整理 量子位 报道 | 公众号 QbitAI 最近,来自哈佛大学等机构的研究人员,开发出了一个AI"药神"工具包,为加速新冠疫情下的新药研发助力. 这款名为DeepPur ...

  9. 用少于10行代码训练前沿深度学习新药研发模型

    ©PaperWeekly · 作者|黄柯鑫 学校|哈佛大学硕士生 研究方向|图学习和生物医疗 深度学习正在革新药研发行业.在本文中,我们将展示如何使用 DeepPurpose,一个基于 PyTorch ...

最新文章

  1. 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514)
  2. java io 读取配置文件_java读取配置文件 - tomzhao2008的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. AC日记——「HNOI2017」礼物 LiBreOJ 2020
  4. cad安装日志文件发生错误_苹果电脑Mac os系统重装时出现“准备安装时发生错误”解决方案...
  5. 前端知识整理 CSS盒模型
  6. Ubuntu18.04 orb-slam3编译出现的错误 undefined reference to symbol ‘_ZN3MPI8Datatype4FreeEv‘ libmpi_cxx.so
  7. LVS-DR+Ldirectord+FreeNas实现负载均衡群集
  8. odps传大文件到oss上_如何导入数据到odps
  9. 查找与清除线程插入式木马(转)
  10. 《工业设计史》 绪论
  11. 双线性插值bilinear interpolation
  12. counter计数器
  13. python编写关不掉的流氓表白软件——快去找你爱的他表白吧
  14. 截止到某天的汇总报表_excel表格日数据汇总-excel表中如何将每日的数据汇总到每周...
  15. 计算机硬盘配置参数错误怎么办,电脑提示移动硬盘参数错误的解决方法
  16. 了解音频频率范围和音频元器件
  17. 沙滩啤酒win7主题【rmzt】
  18. 数学建模更新13(MATLAB绘制三维图【上】)
  19. APP开发之apicloud(一)
  20. win 10 caffe python=3.5 小白安装全过程(最详细,完美解决各种版本不兼容等问题)

热门文章

  1. 在Spring.Net中对于NHibernate.Caches.Prevalence的使用
  2. 快速撑握C#知识点系列之(struct)结构
  3. 笑一个阿 哈哈哈。。。。
  4. 虚拟机系统如何添加硬件?
  5. 春天闻香食花——品尝一顿愉悦的花餐
  6. javaee 架构师之路
  7. 多线程:为什么不能override start方法
  8. 使用Struts2上传文件超过2M报错解决方法
  9. 与基础事务管理器通讯失败
  10. WebService重载问题