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

文章目录

引言

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

一、朴素贝叶斯定理概述

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 分钟前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
言己lxz4 分钟前
阿里云官方技术文档已全面上线 llms.txt —— AI Agent 一站式消费 300+ 款云产品文档
人工智能·阿里云·llmstxt
AI科技星12 分钟前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮16 分钟前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
happyness4416 分钟前
如何让AI重构旧代码
人工智能·重构
dream_home840720 分钟前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
AI服务老曹21 分钟前
Docker部署AI视频分析平台参数配置说明与调优指南
人工智能·docker·音视频
AI大模型-小雄24 分钟前
用 ChatGPT 整理工作资料,正确的提问顺序是什么?附完整操作模板
人工智能·chatgpt·提示词·效率工具·codex·办公技巧·ai办公
AIGS00126 分钟前
跨越语义鸿沟:企业本体语义平台的构建与落地
java·人工智能·python·机器学习·人工智能ai大模型应用
李可以量化30 分钟前
PTrade 量化策略实战:二八轮动策略深度解析(下)
python