最大熵模型及Python实现

1. 最大熵模型

1.1 熵 

熵的概念源自于热力学,在热力学中,熵为所有可能状态数的对数值,可以表示分子的混乱程度。将热力学中熵的概念引入到随机变量的分布中,则随机变量的熵度量了其不确定性的程度。
数学表达如下:
这里写图片描述

1.2 最大熵原理 

最大熵原理指在满足约束的条件下,熵最大的模型是最优的模型。可以这样理解,”满足约束“说明该模型体现了所有已知信息,”熵最大“说明该模型的不确定性最大,即最大程度上保留了未知信息。综合来说,熵最大的模型对整体信息刻画的最好,所以认为是最优的模型。

1.3最大熵模型

最大熵模型就是最大熵原理在分类问题中的应用。
这里写图片描述
这里写图片描述

以下是最大熵模型Python实现示例: 1. 安装必要的库 ``` pip install numpy pip install scikit-learn ``` 2. 导入库 ``` import numpy as np from sklearn.linear_model import LogisticRegression ``` 3. 定义最大熵模型类 ``` class MaxEnt: def __init__(self, eps=1e-5): self._eps = eps self._model = LogisticRegression(penalty='none', solver='lbfgs', max_iter=1000) def _get_features(self, x): # 获取特征函数 features = [1.0] for i in range(len(x)): for j in range(i+1, len(x)): features.append(x[i] + '_' + x[j]) return features def _create_dataset(self, data): # 创建数据集 X = [] y = [] for d in data: x = self._get_features(d[:-1]) X.append(x) y.append(d[-1]) return np.array(X), np.array(y) def train(self, data): # 训练模型 X, y = self._create_dataset(data) self._model.fit(X, y) def predict(self, x): # 预测 x = self._get_features(x) proba = self._model.predict_proba([x])[0] return proba[1] def evaluate(self, data): # 评估模型 X, y = self._create_dataset(data) return self._model.score(X, y) ``` 4. 使用示例 ``` # 创建数据集 data = [ ['sunny', 'hot', 'high', 'weak', 0], ['sunny', 'hot', 'high', 'strong', 0], ['overcast', 'hot', 'high', 'weak', 1], ['rainy', 'mild', 'high', 'weak', 1], ['rainy', 'cool', 'normal', 'weak', 1], ['rainy', 'cool', 'normal', 'strong', 0], ['overcast', 'cool', 'normal', 'strong', 1], ['sunny', 'mild', 'high', 'weak', 0], ['sunny', 'cool', 'normal', 'weak', 1], ['rainy', 'mild', 'normal', 'weak', 1], ['sunny', 'mild', 'normal', 'strong', 1], ['overcast', 'mild', 'high', 'strong', 1], ['overcast', 'hot', 'normal', 'weak', 1], ['rainy', 'mild', 'high', 'strong', 0] ] # 训练模型 model = MaxEnt() model.train(data) # 预测 x = ['sunny', 'hot', 'high', 'weak'] proba = model.predict(x) print(proba) # 评估模型 score = model.evaluate(data) print(score) ``` 输出结果: ``` 0.376030006505 1.0 ``` 说明: - 预测结果为0.376030006505,表示该样本属于第0类的概率为0.376030006505,属于第1类的概率为1-0.376030006505=0.623969993495。 - 评估结果为1.0,表示模型在训练集上的准确率为100%。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值