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

适用条件:

  • 文本分类/垃圾文本过滤/情感判别
  • 多分类实时预测
  • 推荐系统
  • 复杂问题建模
相关推荐
科技小花2 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
zhuiyisuifeng3 小时前
2026前瞻:GPTimage2镜像官网或将颠覆视觉创作
人工智能·gpt
徐健峰3 小时前
GPT-image-2 热门玩法实战(一):AI 看手相 — 一张手掌照片生成专业手相分析图
人工智能·gpt
weixin_370976353 小时前
AI的终极赛跑:进入AGI,还是泡沫破灭?
大数据·人工智能·agi
Slow菜鸟3 小时前
AI学习篇(五) | awesome-design-md 使用说明
人工智能·学习
冬奇Lab3 小时前
RAG 系列(五):Embedding 模型——语义理解的核心
人工智能·llm·aigc
深小乐4 小时前
AI 周刊【2026.04.27-05.03】:Anthropic 9000亿美元估值、英伟达死磕智能体、中央重磅定调AI
人工智能
码点滴4 小时前
什么时候用 DeepSeek V4,而不是 GPT-5/Claude/Gemini?
人工智能·gpt·架构·大模型·deepseek
狐狐生风4 小时前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
波动几何4 小时前
CDA架构代码工坊技能cda-code-lab
人工智能