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

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

文章目录

  • 引言
  • 一、朴素贝叶斯定理概述
    • 1.从贝叶斯定理说起
    • 2.朴素贝叶斯的“朴素”之处
    • 3.朴素贝叶斯算法的应用
  • 二、朴素贝叶斯算法的优缺点
  • 三、python代码实现案例
    • 1.导入库
    • 2.数据预处理
    • 3.模型训练
    • 4.模型评估
    • 5.完整代码
  • 四、总结

引言

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

一、朴素贝叶斯定理概述

1.从贝叶斯定理说起

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

公式表示为:

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

其中:

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

2.朴素贝叶斯的“朴素”之处

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

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

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

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

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

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

优点:

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

缺点:

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

三、python代码实现案例

1.导入库

import pandas as pd
  • pandas:用于数据处理和分析。

2.数据预处理

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.模型训练

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

4.模型评估

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.完整代码

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


四、总结

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

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


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

相关文章:

  • Redis项目:短信验证码登录
  • 【JDK17】开源应用服务器大比对
  • logparser日志分析详解
  • ubuntu20.04安装mysql-workbench
  • DataWhale 大语言模型 - 模型详细配置
  • conda 的 envs_dirs 配置出错
  • 解决 ECharts 切换图表时的 Resize 问题
  • 博客图床 VsCode + PicGo + 阿里云OSS
  • SQLark中如何进行数据筛选与排序
  • 批量测试IP和域名联通性2
  • Seaborn 数据可视化指南:核心功能与实战技巧
  • Android wifi的开关Settings值异常分析
  • Type-C:智能家居的电力革命与空间美学重构
  • 前端vue3 setup,后端fastapi
  • 09.【C++】list链表(STL中的列表容器,C++封装的带头双向链表,可实现指定类型的增删查改,迭代器操作等功能)
  • Qt 中工具窗体与普通窗体在任务栏中的区别
  • 基于微信小程序的网上商城
  • jmeter-sample
  • MySQL日期转字符串,字符串转日期的函数
  • Skia 图形引擎介绍