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

文章目录

引言

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

一、朴素贝叶斯定理概述

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()

四、总结

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

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

相关推荐
鸿芯微控科技3 分钟前
MFC关断后还有流量怎么办?零流量、阀门泄漏、压差与Python分析
c++·python·mfc·质量流量控制器·关断泄漏·零流量测试
一个王同学5 分钟前
从零到一 | CV转多模态大模型 | week22 | 实战项目-DocuMind-VL:基于 OCR 与 Qwen-VL 的文档多模态问答系统(二)
人工智能·深度学习·机器学习·计算机视觉·ocr
SomeB1oody7 分钟前
【RustyML入门】3.7. 循环层
开发语言·后端·机器学习·rust·教程
Canace8 分钟前
笔记本都合上了,Claude 为什么还能在手机上执行电脑上装的技能?
前端·人工智能·ai编程
u0103055278 分钟前
昇腾+AtomGit打造AI甘特图应用生产线
人工智能
美狐美颜SDK开放平台9 分钟前
第三方美颜SDK接入教程:直播APP实现实时美颜、滤镜与美型效果的方法
人工智能·深度学习·音视频·sdk·美颜sdk·视频美颜sdk·直播app开发
乱世刀疤9 分钟前
AI Weekly 8.3-8.9
人工智能
AI导出鸭10 分钟前
怎么让豆包做表格?AI导出鸭苹果版将豆包输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
霸道流氓气质2 小时前
普通办公电脑基于 Ollama 的本地 AI 能力技术文档
人工智能·电脑
点云-激光雷达-Slam-三维牙齿2 小时前
速度起飞 笔记本电脑6G显卡llama运行Qwen3.6 35BA3B MTP 大模型
人工智能·python·电脑·llama