机器学习(10)

判别式模型和生成模型

判别式模型

判别式模型的目的是直接建模条件概率 ,即给定输入,预测输出 的概率。简而言之,判别式模型关注的是区分不同类别之间的边界。

生成式模型

生成式模型的目的是建模联合概率,即输入和输出的联合分布。生成式模型尝试模拟数据的生成过程,从而能够生成与训练数据相似的新样本。

案例分析:

|---|-----|-----|-----|-----|
| | 样本1 | 样本2 | 样本3 | 样本4 |
| x | 0 | 0 | 1 | 1 |
| y | 0 | 0 | 0 | 1 |

判别式模型p(y|x)(x=0时y=0的概率)

|-----|-----|-----|
| | y=0 | y=1 |
| x=0 | 1 | 0 |
| x=1 | 1/2 | 1/2 |

生成式模型p(y,x) ---> p(y|x)(x=0且y=0的概率,考虑全局的样本)

|-----|-----|-----|
| | y=0 | y=1 |
| x=0 | 1/2 | 0 |
| x=1 | 1/4 | 1/4 |

贝叶斯方法

贝叶斯公式

  • P(A∣B):在事件 B已经发生的情况下,事件 A发生的条件概率(后验概率)。

  • P(B∣A):在事件 A已经发生的情况下,事件 B 发生的条件概率(可能性,似然函数)。

  • P(A):事件 A的先验概率,即在没有任何条件信息时,事件 A发生的概率(先验概率)。

  • P(B):事件 B 的总概率。

核心思想

根据先验信息 和观测到的数据 ,计算后验概率 。通过这个后验概率,可以对未知的事件做出推断,即使用结果推测出产生这个结果的原因

朴素贝叶斯分类

假设我们有一个数据集,其中每个样本是由特征 和类别标签组成的。朴素贝叶斯的目标是计算每个类别的后验概率,然后选择具有最大后验概率的类别作为预测类别。

根据贝叶斯定理,类别给定输入特征的后验概率为:

朴素假设:特征条件独立

朴素贝叶斯的关键假设是特征之间的条件独立性,即在给定类别 的条件下,每个特征都是独立的,即:

朴素贝叶斯的特点

  • 逻辑简单,易于实现
  • 效率高,时空开销小
  • 条件独立假设不成立则分类效果一般
  • 适用于特征相关性较小时

朴素贝叶斯家族

分类器名称 特征类型 特征分布假设
高斯朴素贝叶斯(Gaussian NB) 连续型特征 假设特征服从高斯(正态)分布
多项式朴素贝叶斯(Multinomial NB) 离散型特征(计数型特征) 假设特征服从多项式分布(常用于文本分类)
伯努利朴素贝叶斯(Bernoulli NB) 离散型特征(0或1二值特征) 假设特征服从伯努利分布(即每个特征是二元的)
Complement朴素贝叶斯(Complement NB) 离散型特征(计数型特征) 基于多项式分布的补充方法,专门用于类别不平衡的数据,处理负类更好
Categorical朴素贝叶斯(Categorical NB) 离散型特征(分类特征) 假设特征服从多项分布,适用于每个特征是分类变量的情况(如颜色、品牌等)

代码实现

python 复制代码
from sklearn import datasets

iris = datasets.load_iris()
x = iris.data
y = iris.target

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(x,y,test_size=0.25,random_state=0)

from sklearn.naive_bayes import BernoulliNB,GaussianNB,MultinomialNB
bnb = BernoulliNB()
gnb = GaussianNB()
mnb = MultinomialNB()

bnb.fit(X_train,y_train)
bnb.score(X_test,y_test)

mnb.fit(X_train,y_train)
mnb.score(X_test,y_test)

gnb.fit(X_train,y_train)
gnb.score(X_test,y_test)

多项式朴素贝叶斯案例 ------ 文本分类

python 复制代码
from sklearn.datasets import fetch_20newsgroups

# subset:指定要加载的新闻组数据的子集,all:训练集和测试集都取出来
news = fetch_20newsgroups(subset='all')
print(news.DESCR)

# 纯文本数据不能直接使用模型去训练
# 使用特征抽取
# CountVectorizer是一个文本特征提取器,它将文本数据转化为词频矩阵。每个单词都会被映射到一个特定的特征空间,并计算文本中每个单词出现的次数
# stop_words='english'表示在进行词频统计时,会自动排除英文中的常用停用词(例如 "the", "and", "is" 等)
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer(stop_words='english')

vec.fit_transform(X)
X_train_vec = vec.transform(X_train)
X_test_vec = vec.transform(X_test)

from sklearn.naive_bayes import MultinomialNB
nb = MultinomialNB()
nb.fit(X_train_vec,y_train)

nb.score(X_test_vec,y_test)

y_predict = nb.predict(X_test_vec)
from sklearn.metrics import classification_report
print(classification_report(y_test,y_predict,target_names=news.target_names))

问题:数据集下载显示403错误

解决方案:

  • 手动下载fetch_20newsgroups数据集压缩包20-news-bydate.tar.gz
  • 将压缩包保存至:C:\Users\(用户名)\scikit_learn_data\20news_home

贝叶斯方法的优缺点和适用条件

优点:

  • 过程简单速度快
  • 对于多分类问题同样有效
  • 分布独立假设下效果好

缺点:

  • 条件独立假设在现实中往往难以保证
  • 只适用于简单的比大小问题
  • 如果个别类别概率为0,则预测失败
  • 条件概率和先验分布计算复杂度高,高维计算困难

适用条件:

  • 文本分类/垃圾文本过滤/情感判别
  • 多分类实时预测
  • 推荐系统
  • 复杂问题建模
相关推荐
汗流浃背了吧,老弟!7 小时前
BPE 词表构建与编解码(英雄联盟-托儿索语料)
人工智能·深度学习
软件聚导航7 小时前
从 AI 画马到马年红包封面,我还做了一个小程序
人工智能·chatgpt
啊森要自信7 小时前
CANN ops-cv:AI 硬件端视觉算法推理训练的算子性能调优与实战应用详解
人工智能·算法·cann
要加油哦~7 小时前
AI | 实践教程 - ScreenCoder | 多agents前端代码生成
前端·javascript·人工智能
玄同7657 小时前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
新缸中之脑7 小时前
用RedisVL构建长期记忆
人工智能
J_Xiong01177 小时前
【Agents篇】07:Agent 的行动模块——工具使用与具身执行
人工智能·ai agent
SEO_juper7 小时前
13个不容错过的SEO技巧,让您的网站可见度飙升
人工智能·seo·数字营销
小瑞瑞acd8 小时前
【小瑞瑞精讲】卷积神经网络(CNN):从入门到精通,计算机如何“看”懂世界?
人工智能·python·深度学习·神经网络·机器学习
CoderJia程序员甲8 小时前
GitHub 热榜项目 - 日榜(2026-02-06)
人工智能·ai·大模型·github·ai教程