【机器学习】——朴素贝叶斯模型

news2024/11/23 21:20:34

💻博主现有专栏:

                C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,设计模式、Python机器学习等
🥏主页链接:

                Y小夜-CSDN博客

目录

🎯本文目的

🎯理解朴素贝叶斯算法的基本原理

💻制作“买房会负债.csv”数据集文件,并用pandas载入数据

💻创建伯努利贝叶斯模型,并用上一步载入的数据训练模型

💻用训练好的模型预测

🎯了解不同朴素贝叶斯变体的差异

💻自己创建分类数据集

💻创建高斯朴素贝叶斯模型

🎯使用朴素贝叶斯模型预测蘑菇分类

💻加载蘑菇数据集

💻数据预处理,创建多项式贝叶斯模型并用预处理过的蘑菇数据集训练

💻多项式朴素贝叶斯模型对蘑菇数据集的预测准确率

💻研究样本数量对朴素贝叶斯模型的影响


🎯本文目的

(一)理解朴素贝叶斯算法的基本原理

(二)能够使用sklearn库进行朴素贝叶斯模型的训练和预测

(三)理解朴素贝叶斯算法三种变体模型适用的数据集的不同情况

🎯理解朴素贝叶斯算法的基本原理

💻制作“买房会负债.csv”数据集文件,并用pandas载入数据

import pandas as pd
data=pd.read_csv('aa.csv')
data.head()

import pandas as pd  # 导入pandas库,用于数据处理和分析
data = pd.read_csv('aa.csv')  # 使用pandas的read_csv函数读取名为'aa.csv'的文件,并将数据存储在变量data中
data.head()  # 使用head函数显示数据的前5行,以便查看数据的结构和内容

💻创建伯努利贝叶斯模型,并用上一步载入的数据训练模型

from sklearn.naive_bayes import BernoulliNB
x=data.drop(['年份','次年房价是否大幅上涨'],axis=1)
y=data['次年房价是否大幅上涨']
clf=BernoulliNB()
clf.fit(x,y)
clf.score(x,y)

# 导入伯努利朴素贝叶斯分类器
from sklearn.naive_bayes import BernoulliNB

# 从数据集中删除'年份'和'次年房价是否大幅上涨'列,作为特征矩阵x
x = data.drop(['年份', '次年房价是否大幅上涨'], axis=1)

# 提取'次年房价是否大幅上涨'列作为目标变量y
y = data['次年房价是否大幅上涨']

# 创建伯努利朴素贝叶斯分类器实例
clf = BernoulliNB()

# 使用特征矩阵x和目标变量y训练分类器
clf.fit(x, y)

# 计算分类器的准确率
clf.score(x, y)

💻用训练好的模型预测

x_2019=[[0,1,0]]
y_2020=clf.predict(x_2019)
print(y_2020)
x_2020=[[1,1,0]]
y_2021=clf.predict(x_2020)
print(y_2021)

# 定义一个二维列表x_2019,其中包含一个子列表[0, 1, 0]
x_2019 = [[0, 1, 0]]

# 使用分类器clf对x_2019进行预测,将结果存储在变量y_2020中
y_2020 = clf.predict(x_2019)

# 打印预测结果y_2020
print(y_2020)

# 定义一个二维列表x_2020,其中包含一个子列表[1, 1, 0]
x_2020 = [[1, 1, 0]]

# 使用分类器clf对x_2020进行预测,将结果存储在变量y_2021中
y_2021 = clf.predict(x_2020)

# 打印预测结果y_2021
print(y_2021)

🎯了解不同朴素贝叶斯变体的差异

💻自己创建分类数据集

from sklearn.datasets import make_blobs
from sklearn.naive_bayes import BernoulliNB
from sklearn.model_selection import train_test_split
x,y=make_blobs(n_samples=400,centers=4,random_state=8)

# 导入make_blobs函数,用于生成聚类算法的数据集
from sklearn.datasets import make_blobs
# 导入BernoulliNB模块,即伯努利朴素贝叶斯分类器
from sklearn.naive_bayes import BernoulliNB
# 导入train_test_split函数,用于将数据集划分为训练集和测试集
from sklearn.model_selection import train_test_split

# 使用make_blobs函数生成一个包含400个样本、4个中心点的数据集
x, y = make_blobs(n_samples=400, centers=4, random_state=8)

💻创建伯努利朴素贝叶斯模型,并用自己创建的分类数据集进行训练和可视化。

x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
nb=BernoulliNB()
nb.fit(x_train,y_train)

# 导入train_test_split函数,用于将数据集划分为训练集和测试集
from sklearn.model_selection import train_test_split

# 导入BernoulliNB类,用于创建伯努利朴素贝叶斯分类器
from sklearn.naive_bayes import BernoulliNB

# 使用train_test_split函数将数据集x和y划分为训练集和测试集
# x_train, x_test为特征数据的训练集和测试集
# y_train, y_test为标签数据的训练集和测试集
# random_state参数设置为8,确保每次划分的结果一致
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=8)

# 创建一个伯努利朴素贝叶斯分类器实例
nb = BernoulliNB()

# 使用训练集数据对分类器进行训练
nb.fit(x_train, y_train)
 


import numpy as np
import matplotlib.pyplot as plt

# 获取x的最小值和最大值,并分别减去0.5和加上0.5
x_min, x_max = x[:, 0].min() - 0.5, x[:, 0].max() + 0.5
y_min, y_max = x[:, 1].min() - 0.5, x[:, 1].max() + 0.5

# 使用numpy的meshgrid函数生成网格点坐标矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, .2),
                     np.arange(y_min, y_max, .2))

# 使用朴素贝叶斯模型进行预测,并将结果重塑为与xx相同的形状
z = nb.predict(np.c_[(xx.ravel(), yy.ravel())]).reshape(xx.shape)

# 使用pcolormesh函数绘制分类区域
plt.pcolormesh(xx, yy, z, cmap=plt.cm.Pastel1)

# 使用scatter函数绘制样本点,并根据类别进行着色
plt.scatter(x[:, 0], x[:, 1], c=y, cmap=plt.cm.Pastel2, edgecolor='k')

# 设置x轴和y轴的范围
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())

# 设置图表标题
plt.title('BernoulliNB')

# 显示图表
plt.show()

        这段代码使用了NumPy和Matplotlib库来进行数据可视化。首先,它导入了这两个库。然后,它获取了输入数据的最小值和最大值,并分别减去0.5和加上0.5,以便在图表中留出一些边距。接下来,它使用np.meshgrid函数生成了一个网格点坐标矩阵,用于绘制分类区域。然后,它使用朴素贝叶斯模型对网格点进行预测,并将结果重塑为与网格点坐标矩阵相同的形状。接着,它使用plt.pcolormesh函数绘制了分类区域,并使用plt.scatter函数绘制了样本点,根据类别进行着色。最后,它设置了x轴和y轴的范围,并添加了图表标题。最终,通过调用plt.show()函数显示了图表。

💻创建高斯朴素贝叶斯模型

from sklearn.naive_bayes import GaussianNB
gnb=GaussianNB()
gnb.fit(x_train,y_train)
print('模型得分:{:,.3f}'.format(gnb.score(x_test,y_test)))

# 导入sklearn库中的高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB

# 创建一个GaussianNB对象,用于后续的模型训练和预测
gnb = GaussianNB()

# 使用训练数据集x_train和对应的标签y_train来训练模型
gnb.fit(x_train, y_train)

# 使用测试数据集x_test和对应的标签y_test来评估模型的性能,并打印出模型的得分
print('模型得分:{:,.3f}'.format(gnb.score(x_test, y_test)))
 


z_gnb=gnb.predict(np.c_[(xx.ravel(),yy.ravel())]).reshape(xx.shape)
plt.pcolormesh(xx,yy,z_gnb,cmap=plt.cm.Pastel1)
plt.scatter(x[:,0],x[:,1],c=y,cmap=plt.cm.Pastel2,edgecolor='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title('GaussianNB')
plt.show()

# 使用高斯朴素贝叶斯模型进行预测,并将结果重塑为与xx相同的形状
z_gnb = gnb.predict(np.c_[(xx.ravel(), yy.ravel())]).reshape(xx.shape)

# 绘制预测结果的网格图,使用Pastel1颜色映射
plt.pcolormesh(xx, yy, z_gnb, cmap=plt.cm.Pastel1)

# 绘制原始数据的散点图,使用Pastel2颜色映射,并设置边缘颜色为黑色
plt.scatter(x[:, 0], x[:, 1], c=y, cmap=plt.cm.Pastel2, edgecolor='k')

# 设置x轴和y轴的范围为xx和yy的最小值和最大值
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())

# 设置图表标题为'GaussianNB'
plt.title('GaussianNB')

# 显示图表
plt.show()

🎯使用朴素贝叶斯模型预测蘑菇分类

💻加载蘑菇数据集

import pandas as pd
mushroom=pd.read_csv('mushroom.csv')
mushroom.head()

import pandas as pd  # 导入pandas库,用于数据处理和分析
mushroom = pd.read_csv('mushroom.csv')  # 使用pandas的read_csv函数读取名为'mushroom.csv'的文件,并将其存储在变量mushroom中
mushroom.head()  # 使用pandas的head函数显示mushroom的前5行数据

💻数据预处理,创建多项式贝叶斯模型并用预处理过的蘑菇数据集训练

# 导入sklearn库中的train_test_split函数,用于将数据集划分为训练集和测试集
from sklearn.model_selection import train_test_split

# 使用isnull()函数检查mushroom数据集中是否存在缺失值,并使用sum()函数统计每列的缺失值数量
mushroom.isnull().sum()


 
# 获取mushroom字典中'class'键对应的唯一值,并返回一个包含这些唯一值的数组
unique_classes = mushroom['class'].unique()


from sklearn.preprocessing import LabelEncoder
labelencoder=LabelEncoder()
for col in mushroom.columns:
    mushroom[col]=labelencoder.fit_transform(mushroom[col])
mushroom.head()

# 导入LabelEncoder模块,用于将类别标签转换为整数编码
from sklearn.preprocessing import LabelEncoder

# 创建LabelEncoder对象
labelencoder = LabelEncoder()

# 遍历数据集的每一列
for col in mushroom.columns:
    # 使用LabelEncoder的fit_transform方法将每一列的类别标签转换为整数编码
    mushroom[col] = labelencoder.fit_transform(mushroom[col])

# 显示数据集的前几行
mushroom.head()
 


# 导入pandas库
import pandas as pd

# 读取名为mushroom的数据集
mushroom = pd.read_csv('mushroom.csv')

# 使用groupby方法按照'class'列对数据进行分组,并计算每个分组的大小(即每个类别的数量)
print(mushroom.groupby('class').size())

💻多项式朴素贝叶斯模型对蘑菇数据集的预测准确率

from sklearn.naive_bayes import MultinomialNB
x=mushroom.iloc[:,1:23]
y=mushroom.iloc[:, 0]
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=42)
mnb=MultinomialNB()
mnb.fit(x_train,y_train)
print(mnb.score(x_train,y_train))
print(mnb.score(x_test,y_test))

# 导入sklearn库中的MultinomialNB模块,用于实现多项式朴素贝叶斯分类器
from sklearn.naive_bayes import MultinomialNB

# 从mushroom数据集中提取特征矩阵x(第1列到第23列)
x = mushroom.iloc[:, 1:23]

# 从mushroom数据集中提取目标变量y(第0列)
y = mushroom.iloc[:, 0]

# 将数据集划分为训练集和测试集,其中测试集占比为30%,随机种子为42
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=42)

# 创建一个多项式朴素贝叶斯分类器对象
mnb = MultinomialNB()

# 使用训练集对分类器进行训练
mnb.fit(x_train, y_train)

# 输出训练集上的准确率
print(mnb.score(x_train, y_train))

# 输出测试集上的准确率
print(mnb.score(x_test, y_test))

💻研究样本数量对朴素贝叶斯模型的影响

import numpy as np 
from sklearn.model_selection import learning_curve
from sklearn.model_selection import ShuffleSplit
from sklearn.naive_bayes import GaussianNB
import matplotlib.pyplot as plt
def plot_learning_curve(estimator,title,x,y,ylim=None,cv=None,n_jobs=-1,train_sizes=np.linspace(.1, 1.0,5)):
    plt.figure()
    plt.title(title)
    if ylim is not None:
        plt.ylim(*ylim)
    plt.xlabel('Training examples')
    plt.ylabel('Score')
    train_sizes,train_scores,test_scores=learning_curve(estimator,x,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)
    train_scores_mean=np.mean(train_scores,axis=1)
    test_scores_mean=np.mean(test_scores,axis=1) 
    plt.grid()
    plt.plot(train_sizes,train_scores_mean,'o-',color='r',label='Training score')
    plt.plot(train_sizes,test_scores_mean,'o-',color='g',label='Coss-validation score')
    plt.legend(loc='lower right')
    return plt
cv=ShuffleSplit(n_splits=30,test_size=0.3,random_state=28)
estimators=[MultinomialNB(),GaussianNB()]
for estimator in estimators:
    title=estimators
    plot_learning_curve(estimator,title,x,y,ylim=(0.5,1.0),cv=cv,n_jobs=-1)
plt.show()

import numpy as np  # 导入numpy库,用于进行数值计算
from sklearn.model_selection import learning_curve  # 导入学习曲线函数
from sklearn.model_selection import ShuffleSplit  # 导入随机划分数据集的函数
from sklearn.naive_bayes import GaussianNB  # 导入高斯朴素贝叶斯分类器
import matplotlib.pyplot as plt  # 导入绘图库matplotlib

# 定义绘制学习曲线的函数
def plot_learning_curve(estimator, title, x, y, ylim=None, cv=None, n_jobs=-1, train_sizes=np.linspace(.1, 1.0, 5)):
    plt.figure()  # 创建一个新的图形
    plt.title(title)  # 设置图形标题
    if ylim is not None:  # 如果y轴范围不为空,则设置y轴范围
        plt.ylim(*ylim)
    plt.xlabel('Training examples')  # 设置x轴标签
    plt.ylabel('Score')  # 设置y轴标签
    # 调用学习曲线函数,获取训练集大小、训练得分和测试得分
    train_sizes, train_scores, test_scores = learning_curve(estimator, x, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
    train_scores_mean = np.mean(train_scores, axis=1)  # 计算训练得分的均值
    test_scores_mean = np.mean(test_scores, axis=1)  # 计算测试得分的均值
    plt.grid()  # 添加网格线
    # 绘制训练得分曲线
    plt.plot(train_sizes, train_scores_mean, 'o-', color='r', label='Training score')
    # 绘制交叉验证得分曲线
    plt.plot(train_sizes, test_scores_mean, 'o-', color='g', label='Coss-validation score')
    plt.legend(loc='lower right')  # 设置图例位置
    return plt

cv = ShuffleSplit(n_splits=30, test_size=0.3, random_state=28)  # 创建随机划分数据集的对象
estimators = [MultinomialNB(), GaussianNB()]  # 创建分类器列表
for estimator in estimators:  # 遍历分类器列表
    title = estimators  # 设置图形标题为分类器名称
    plot_learning_curve(estimator, title, x, y, ylim=(0.5, 1.0), cv=cv, n_jobs=-1)  # 调用绘制学习曲线函数
plt.show()  # 显示图形

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2246252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转

效果图&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片预览</title><sty…

数据结构 ——— 快速排序算法的实现(hoare版本)

目录 快速排序的思想 单趟排序逻辑的实现 快速排序算法的实现 快速排序的思想 任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子列中所有元素均小于基准值&#xff0c;右子席列中所有元素均大于基准值&#xff0…

Nmap识别MongoDB 6.0指纹

Nmap识别MongoDB 6.0指纹 朋友反馈一个问题&#xff0c;说使用Nmap扫描MongoDB服务时对于6.0以上的版本默认无法识别到服务版本信息。 如上图所示&#xff0c;对应的VERSION信息是空的&#xff0c;在提示信息中可以看到&#xff0c;官方推荐将指纹信息上传以帮助更新服务指纹&…

论文阅读:A fast, scalable and versatile tool for analysis of single-cell omics data

Zhang, K., Zemke, N.R., Armand, E.J. et al. A fast, scalable and versatile tool for analysis of single-cell omics data. Nat Methods 21, 217–227 (2024). 论文地址&#xff1a;https://doi.org/10.1038/s41592-023-02139-9 代码地址&#xff1a;https://github.com…

飞凌嵌入式旗下教育品牌ElfBoard与西安科技大学共建「科教融合基地」

近日&#xff0c;飞凌嵌入式与西安科技大学共同举办了“科教融合基地”签约揭牌仪式。此次合作旨在深化嵌入式创新人才的培育&#xff0c;加速科技成果的转化应用&#xff0c;标志着双方共同开启了一段校企合作的新篇章。 出席本次签约揭牌仪式的有飞凌嵌入式梁总、高总等一行…

2024年11月21日Github流行趋势

项目名称&#xff1a;twenty 项目维护者&#xff1a;charlesBochet, lucasbordeau, Weiko, FelixMalfait, bosiraphael项目介绍&#xff1a;正在构建一个由社区支持的现代化Salesforce替代品。项目star数&#xff1a;21,798项目fork数&#xff1a;2,347 项目名称&#xff1a;p…

VSCode汉化教程【简洁易懂】

我们安装完成后默认是英文界面。 找到插件选项卡&#xff0c;搜索“Chinese”&#xff0c;找到简体&#xff08;更具你的需要&#xff09;&#xff08;Microsoft提供&#xff09;Install。 安装完成后选择Change Language and Restart。

Leetcode 生命游戏

以下是上述Java代码的算法思想及其逻辑的中文解释&#xff1a; 算法思想 这段代码实现了LeetCode第289题“生命游戏”的解决方案。核心思想是&#xff1a; 利用原地修改的方式&#xff08;in-place&#xff09;存储下一状态的变化&#xff1a; 通过引入额外的状态值&#xff0…

C++【面试重要题目】 只出现一次的数字的集合.

文章目录 前言一、前提要点补充二、题集总结 前言 本篇笔者将会对 cpp 中比较有意思的类型题目进行细致讲解 . 这类题同时也是面试中比较重要的算法题 , 其算法思想需要学者掌握. 以下题目均来自力扣 一、前提要点补充 ● 几个运用运算符 因为笔者介绍的题目均会用到二进制…

麒麟部署一套NFS服务器,用于创建网络文件系统

一、服务端共享目录 在本例中,kyserver01(172.16.200.10)作为客户端,创建一个目录/testdir并挂载共享目录;kyserver02(172.16.200.11)作为服务端,创建一个共享目录/test,设置为读写权限,要求客户端使用root登录时映射为nobody用户、非root登录时保持不变。 服务端启…

VBA技术资料MF228:移动形状并覆盖某单元格区域

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Python 数据分析核心库大全!

&#xff08;欢迎关注我的视频号&#xff09; &#x1f447;我的小册 45章教程:(小白零基础用Python量化股票分析小册) ,原价299&#xff0c;限时特价2杯咖啡&#xff0c;满100人涨10元。 大家好&#xff01;我是菜鸟哥&#xff01; 今天我们来聊点干货&#xff1a;Python 数据…

跨境出海安全:如何防止PayPal账户被风控?

今天咱们聊聊那些让人头疼的事儿——PayPal账户被风控。不少跨境电商商家反馈&#xff0c;我们只是想要安安静静地在网上做个小生意&#xff0c;结果不知道为什么&#xff0c;莫名其妙账户就被冻结了。 但其实每个封禁都是有原因的&#xff0c;今天就来给大家分享分享可能的原…

39页PDF | 毕马威_数据资产运营白皮书(限免下载)

一、前言 《毕马威数据资产运营白皮书》探讨了数据作为新型生产要素在企业数智化转型中的重要性&#xff0c;提出了数据资产运营的“三要素”&#xff08;组织与意识、流程与规范、平台与工具&#xff09;和“四重奏”&#xff08;数据资产盘点、评估、治理、共享&#xff09;…

数据科学与SQL:组距分组分析 | 区间分布问题

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言&#xff0c;一个记录对应的指标值的绝对值&#xff0c;肯定落在所有指标值的绝对值的最小值和最大值构成的区间内&#xff0c;根据一定的算法&#x…

使用 PyTorch-BigGraph 构建和部署大规模图嵌入的完整教程

当涉及到图数据时&#xff0c;复杂性是不可避免的。无论是社交网络中的庞大互联关系、像 Freebase 这样的知识图谱&#xff0c;还是推荐引擎中海量的数据量&#xff0c;处理如此规模的图数据都充满挑战。 尤其是当目标是生成能够准确捕捉这些关系本质的嵌入表示时&#xff0c;…

23种设计模式-模板方法(Template Method)设计模式

文章目录 一.什么是模板方法模式&#xff1f;二.模板方法模式的特点三.模板方法模式的结构四.模板方法模式的应用场景五.模板方法模式的优缺点六.模板方法模式的C实现七.模板方法模式的JAVA实现八.代码解析九.总结 类图&#xff1a; 模板方法设计模式类图 一.什么是模板方法模…

.net的winfrom程序 窗体透明打开窗体时出现在屏幕右上角

窗体透明&#xff0c; 将Form的属性Opacity&#xff0c;由默认的100% 调整到 80%(尽量别低于50%)&#xff0c;这个数字越小越透明&#xff01; 打开窗体时出现在屏幕右上角 //构造函数 public frmCalendarList() {InitializeComponent();//打开窗体&#xff0c;窗体出现在屏幕…

DRNN 神经网络的Jacobian 信息辨识

DRNN 神经网络的 Jacobian 信息辨识 1. 基本原理 Jacobian 矩阵用于描述多输入多输出系统中输入和输出之间的偏导关系&#xff0c;其形式为&#xff1a; 对于 DRNN&#xff08;Dynamic Recurrent Neural Network&#xff09;&#xff0c;其动态特性使得 y(t)\mathbf{y}(t)y(t…

iptables网络安全服务详细使用

iptables防火墙概念说明 开源的基于数据包过滤的网络安全策略控制工具。 centos6.9 --- 默认防火墙工具软件iptables centos7 --- 默认防火墙工具软件firewalld&#xff08;zone&#xff09; iptables主要工作在OSI七层的二、三、四层&#xff0c;如果重新编译内核&…