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_score、precision_score、recall_score、f1_score:指定评估指标。
average='weighted':计算加权平均值。
6.classification_report():输出分类报告。
y_test:真实的目标标签。
y_pred:模型预测的标签。
target_names=iris.target_names:标签的名称。
7.confusion_matrix():输出混淆矩阵。
y_test:真实的目标标签。
y_pred:模型预测的标签。
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)