当前位置: 首页 > article >正文

详解机器学习经典模型(原理及应用)——朴素贝叶斯

一、概念

        朴素贝叶斯网络(Naive Bayes Network)模型是一种基于贝叶斯定理的分类算法。它假设特征之间是条件独立的,即在给定类别的情况下,特征之间相互独立。这一假设在现实中往往不成立,毕竟很少有特征是完全无关的,但是这并不妨碍朴素贝叶斯模型在实际应用过程中发挥作用。

二、基本原理

1、贝叶斯定理

        朴素贝叶斯模型基于贝叶斯定理,贝叶斯定理描述的是后验概率(即在观察到某些证据后某个事件发生的概率)与先验概率(即在观察到证据之前某个事件发生的概率)之间的关系。贝叶斯定理的公式如下:

eq?P%28C%7CX%29%20%3D%20%5Cfrac%7BP%28X%7CC%29%5Ccdot%20P%28C%29%7D%7BP%28X%29%7D

其中:

  • P(C|X)是在给定特征X的情况下类别C的后验概率。
  • P(X|C)是在给定类别C的情况下特征X的似然,即在类别C已知的情况下,观察到特征X的概率。
  • P(C)是类别C的先验概率。
  • P(X)是特征X的边际概率,即示在不考虑类别C的情况下,特征X出现的概率。

        在朴素贝叶斯分类器中,我们关心的是找到使后验概率P(C|X)最大的类别C。由于P(X)对所有类别C都是相同的,我们可以忽略它,只需最大化P(X|C)⋅P(C)。

2、条件独立假设

        朴素贝叶斯分类器的关键假设是条件独立性假设,即在给定类别C的情况下,特征eq?x_%7Bi%7D是相互独立的。基于这一假设,似然P(X|C) 可以分解为各个特征的条件概率的乘积:

eq?P%28X%7CC%29%20%3D%20P%28x_%7B1%7D%2Cx_%7B2%7D%2C...%2Cx_%7Bn%7D%7CC%29%20%3D%20%5Cprod_%7Bi%3D1%7D%5E%7Bn%7DP%28x_%7Bi%7D%7CC%29

        因此,后验概率可以表示为:

eq?P%28C%7CX%29%20%5Cpropto%20P%28C%29%20%5Ccdot%20%5Cprod_%7Bi%3D1%7D%5E%7Bn%7DP%28x_%7Bi%7D%7CC%29

        其中,eq?%5Cpropto表示正比于,即两者成正比例。正比例是指两种相关联的量,一种量变化时,另一种量也随着变化,且它们的比值(或商)保持不变。

三、python实现

1、高斯朴素贝叶斯(Gaussian Naive Bayes)

        适用于连续特征,假设特征服从高斯分布(正态分布)。

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report

# 特征矩阵X,包含两个特征
X = np.array([
    [1.0, 2.1],
    [2.0, 1.9],
    [1.5, 1.8],
    [3.0, 3.1],
    [3.1, 3.0],
    [3.2, 3.2],
    [4.0, 4.1],
    [4.1, 4.0],
    [4.2, 4.2]
])

# 标签向量y,包含两个类别(0和1)
y = np.array([0, 0, 0, 1, 1, 1, 1, 1, 1])

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

# 训练高斯朴素贝叶斯分类器
model = GaussianNB()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.4f}")

2、多项式朴素贝叶斯(Multinomial Naive Bayes)

        适用于离散特征,常用于文本分类,假设特征的出现次数服从多项分布。

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report

# 特征矩阵X,包含离散数值特征
X = np.array([
    [2, 1, 0, 1],
    [1, 2, 1, 0],
    [0, 1, 2, 1],
    [1, 0, 1, 2],
    [2, 1, 0, 2],
    [0, 2, 1, 1],
    [1, 1, 2, 0],
    [2, 0, 1, 1]
])

# 标签向量y,包含两个类别(0和1)
y = np.array([0, 0, 1, 1, 0, 2, 0, 2])

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

# 训练多项式朴素贝叶斯分类器
model = MultinomialNB()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.4f}")

3、伯努利朴素贝叶斯(Bernoulli Naive Bayes)

        适用于二元特征,假设特征是二元变量(0或1),常用于文本分类中的词袋模型。

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNB
from sklearn.metrics import accuracy_score, classification_report

# 特征矩阵X,包含二元特征(0或1)
X = np.array([
    [1, 0, 1, 0],
    [1, 1, 0, 0],
    [0, 0, 1, 1],
    [0, 1, 1, 0],
    [1, 0, 0, 1],
    [0, 1, 0, 1],
    [1, 1, 1, 0],
    [0, 0, 0, 1]
])

# 标签向量y,包含两个类别(0和1)
y = np.array([0, 0, 1, 1, 0, 1, 0, 1])

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

# 训练伯努利朴素贝叶斯分类器
model = BernoulliNB()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.4f}")

四、总结

        朴素贝叶斯模型是一种简单而有效的分类算法,尽管其条件独立性假设在现实中往往不成立。此外,朴素贝叶斯也是典型的生成式模型。在机器学习领域,有生成式和判别式两大模型派别。

1、生成式模型

        生成式模型(Generative Model)是通过建模数据的联合概率分布P(X,Y)来进行分类或其他任务的模型,它不仅关注输入特征X和输出标签Y之间的关系,还试图描述数据的生成过程。朴素贝叶斯、隐马尔科夫模型、隐含狄利克雷分布、混合高斯模型都是典型的生成式模型。

2、判别式模型

        判别式模型(Discriminative Model)是直接建模条件概率分布P(Y∣X)或决策边界的模型。它们专注于输入特征X和输出标签Y之间的直接关系,而不试图描述数据的生成过程。线性回归、逻辑回归、支持向量机、传统神经网络、线性判别分析、条件随机场都是典型的判别式模型。

 


http://www.kler.cn/a/372810.html

相关文章:

  • 【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析
  • ip地址分为几大类-IP和子网掩码对照表
  • 搜索引擎算法更新对网站优化的影响与应对策略
  • 【Cri-Dockerd】安装cri-dockerd
  • 小小猫棒onu替换家用光猫,薅运营商带宽羊毛,突破1000M
  • WebGIS开发丨从入门到进阶,全系列课程分享
  • 【iOS】YYModel初学习
  • ssm014基于JSP的乡镇自来水收费系统+jsp(论文+源码)_kaic
  • 图书管理系统汇报
  • 全面掌握数据库性能监控:策略、工具与实践
  • C语言中有哪些函数可以用来处理二进制和十六进制数字
  • 人工智能算法之粒子群优化算法
  • Yii2 init 初始化脚本分析
  • 无人机遗传算法详解!
  • Virtual Private Network (VPN) Lab
  • 在MacOS玩RPG游戏 - RPGViewerPlus
  • 【论文笔记】xGen-MM (BLIP-3): A Family of Open Large Multimodal Models
  • 【Android】Kotlin教程(5)
  • react基础之redux快速上手环境准备
  • 【Docker知识】Docker进阶-容器镜像深度解读
  • SQL 高级技巧
  • BERT的中文问答系统23
  • 使用Virtual Audio Cable捕获系统音频输出并使用Python处理
  • pc电脑屏幕分辨率尺寸
  • MetaArena推出《Final Glory》:引领Web3游戏技术新风向
  • Flutter鸿蒙next 封装对话框详解