【机器学习】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 个整数,表示图像的每个像…...
无线领夹麦克风哪个牌子好?西圣、罗德、猛犸领夹麦克风深度评测
如今短视频和直播行业蓬勃发展,无线领夹麦克风成为了许多创作者不可或缺的工具。然而,市场上的无线领夹麦克风品牌众多、质量参差不齐,为了帮助大家挑选到满意的产品,我作为数码测评博主,对无线领夹麦克风市场进行了…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
