基于Python的机器学习系列(10):朴素贝叶斯 - 多项式模型

2024-08-23 11:12

本文主要是介绍基于Python的机器学习系列(10):朴素贝叶斯 - 多项式模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在之前的文章中,我们已经探讨了朴素贝叶斯分类器在不同情况下的应用。本文将继续深入探讨,重点介绍朴素贝叶斯分类器中的多项式模型。

1. 背景介绍

        朴素贝叶斯分类器是一种基于贝叶斯定理的简单却强大的分类算法。在之前的文章中,我们介绍了高斯朴素贝叶斯模型,它假设特征服从高斯分布。然而,对于一些特定类型的数据,例如词频或计数数据,高斯分布并不是最合适的选择。这时,我们可以使用多项式朴素贝叶斯模型,它假设特征值来自多项分布,特别适用于文本分类问题。

        多项式朴素贝叶斯模型通常用于处理与文档分类相关的问题,在这些问题中,特征值(例如单词计数或频率)以类别为条件生成。贝叶斯定理告诉我们如何将这些信息转化为对某一类别的概率估计,公式如下:

        其中,P(y|w)是后验概率,P(w|y)是给定类别下词频的条件概率,P(y)是先验概率,P(w)是证据。

2. 实现步骤
  1. 准备数据
    将数据集转换为适合多项式朴素贝叶斯模型的格式,通常是词频矩阵。

  2. 计算条件概率
    对于每一个单词,根据其在训练集中不同类别下的出现频率,计算其条件概率。这些条件概率用于评估新数据属于每一个类别的可能性。

  3. 拉普拉斯平滑
    为了防止零概率问题,我们对所有条件概率进行拉普拉斯平滑。

  4. 计算先验概率
    先验概率是训练集中每个类别的样本数量占总样本数量的比例。

  5. 预测新数据的类别
    使用测试数据中的词频矩阵计算每个类别的后验概率,并选择概率最大的类别作为预测结果。

3. 代码实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, average_precision_score# 模拟数据集
train = np.array(['Chinese Beijing Chinese','Chinese Chinese Shanghai','Chinese Macao','Tokyo Japan Chinese',
])
test = np.array(['Chinese Chinese Chinese Tokyo Japan'
])
train_target = np.array([1, 1, 1, 0])# 文本向量化
vectorizer = CountVectorizer()
X_train = vectorizer.fit_transform(train)
X_test = vectorizer.transform(test)# 条件概率计算
def likelihood(X_class, laplace=1):return ((X_class.sum(axis=0)) + laplace) / (np.sum(X_class.sum(axis=0) + laplace))X_train_class1 = X_train[train_target == 1]
X_train_class0 = X_train[train_target == 0]
likelihood1 = likelihood(X_train_class1)
likelihood0 = likelihood(X_train_class0)# 先验概率计算
prior1 = len(train_target[train_target==1])/len(train_target)
prior0 = len(train_target[train_target==0])/len(train_target)# 预测测试数据
pxtest_y1 = np.prod(np.power(likelihood1, X_test.toarray()))
pxtest_y0 = np.prod(np.power(likelihood0, X_test.toarray()))
py1_x = prior1 * pxtest_y1
py0_x = prior0 * pxtest_y0# 输出结果
yhat = 1 * (py1_x > py0_x)
print("预测结果: ", yhat)
4. 使用Sklearn实现多项式朴素贝叶斯

        虽然我们已经从头实现了多项式朴素贝叶斯分类器,但在实际应用中,通常使用现有的库来提高开发效率。Scikit-Learn中的MultinomialNB类正是为此设计的。

from sklearn.naive_bayes import MultinomialNBmodel = MultinomialNB()
model.fit(X_train, train_target)
yhat = model.predict(X_test)
print("预测结果: ", yhat)
5. 结语

        朴素贝叶斯分类器由于其简洁和高效,通常作为基线模型使用。虽然其假设相对严格,但在许多实际应用中,尤其是文本分类任务中,表现依然非常出色。与高斯朴素贝叶斯不同,多项式朴素贝叶斯适用于离散特征数据(如词频矩阵),且在处理大规模文本数据时非常高效。

        下一篇文章中,我们将探讨另一种常见的分类算法——K-Nearest Neighbors。

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

这篇关于基于Python的机器学习系列(10):朴素贝叶斯 - 多项式模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099213

相关文章

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v