机器学习——深入浅出理解朴素贝叶斯算法

文章目录

引言

朴素贝叶斯算法,一个听起来充满统计学气息的名字,却是机器学习领域最直观易懂的算法之一。它就像一位经验丰富的医生,凭借"朴素"的经验法则,快速高效地进行疾病诊断。今天,就让我们一起揭开朴素贝叶斯算法的神秘面纱,探索其背后的原理和应用。

一、朴素贝叶斯定理概述

1.从贝叶斯定理说起

要理解朴素贝叶斯,首先要了解它的理论基础------贝叶斯定理。贝叶斯定理描述了在已知某些条件下,某事件发生的概率如何更新。简单来说,就是利用新的信息,不断修正我们对事件的认知。

公式表示为:

P ( A ∣ B ) = P ( B ∣ A ) ∗ P ( A ) / P ( B ) P(A|B) = P(B|A) * P(A) / P(B) P(A∣B)=P(B∣A)∗P(A)/P(B)

其中:

  • P(A|B):在事件 B 发生的条件下,事件 A 发生的概率(后验概率)
  • P(B|A):在事件 A 发生的条件下,事件 B 发生的概率(似然度)
  • P(A):事件 A 发生的先验概率
  • P(B):事件 B 发生的边际概率

2.朴素贝叶斯的"朴素"之处

朴素贝叶斯算法基于一个非常朴素的假设:特征之间相互独立。也就是说,算法假设数据集中每个特征与其他特征都不相关。例如,在垃圾邮件分类中,算法会假设邮件中出现"免费"和"中奖"这两个词之间没有任何联系。

虽然这个假设在现实中往往不成立,但朴素贝叶斯算法却在许多实际应用中表现出色,尤其是在文本分类领域。

3.朴素贝叶斯算法的应用

朴素贝叶斯算法广泛应用于各种分类任务,例如:

  • 垃圾邮件过滤: 判断一封邮件是否是垃圾邮件。
  • 情感分析: 分析一段文本表达的情感是积极还是消极。
  • 新闻分类: 将新闻文章自动分类到不同的主题类别,例如体育、科技、娱乐等。
  • 医疗诊断: 根据患者的症状,判断其可能患有的疾病。

二、朴素贝叶斯算法的优缺点

优点:

  • 简单易懂,易于实现。
  • 训练速度快,对大规模数据集处理效率高。
  • 对于高维数据表现良好。
  • 对小规模数据也能取得不错的效果。

缺点:

  • 特征独立性假设在现实中往往不成立,会影响模型精度。
  • 对输入数据的表达形式比较敏感。

三、python代码实现案例

1.导入库

bash 复制代码
import pandas as pd
  • pandas:用于数据处理和分析。

2.数据预处理

bash 复制代码
data = pd.read_csv("iris.csv",header=None)
data = data.drop(0,axis=1)
x = data.iloc[:,:-1]
y = data.iloc[:,-1]

from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test = \
            train_test_split(x,y,test_size=0.2,random_state=42)
  • 读取数据:使用pandas库读取iris.csv文件。数据集在下方链接中。
  • 链接: iris.csv
  • x:保留所有行,删除最后一列。
  • y:只保留最后一列。
  • train_test_split:对数据集进行划分

3.模型训练

bash 复制代码
from sklearn.naive_bayes import MultinomialNB #导入朴素贝叶斯分类器
#实例化贝叶斯分类器
classifier  = MultinomialNB(alpha=1)
classifier.fit(x_train,y_train)
  • 导入模型MultinomialNB
  • 使用fit()函数训练模型

4.模型评估

bash 复制代码
train_predicted = classifier.predict(x_train)
print(metrics.classification_report(y_train, train_predicted))

# 在完整测试集上评估模型
train_predicted1 =classifier.predict(x_test)
print(metrics.classification_report(y_test, train_predicted1))
  • 打印分类报告

5.完整代码

bash 复制代码
import pandas as pd

data = pd.read_csv("iris.csv",header=None)
data = data.drop(0,axis=1)
x = data.iloc[:,:-1]
y = data.iloc[:,-1]

from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test = \
            train_test_split(x,y,test_size=0.2,random_state=42)

from sklearn.naive_bayes import MultinomialNB #导入朴素贝叶斯分类器
#实例化贝叶斯分类器
classifier  = MultinomialNB(alpha=1)
classifier.fit(x_train,y_train)

from sklearn import metrics

# 在小训练集上评估模型
train_predicted = classifier.predict(x_train)
print(metrics.classification_report(y_train, train_predicted))
# cm_plot(y_train, train_predicted).show()

# 在完整测试集上评估模型
train_predicted1 =classifier.predict(x_test)
print(metrics.classification_report(y_test, train_predicted1))
# cm_plot(y_test, train_predicted1).show()

四、总结

朴素贝叶斯算法以其简单高效的特点,成为机器学习入门学习的经典算法。尽管其"朴素"的假设存在一定局限性,但在许多实际应用中依然表现出色。理解朴素贝叶斯算法,不仅能够帮助我们解决实际问题,更能为我们打开机器学习世界的大门,探索更广阔的算法天地。

希望这篇博客能够帮助你更好地理解朴素贝叶斯算法!

相关推荐
奥惟斯9 分钟前
GEO 上线前,先把这 3 类实体信号地基补上
人工智能·深度学习·机器学习·自然语言处理·数据挖掘·数据分析·知识图谱
孟陬10 分钟前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
像风一样自由202015 分钟前
4.DockerCompose是什么为什么算法服务需要多个容器
人工智能·rag·智能体
FII工业富联科技服务19 分钟前
工业智能体技术架构解析:六级部署、核心模块与制造场景实践
人工智能·架构·制造
2601_9669496525 分钟前
如何封装 qd.klines.batch(),让批量 K 线查询函数在多个策略中复用?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
长不大的杨瑞杰26 分钟前
OpenCode v2 配置工程实战:Config 优先级、JSONC、变量替换与多环境治理
人工智能·安全·云计算·软件工程·devops
.Bryce.35 分钟前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测
小超人诞生日记37 分钟前
C++ 智能指针的使用及其原理详解
c++·算法
高升说42 分钟前
手眼方案怎么选:眼在手上与眼在手外的工程对比
人工智能·数码相机
Highcharts.js1 小时前
智能数据分析组件Orbit 正式发布与快速上手体验教程
前端·人工智能·信息可视化·数据分析系统·highcharts·orbit·智能可视化