机器学习(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,则预测失败
  • 条件概率和先验分布计算复杂度高,高维计算困难

适用条件:

  • 文本分类/垃圾文本过滤/情感判别
  • 多分类实时预测
  • 推荐系统
  • 复杂问题建模
相关推荐
企业老板ai培训2 小时前
从九尾狐AI案例拆解企业AI培训的技术实现与降本增效架构
人工智能
Elastic 中国社区官方博客8 小时前
使用 Discord 和 Elastic Agent Builder A2A 构建游戏社区支持机器人
人工智能·elasticsearch·游戏·搜索引擎·ai·机器人·全文检索
张祥6422889048 小时前
误差理论与测量平差基础笔记十
笔记·算法·机器学习
2501_933329559 小时前
企业级AI舆情中台架构实践:Infoseek系统如何实现亿级数据实时监测与智能处置?
人工智能·架构
阿杰学AI9 小时前
AI核心知识70——大语言模型之Context Engineering(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·数据处理·上下文工程
赛博鲁迅9 小时前
物理AI元年:AI走出屏幕进入现实,88API为机器人装上“最强大脑“
人工智能·机器人
管牛牛9 小时前
图像的卷积操作
人工智能·深度学习·计算机视觉
云卓SKYDROID10 小时前
无人机航线辅助模块技术解析
人工智能·无人机·高科技·云卓科技
琅琊榜首202010 小时前
AI生成脑洞付费短篇小说:从灵感触发到内容落地
大数据·人工智能