2024.10.7

实验六:朴素贝叶斯算法实现与测试

一、实验目的

深入理解朴素贝叶斯的算法原理,能够使用 Python 语言实现朴素贝叶斯的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

二、实验内容

(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注

意同分布取样);

(2)使用训练集训练朴素贝叶斯分类算法;

(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选

择;

(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验六的

部分。

 

三、算法步骤、代码、及结果

   1. 算法伪代码

(1) 输入特征数据集(X)和标签(y)

(2) 将数据集分为训练集(X_train, y_train)和测试集(X_test, y_test)

(3) 创建高斯朴素贝叶斯模型(GaussianNB())

(4) 在训练集(X_train)上训练模型

(5) 对每个评估指标进行以下操作:

   (a) 使用5折交叉验证计算指标得分

   (b) 输出每个指标的平均值和标准差

(6) 在测试集(X_test)上进行预测

(7) 输出测试集的性能评估报告和混淆矩阵

   2. 算法主要代码

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import make_scorer, accuracy_score, precision_score, recall_score, f1_score
from sklearn.metrics import classification_report, confusion_matrix

iris = load_iris()
X, y = iris.data, iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

# 创建并训练朴素贝叶斯模型
nb_model = GaussianNB()
nb_model.fit(X_train, y_train)

#五折交叉验证评估模型性能
scoring = {
    '准确率': make_scorer(accuracy_score),
    '精确率': make_scorer(precision_score, average='weighted'),
    '召回率': make_scorer(recall_score, average='weighted'),
    'F1 ': make_scorer(f1_score, average='weighted')
}

scores = {}
for metric in scoring:
    scores[metric] = cross_val_score(nb_model, X_train, y_train, cv=5, scoring=scoring[metric])

for metric, values in scores.items():
    print(f"{metric}:\n 平均值: {np.mean(values):.2f}, 标准差: {np.std(values):.2f}\n")

y_pred = nb_model.predict(X_test)

print("分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(conf_matrix)

 

调用库方法(函数参数说明)

1.load_iris():加载鸢尾花数据集。

 

无参数,返回一个包含数据和标签的Bunch对象。

train_test_split():将数据集分为训练集和测试集。

 

test_size=0.33:测试集占总数据集的比例为33%

random_state=42:确保每次分割的结果都是一样的。

stratify=y:确保训练集和测试集中各类样本的比例与原始数据集中的比例相同。

2.GaussianNB():创建高斯朴素贝叶斯模型。

 

无参数,使用默认设置。

3.fit():在训练集上训练模型。

 

无参数说明,需要传入特征训练集X_train和标签训练集y_train

4.cross_val_score():进行交叉验证并计算得分。

 

nb_model:需要评估的模型。

X_train:用于评估的特征数据。

y_train:用于评估的目标标签。

cv=5:使用5折交叉验证。

scoring=scoring[metric]:指定评估指标。

5.make_scorer():创建一个得分函数。

 

accuracy_scoreprecision_scorerecall_scoref1_score:指定评估指标。

average='weighted':计算加权平均值。

6.classification_report():输出分类报告。

 

y_test:真实的目标标签。

y_pred:模型预测的标签。

target_names=iris.target_names:标签的名称。

7.confusion_matrix():输出混淆矩阵。

 

y_test:真实的目标标签。

y_pred:模型预测的标签。

   3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

posted @ 2024-10-07 00:14  kuku睡  阅读(21)  评论(0)    收藏  举报