【机器学习实战项目】10分钟学会Python怎么用朴素贝叶斯Bayes进行分类预测(二)

简介: 【机器学习实战项目】10分钟学会Python怎么用朴素贝叶斯Bayes进行分类预测(二)

[toc]

1 前言

1.1 朴素贝叶斯的介绍

朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的分类算法,它假设各个特征之间相互独立,因此可以通过计算每个特征的条件概率来预测类别。该算法通常用于文本分类和垃圾邮件过滤等任务。

优点:

  • 朴素贝叶斯模型易于实现,计算速度快。
  • 即使特征之间存在一定的相关性,朴素贝叶斯模型仍然可以处理。
  • 适用于高维数据集,并且在小数据集上也能表现良好。

缺点:

  • 朴素贝叶斯模型假设特征之间相互独立,这在实际情况下很少成立。
  • 朴素贝叶斯模型对输入数据的准确性要求较高,如果输入数据有误差,则会导致错误的预测。
  • 朴素贝叶斯模型通常需要更多的数据才能获得更好的分类效果。

1.2 朴素贝叶斯的应用

朴素贝叶斯是一种常见的分类算法,主要应用于以下领域:

  1. 文本分类:朴素贝叶斯是文本分类任务中常用的算法,例如垃圾邮件分类、情感分析等。
  2. 推荐系统:朴素贝叶斯可以用于对用户进行分类,例如将用户分为购买和不购买两类,进而进行个性化推荐。
  3. 生物信息学:朴素贝叶斯可以用于分析基因表达数据和基因序列。
  4. 金融风险评估:朴素贝叶斯可以用于评估贷款申请者的信用风险。
  5. 医学诊断:朴素贝叶斯可以用于预测患病概率,例如预测某种疾病的患病率或判断某种疾病的诊断结果等。

2 iris数据集演示

2.1 导入函数

import warnings
warnings.filterwarnings('ignore')
import numpy as np
# 加载数据集
from sklearn import datasets
# 导入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split

2.2 导入数据

# 例行公事,训练集测试集还是7/3分
X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

2.3 训练模型

# 使用高斯朴素贝叶斯进行计算
clf = GaussianNB(var_smoothing=1e-8)
clf.fit(X_train, y_train)

2.4 预测模型

# 评估
y_pred = clf.predict(X_test)
acc = np.sum(y_test == y_pred) / X_test.shape[0]
print("Test Acc : %.3f" % acc)
# 预测
y_proba = clf.predict_proba(X_test[:1])
print(clf.predict(X_test[:1]))
print("预计的概率值:", y_proba)

高斯朴素贝叶斯假设每个特征都服从高斯分布,我们把一个随机变量X服从数学期望为μ,方差为σ2的数据分布称为高斯分布。对于每个特征我们一般使用平均值来估计μ和使用所有特征的方差估计σ2

Acc能达到1,一如既往的nice;根据结果计算后类别2对应的后验概率值最大,所以我们认为类别2是最优的结果

3 模拟离散数据演示

3.1 导入函数

import random
import numpy as np
# 使用基于类目特征的朴素贝叶斯
from sklearn.naive_bayes import CategoricalNB
from sklearn.model_selection import train_test_split

3.2 模拟/导入数据

# 模拟数据
rng = np.random.RandomState(1)
# 随机生成600个100维的数据,每一维的特征都是[0, 4]之前的整数
X = rng.randint(5, size=(600, 100))
y = np.array([1, 2, 3, 4, 5, 6] * 100)
data = np.c_[X, y]
# X和y进行整体打散
random.shuffle(data)
X = data[:,:-1]
y = data[:, -1]
# 还是继续7/3分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

3.3 训练模型

clf = CategoricalNB(alpha=1)
clf.fit(X_train, y_train)
acc = clf.score(X_test, y_test)
# 评估
print("Test Acc : %.3f" % acc)

Acc大大降低了,只有个0.65,没办法,毕竟是个随机数据集,所以不具备太多但是为了满足自己的小小心思,写了个for循环,简单设置随机种子取1至1000,大于一个值跳出循环,反复试了几次,最高仅能过0.7,0.75都达不到。服务器试的,1000个循环个人PC还是尽量不要试了。

3.4 预测模型

x = rng.randint(5, size=(1, 100))
print(clf.predict_proba(x))
print(clf.predict(x))

预测结果是4

4 原理补充说明

4.1 贝叶斯算法

关于alpha=1这个参数的含义,首先要明确贝叶斯法需要计算的两个概率:

  • 条件概率
  • 类目 ck 的先验概率

对每一个变量的多加了一个频数alpha。当alphaλ=0时,就是极大似然估计。通常取值alpha=1,这就是拉普拉斯平滑(Laplace smoothing),这有叫做贝叶斯估计,主要是因为如果使用极大似然估计,如果某个特征值在训练数据中没有出现,这时候会出现概率为0的情况,导致整个估计都为0,因为引入贝叶斯估计。

4.2 朴素贝叶斯算法

朴素贝叶斯法 = 贝叶斯定理 + 特征条件独立

根据推导和化简后的公式:

5 讨论

  • 朴素贝叶斯模型与其他分类方法相比具有最小的理论误差率。
  • 在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。
  • 解决特征之间的相关性,可以使用数据降维(PCA)的方法,去除特征相关性,再进行朴素贝叶斯计算。
目录
打赏
0
0
0
0
18
分享
相关文章
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
100 7
怎么开发Python第三方库?手把手教你参与开源项目!
大家好,我是程序员晚枫。本文将分享如何开发Python第三方库,并以我维护的开源项目 **popdf** 为例,指导参与开源贡献。Popdf是一个PDF操作库,支持PDF转Word、转图片、合并与加密等功能。文章涵盖从fork项目、本地开发、单元测试到提交PR的全流程,适合想了解开源贡献的开发者。欢迎访问[popdf](https://gitcode.com/python4office/popdf),一起交流学习!
68 21
怎么开发Python第三方库?手把手教你参与开源项目!
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
113 0
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
80 9
Python与机器学习:使用Scikit-learn进行数据建模
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
276 6
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
56 6
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等