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

适用条件:

  • 文本分类/垃圾文本过滤/情感判别
  • 多分类实时预测
  • 推荐系统
  • 复杂问题建模
相关推荐
湘美书院--湘美谈教育10 分钟前
湘美谈教育湘美书院网文研究:人工智能与微型小说选集
人工智能·深度学习·神经网络·机器学习·ai写作
uzong15 分钟前
Harness Engineering 是什么?一场新的 AI 范式已经开始
人工智能·后端·架构
墨有66617 分钟前
FieldFormer:基于物理场论的极简AI大模型底层架构,附带源码
人工智能·架构·电磁场算法映射
Mountain and sea36 分钟前
从零搭建工业机器人激光切割+焊接产线:KUKA七轴协同+节卡AGV+视觉检测实战复盘
人工智能·机器人·视觉检测
K姐研究社1 小时前
阿里JVS Claw实测 – 手机一键部署 OpenClaw,开箱即用
人工智能·智能手机·aigc·飞书
卷积殉铁子1 小时前
从“手动挡”到“自动驾驶”:OpenClaw如何让AI开发变成“说话就行”
人工智能
机器之心1 小时前
扎克伯格正在打造自己的「AI分身」,并计划裁掉1.6万人
人工智能·openai
机器之心1 小时前
必看!Sebastian Raschka新博客盘点了所有主要注意力机制
人工智能·openai
Kel2 小时前
深入剖析 openai-node 源码:一个工业级 TypeScript SDK 的架构之美
javascript·人工智能·架构
岛雨QA2 小时前
Skill学习指南🧑‍💻
人工智能·agent·ai编程