Scikit-Learn中实践朴素贝叶斯

本文通过使用sklearn库中的三种朴素贝叶斯模型(高斯、伯努利和多项式)对digits数据集进行分类预测,详细介绍了如何调整平滑参数以优化模型性能。通过绘制不同平滑参数下模型在训练集和测试集上的得分曲线,确定了最佳参数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import  load_digits 
from sklearn.model_selection import train_test_split

载入数据集并观察数据

digits = load_digits()
digits.keys()
#打印数据描述信息
print(digits.DESCR)
#查看数据形状,每个数据有64个维度
digits.data.shape
#第一张图像的数据
digits.data[0]

建立朴素贝叶斯模型

# 导入三个贝叶斯模型
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import BernoulliNB
from sklearn.naive_bayes import MultinomialNB
#实例化三个模型
bnb = BernoulliNB(alpha=1.0)
mnb = MultinomialNB(alpha=1.0)
gnb = GaussianNB()
#分别采用三个模型对数据进行学习
bnb.fit(X_train,y_train)
mnb.fit(X_train,y_train)
gnb.fit(X_train,y_train)
#查询结果
bnb.score(X_train,y_train)
bnb.score(X_test,y_test)
mnb.score(X_train,y_train)
mnb.score(X_test,y_test)
gnb.score(X_train,y_train)
gnb.score(X_test,y_test)

结果

train_score = []
test_score = []
#参数变化从1.0每次减小0.01,减小到0.01
for i in np.arange(1,0,-0.01):
    #采用当前遍历的i值作为平滑系数
    bnb = BernoulliNB(alpha=i)
    #训练模型
    bnb.fit(X_train,y_train)
    #保存分数
    train_score.append(bnb.score(X_train,y_train))
	test_score.append(bnb.score(X_test,y_test))
# 训练集上的分数
plt.plot(range(len(train_score)) , train_score , color='green')
# 测试集上的分数
plt.plot(range(len(train_score)) , test_score , color='red');

在这里插入图片描述

# 建立一个列表保存结果
train_scores = []
test_scores = []

# 平滑系数的初始值为1
alpha = 1
for i in range(10):  
    print(alpha)
    # 采用当前遍历的i值作为平滑系数
    bnb = BernoulliNB(alpha=alpha)
    # 模型训练
    bnb.fit(X_train , y_train)
    # 保存分数
    train_scores.append( bnb.score(X_train , y_train)  )
    test_scores.append(bnb.score(X_test , y_test) )
    # 每次对上一次的平滑系数除以10
    alpha /= 10
# 训练集上的分数
plt.plot(range(len(train_scores)) , train_scores, color='green')
# 测试集上的分数
plt.plot(range(len(train_scores)) , test_scores , color='red');

在这里插入图片描述
根据图形我们可以得出最优参数的值,进而优化我们的算法.

多项式贝叶斯和高斯贝叶斯的调参方法基本相同,高斯贝叶斯的平滑参数为:var_smoothing.
第一次写没有什么经验,各位大佬有什么指点的可以留言,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值