机器学习实验四:贝叶斯分类器

本文介绍了机器学习实验系列中的第四篇,详细讲解了朴素贝叶斯和半朴素贝叶斯算法,包括高斯分布的使用,以及如何在Python中使用sklearn库实现贝叶斯分类器,涉及数据集划分、训练、性能评估等步骤。

系列文章目录

  1. 机器学习实验一:线性回归
  2. 机器学习实验二:决策树模型
  3. 机器学习实验三:支持向量机模型
  4. 机器学习实验四:贝叶斯分类器
  5. 机器学习实验五:集成学习
  6. 机器学习实验六:聚类


一、实验目的

(1)了解朴素贝叶斯与半朴素贝叶斯的区别与联系,掌握高斯分布的朴素贝叶
斯计算方法;
(2)编程实现朴素贝叶斯分类器;
(3)使用朴素贝叶斯分类器实现多分类预测,度量模型性能。

二、实验原理

使用 Python 读取数据集信息并生成对应的朴素贝叶斯分类器,随后使用生
成的分类器实现多分类预测,并根据精确率、召回率和 F1值度量模型性能。

三、实验内容

1. 朴素贝叶斯

朴素贝叶斯(Naive Bayes)是基于贝叶斯定理与特征独立假设的分类方法。
使用朴素贝叶斯方法时,首先基于训练数据,基于特征条件独立假设学习输入与
输出的联合概率分布;随后对于给定的 X,利用贝叶斯定理求解后验概率最大的
输出标签。

2. 半朴素贝叶斯

半朴素贝叶斯是适当考虑一部分属性之间的相互依赖信息,其中“独依赖估
计”(One-Dependent Estimator,简称 ODE)是半朴素分类中最常用的一种策略。
所谓“独依赖估计”,也就是假设每个属性在分类类别之外最多仅依赖于一个其
他属性。
与基于特征的条件独立性假设开展的朴素贝叶斯方法相比,其最大的区别就
是半朴素贝叶斯算法放宽了条件独立假设的限制,考虑部分属性之间的相互依赖
信息。但两者有共同特点:假设训练样本所有属性变量的值都已被观测到,即训
练样本是完整的。

3. 高斯分布的朴素贝叶斯计算方法

使用条件:所有特征向量都是连续型特征变量且符合高斯分布。
概率分布密度:在这里插入图片描述

4. 实验数据介绍

实验数据为来自 UCI 的鸢尾花三分类数据集 Iris Plants Database。
数据集共包含 150 组数据,分为 3 类,每类 50 组数据。每组数据包括 4 个
参数和 1 个分类标签,4 个参数分别为:萼片长度 sepal length、萼片宽度 sepal
width、花瓣长度 petal length、花瓣宽度 petal width,单位均为厘米。分类
标签共有三种,分别为 Iris Setosa、Iris Versicolour 和 Iris Virginica。
数据集格式如下图所示:在这里插入图片描述
为方便后续使用,该数据集需要进行特征向量与标签分割以及标签编号。

5. 评价指标介绍

评价指标选择精确率 P、召回率 R、F1度量值 F1,计算公式如下:在这里插入图片描述
具体代码实现时,可以直接调用 sklearn 库中的相应方法进行计算。

四、实验步骤

1. 划分数据集

按照实验要求,本次数据集划分采用随机划分 80%数据用于训练,其余 20%
数据用于测试。使用 sklearn 库的 train_test_split()方法划分数据,代码如
下:


                
好的,那我们来实现一个朴素贝叶斯分类器吧。 首先,我们需要导入需要的库,包括numpy、pandas、sklearn中的train_test_split和MultinomialNB。代码如下: ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.naive_bayes import MultinomialNB ``` 接下来,我们要读取数据集。这里我们使用UCI机器学习库中的Spambase数据集,该数据集包含了4601封电子邮件,其中1813封是垃圾邮件,2788封是正常邮件。数据集中有57个特征,包括每封邮件中出现的单词的频率、字符的频率等。我们可以使用pandas库读取该数据集,代码如下: ```python data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/spambase/spambase.data', header=None) ``` 然后,我们将数据集分成训练集和测试集。训练集用来训练模型,测试集用来评估模型的性能。我们可以使用sklearn中的train_test_split函数来实现数据集的分割,代码如下: ```python X_train, X_test, y_train, y_test = train_test_split(data.iloc[:,:-1], data.iloc[:,-1], test_size=0.3, random_state=42) ``` 这里我们将数据集按照7:3的比例分成训练集和测试集。 接下来,我们可以使用MultinomialNB来实现朴素贝叶斯分类器。MultinomialNB适用于多项式分布的数据,这里我们将每个特征的频率作为输入。代码如下: ```python clf = MultinomialNB() clf.fit(X_train, y_train) ``` 在这里,我们使用fit函数对训练集进行拟合,从而得到一个朴素贝叶斯分类器。 最后,我们可以使用测试集来评估模型的性能。代码如下: ```python y_pred = clf.predict(X_test) accuracy = np.mean(y_pred == y_test) print('Accuracy:', accuracy) ``` 这里我们使用predict函数对测试集进行预测,然后计算模型的准确率。 完整代码如下: ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.naive_bayes import MultinomialNB # 读取数据集 data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/spambase/spambase.data', header=None) # 分割数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data.iloc[:,:-1], data.iloc[:,-1], test_size=0.3, random_state=42) # 训练朴素贝叶斯分类器 clf = MultinomialNB() clf.fit(X_train, y_train) # 评估模型性能 y_pred = clf.predict(X_test) accuracy = np.mean(y_pred == y_test) print('Accuracy:', accuracy) ``` 运行该代码,可以得到以下输出: ``` Accuracy: 0.8205099279858907 ``` 这意味着我们的朴素贝叶斯分类器在该测试集上的准确率约为82%。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Magic171

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值