【机器学习】9 ——最大熵模型的直观理解
系列文章目录
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 系列文章目录
- 前奏
- 例子
- 硬币
- 垃圾邮件
- 代码
前奏
【机器学习】6 ——最大熵模型
例子
硬币
假设我们有一枚硬币,可能是公平的,也可能是不公平的。我们的任务是估计硬币的正反面出现的概率。我们已知硬币有两个面:正面(H)和反面(T),除此之外没有其他信息。因此,我们希望在不引入不必要假设的情况下,找到最合理的概率分布。
当我们没有任何关于硬币的额外信息时,我们唯一知道的是硬币只有两个面(H 和 T)。基于最大熵原则,我们希望选择最“随机”或最“均匀”的概率分布。在这种情况下,最合理的分布是:
P(H) = 0.5
P(T) = 0.5
这是因为熵的最大化意味着我们选择的是最不确定的分布,即每种可能性是等概率的。
对于两个事件 H 和 T:
H( p)=−[p(H)logp(H) + p(T)logp(T)]
代入 P(H) = 0.5 和 P(T) = 0.5:
H( p)=−[0.5log0.5+0.5log0.5] =−[0.5×(−1)+0.5×(−1)]=1
这是在没有任何其他信息时,熵最大的分布,表示正反面各有 50% 的概率。
假设我们现在有额外的信息,例如在 10 次投掷中正面出现了 7 次,反面出现了 3 次。我们不再假设正反面等概率。
我们需要在这个额外信息(正面出现更多次)和熵最大化之间找到平衡。最大熵模型会根据这个信息调整概率分布,但仍然保持最大的熵。
约束条件:正面出现的频率为 7/10,即我们期望: E(H)=0.7
拉格朗日乘数法:我们引入拉格朗日乘数来最大化熵,同时满足上述的约束条件。我们最大化以下目标函数:L ( p)=−[p(H)logp(H)+p(T)logp(T)]+λ(p(H)−0.7)
通过求导并解方程,可以得到新的概率分布 P(H)=0.7 和 P(T)=0.3,这符合已知数据的约束条件,同时尽量保持熵的最大化。
垃圾邮件
- 训练数据:
假设我们有以下几封邮件,并且每封邮件已经标注为垃圾邮件(Spam)或非垃圾邮件(Not Spam):
邮件1 (Spam): “Win a million dollars now”
邮件2 (Not Spam): “Meeting at 3 PM today”
邮件3 (Spam): “Congratulations! You have won a free gift”
邮件4 (Not Spam): “Project update attached”
- 特征提取:
首先,从每封邮件中提取特征(即单词)。在这个例子中,我们的特征是邮件中的单词。例如:
“Win”, “million”, “dollars”, “now”, “Meeting”, “project” 等等。
我们可以将每封邮件转化为一个包含特征的向量:
- 邮件1:[“Win”, “million”, “dollars”, “now”]
- 邮件2:[“Meeting”, “3”, “PM”, “today”]
- 邮件3:[“Congratulations”, “You”, “won”, “free”, “gift”]
- 邮件4:[“Project”, “update”, “attached”]
标签:
邮件1 -> Spam (1)
邮件2 -> Not Spam (0)
邮件3 -> Spam (1)
邮件4 -> Not Spam (0)
-
最大熵模型的目标:
模型的目标是根据训练数据估计每封邮件属于垃圾邮件(Spam)或非垃圾邮件(Not Spam)的概率。为了最大化模型的熵,我们引入约束条件,比如已知邮件中出现某些单词时其分类的概率。 -
训练过程:
我们用最大熵模型来训练这些数据。模型根据邮件中的单词(特征)以及历史邮件的分类信息,计算每个单词在垃圾邮件和非垃圾邮件中的条件概率。
如果"win"这个单词在训练集中大多数时候出现在垃圾邮件中,模型会为"win"分配一个较高的垃圾邮件概率。
如果"meeting"这个单词大多数时候出现在非垃圾邮件中,模型会为它分配一个较高的非垃圾邮件概率。
- 特征是独立的,通常通过词袋模型(Bag of Words)或 TF-IDF(词频-逆文档频率)方法将文本转换为数值表示。
- 在这个例子中,特征提取可以使用词袋模型。对于每封邮件,提取其中的单词并将其表示为一个向量。例如:
邮件1(“Win a million dollars now”)转换为 [1, 0, 0, 1, 0…],其中每个位置代表一个单词的出现次数。
邮件2(“Meeting at 3 PM today”)转换为 [0, 1, 0, 0, 1…],同样代表单词出现的频率。
- 分类预测:
当有一封新邮件出现时,例如 “Free gift awaiting you”, 最大熵模型会计算它属于垃圾邮件和非垃圾邮件的概率:
P(Spam | “Free gift awaiting you”) = ?
P(Not Spam | “Free gift awaiting you”) = ?
代码
这个很简单,复杂问题可能要考虑更多
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression# 训练样本数据
emails = ["Win a million dollars now", "Meeting at 3 PM today","Congratulations! You have won a free gift", "Project update attached"]# 标签:1表示垃圾邮件,0表示非垃圾邮件
labels = [1, 0, 1, 0]# 特征提取:使用词袋模型
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)# 最大熵模型近似:使用逻辑回归实现
model = LogisticRegression()
model.fit(X, labels)# 测试新邮件
new_emails = ["Free gift awaiting you", "Meeting tomorrow"]
X_new = vectorizer.transform(new_emails)# 预测
predictions = model.predict(X_new)
print("预测结果:", predictions) # 输出预测类别:1 表示垃圾邮件,0 表示非垃圾邮件# 计算每类概率
probs = model.predict_proba(X_new)
print("分类概率:", probs) # 输出每封邮件属于垃圾邮件和非垃圾邮件的概率
相关文章:

【机器学习】9 ——最大熵模型的直观理解
系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前奏例子硬币垃圾邮件代码 前奏 【机器学习】6 ——最大熵模型 例子 硬币 假设我们有一枚硬币,可能是公平的,…...
1.单例模式
目录 简介 饿汉式 懒汉式 双重检测锁式 静态内部类式 枚举单例 测试 测试单例模式: 测试五种单例模式在多线程环境下的效率 问题(拓展) 例:反射破解单例模式 例:反序列化破解单例模式 总结:如何…...
数据倾斜问题
数据倾斜:主要就是在处理MR任务的时候,某个reduce的数据处理量比另外一些的reduce的数据量要大得多,其他reduce几乎不处理,这样的现象就是数据倾斜。 官方解释:数据倾斜指的是在数据处理过程中,由于某些键…...

大龄焦虑?老码农逆袭之路:拥抱大模型时代,焕发职业生涯新活力!
其实我很早就对大龄程序员这个话题感到焦虑,担心自己35岁之后会面临失业,有时和亲戚朋友聊天时,也会经常拿这个出来调侃。现在身边已经有很多35岁左右的同事,自己过两年也会步入35岁的行列,反倒多了一份淡定和从容。 …...
Vue 页面反复刷新常见问题及解决方案
Vue 页面反复刷新常见问题及解决方案 引言 Vue.js 是一个流行的前端框架,旨在通过其响应式的数据绑定和组件化的开发模式简化开发。然而,在开发 Vue.js 应用时,页面反复刷新的问题可能会对用户体验和开发效率产生负面影响。本文将深入探讨 …...

Windows上指定盘符-安装WSL虚拟机(机械硬盘)
参考来自于教程1:史上最全的WSL安装教程 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/386590591#%E4%B8%80%E3%80%81%E5%AE%89%E8%A3%85WSL2.0 教程2:Windows 10: 将 WSL Linux 实例安装到 D 盘,做成移动硬盘绿色版也不在话下 - 知乎 (z…...

ffmpeg实现视频的合成与分割
视频合成与分割程序使用 作者开发了一款软件,可以实现对视频的合成和分割,界面如下: 播放时,可以选择多个视频源;在选中“保存视频”情况下,会将多个视频源合成一个视频。如果只取一个视频源中一段视频…...
团体标准的十大优势
一、团体标准是什么 团体标准是指由社会团体(行业协会、联合会、企业联盟等)按照自己确立的制定程序,自主制定、发布、采纳,并由社会自愿采用的标准。简单的说,就是社会团体为了满足市场和创新需要,协调相…...
java spring boot 动态添加 cron(表达式)任务、动态添加停止单个cron任务
java spring boot 动态添加 cron(表达式)任务、动态添加停止单个cron任务 添加对应的maven <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.0</version…...

sqlgun靶场漏洞挖掘
1.xss漏洞 搜索框输入以下代码,验证是否存在xss漏洞 <script>alert(1)</script> OK了,存在xss漏洞 2.SQL注入 经过测试,输入框存在SQL注入漏洞 查询数据库名 查询管理员账号密码 此处密码为MD5加密,解码内容如下 找…...
好用的 Markdown 编辑器组件
ByteMD bytedance/bytemd: ByteMD v1 repository (github.com) 这里由于我的项目是 Next,所以安装 bytemd/react, 阅读官方文档,执行命令来安装编辑器主体、以及 gfm(表格支持)插件、highlight 代码高亮插件…...
uniapp vite3 require导入commonJS 的js文件方法
vite3 导入commonJS 方式导出 在Vite 3中,你可以通过配置vite.config.js来实现导入CommonJS(CJS)风格的模块。Vite 默认支持ES模块导入,但如果你需要导入CJS模块,可以使用特定的插件,比如originjs/vite-pl…...

通义灵码用户说:“人工编写测试用例需要数十分钟,通义灵码以毫秒级的速度生成测试代码,且准确率和覆盖率都令人满意”
通过一篇文章,详细跟大家分享一下我在使用通义灵码过程中的感受。 一、定义 通义灵码,是一个智能编码助手,它基于通义大模型,提供代码智能生成、研发智能问答能力。 在体验过程中有任何问题均可点击下面的连接前往了解和学习。 …...
MySQL中的约束
约束概述 1.1 为什么需要约束 数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信…...

Leetcode 寻找重复数
可以使用 位运算 来解决这道题目。使用位运算的一个核心思想是基于数字的二进制表示,统计每一位上 1 的出现次数,并与期望的出现次数做比较。通过这种方法,可以推断出哪个数字重复。 class Solution { public:int findDuplicate(vector<i…...

大一新生以此篇开启你的算法之路
各位大一计算机萌新们,你们好,本篇博客会带领大家进行算法入门,给各位大一萌新答疑解惑。博客文章略长,可根据自己的需要观看,在博客中会有给大一萌新问题的解答,请不要错过。 入门简介: 算法…...

【AI大模型】ChatGPT模型原理介绍(上)
目录 🍔 什么是ChatGPT? 🍔 GPT-1介绍 2.1 GPT-1模型架构 2.2 GPT-1训练过程 2.2.1 无监督的预训练语言模型 2.2.2 有监督的下游任务fine-tunning 2.2.3 整体训练过程架构图 2.3 GPT-1数据集 2.4 GPT-1模型的特点 2.5 GPT-1模型总结…...

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模
前言 本系列教程旨在使用UE5配置一个具备激光雷达深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博…...

C++竞赛初阶L1-15-第六单元-多维数组(34~35课)557: T456507 图像旋转
题目内容 输入一个 n 行 m 列的黑白图像,将它顺时针旋转 90 度后输出。 输入格式 第一行包含两个整数 n 和 m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。 接下来 n 行,每行 m 个整数,表示图像的每个像…...

无线领夹麦克风哪个牌子好?西圣、罗德、猛犸领夹麦克风深度评测
如今短视频和直播行业蓬勃发展,无线领夹麦克风成为了许多创作者不可或缺的工具。然而,市场上的无线领夹麦克风品牌众多、质量参差不齐,为了帮助大家挑选到满意的产品,我作为数码测评博主,对无线领夹麦克风市场进行了…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...