算法伪代码
BEGIN
// 导入必要的库
导入 sklearn.datasets 作为 datasets
导入 sklearn.model_selection 的 train_test_split 和 cross_val_score
导入 sklearn.naive_bayes 的 GaussianNB
导入 sklearn.metrics 的 accuracy_score, precision_score, recall_score, f1_score, classification_report, confusion_matrix
导入 numpy 作为 np
// (1) 加载Iris数据集
iris = datasets.load_iris()
设置 X = iris.data // 特征数据
设置 y = iris.target // 标签数据
// (2) 使用留出法留出1/3的样本作为测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42)
// (3) 使用训练集训练朴素贝叶斯分类器
gnb = GaussianNB() // 创建高斯朴素贝叶斯分类器实例
gnb.fit(X_train, y_train) // 训练模型
// (4) 使用五折交叉验证评估模型性能
scores = cross_val_score(gnb, X_train, y_train, cv=5) // 五折交叉验证
打印 "五折交叉验证准确度: " + 平均值(scores)
// (5) 使用测试集测试模型性能
y_pred = gnb.predict(X_test) // 进行预测
accuracy = accuracy_score(y_test, y_pred) // 计算准确度
precision = precision_score(y_test, y_pred, average='macro') // 计算精确度
recall = recall_score(y_test, y_pred, average='macro') // 计算召回率
f1 = f1_score(y_test, y_pred, average='macro') // 计算F1值
// 打印性能指标
打印 "测试集准确度: " + accuracy
打印 "测试集精度: " + precision
打印 "测试集召回率: " + recall
打印 "测试集F1值: " + f1
// (6) 打印分类报告和混淆矩阵
打印 "分类报告:"
打印 classification_report(y_test, y_pred, target_names=iris.target_names)
打印 "混淆矩阵:"
打印 confusion_matrix(y_test, y_pred)
// (7) 在训练集上进行预测并打印结果
y_train_pred = gnb.predict(X_train) // 训练集预测
打印 "训练集准确度: " + accuracy_score(y_train, y_train_pred)
打印 "训练集分类报告:"
打印 classification_report(y_train, y_train_pred, target_names=iris.target_names)
// 打印训练集和测试集的前几个预测结果
打印 "训练集前几个预测结果:"
对于 i 从 0 到 4:
打印 "实际: ", y_train[i], ", 预测: ", y_train_pred[i]
打印 "测试集前几个预测结果:"
对于 i 从 0 到 4:
打印 "实际: ", y_test[i], ", 预测: ", y_pred[i]
END
2. 算法主要代码
完整源代码\调用库方法(函数参数说明)
# 导入必要的库
from sklearn import datasets # 用于加载数据集
from sklearn.model_selection import train_test_split, cross_val_score # 用于数据划分和交叉验证
from sklearn.naive_bayes import GaussianNB # 用于朴素贝叶斯分类
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report, confusion_matrix # 用于模型评估
import numpy as np # 用于数学运算
# 加载iris数据集
iris = datasets.load_iris()
X = iris.data # 特征数据
y = iris.target # 标签数据
# 使用留出法留出1/3的样本作为测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42) # 随机划分训练集和测试集
# 使用训练集训练朴素贝叶斯分类算法
gnb = GaussianNB() # 创建高斯朴素贝叶斯分类器实例
gnb.fit(X_train, y_train) # 训练模型
# 使用五折交叉验证对模型性能进行评估
scores = cross_val_score(gnb, X_train, y_train, cv=5) # 五折交叉验证
print("五折交叉验证准确度: {:.3f}".format(np.mean(scores))) # 打印平均准确度,精确到小数点后三位
# 使用测试集测试模型的性能
y_pred = gnb.predict(X_test) # 在测试集上进行预测
# 计算性能指标
accuracy = accuracy_score(y_test, y_pred) # 准确度
precision = precision_score(y_test, y_pred, average='macro') # 精度
recall = recall_score(y_test, y_pred, average='macro') # 召回率
f1 = f1_score(y_test, y_pred, average='macro') # F1值
# 打印性能指标,精确到小数点后三位
print("测试集准确度: {:.3f}".format(accuracy))
print("测试集精度: {:.3f}".format(precision))
print("测试集召回率: {:.3f}".format(recall))
print("测试集F1值: {:.3f}".format(f1))
# 打印分类报告
print("分类报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names)) # 打印详细的分类性能报告
# 打印混淆矩阵
print("混淆矩阵:")
print(confusion_matrix(y_test, y_pred)) # 打印混淆矩阵
# 打印训练集预测结果
y_train_pred = gnb.predict(X_train) # 在训练集上进行预测
print("\n训练集准确度: {:.3f}".format(accuracy_score(y_train, y_train_pred))) # 打印训练集准确度,精确到小数点后三位
print("训练集分类报告:")
print(classification_report(y_train, y_train_pred, target_names=iris.target_names)) # 打印训练集的分类性能报告
# 打印训练集和测试集的前几个预测结果
print("\n训练集前几个预测结果:")
for i in range(5):
print(f"实际: {y_train[i]}, 预测: {y_train_pred[i]}")
print("\n测试集前几个预测结果:")
for i in range(5):
print(f"实际: {y_test[i]}, 预测: {y_pred[i]}")
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
四、实验结果分析
1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
2. 对比分析
交叉验证结果:
五折交叉验证的准确度为0.973,表明在训练集的不同划分中模型的表现非常稳定和可靠。
测试集结果:
测试集的准确度、精度、召回率和F1值均为1.000,意味着模型完美地分类了所有测试样本。这种表现通常令人印象深刻,表明模型在这一特定数据集上的适应性非常好。
分类报告分析:
分类报告显示,所有类别的精确度、召回率和F1值均达到1.00,表明模型在每个分类上都没有犯错。
支持(support)值表明每个类别在测试集中有多少样本。
混淆矩阵:
混淆矩阵显示,所有的样本都被准确分类,没有误分类的情况,表明模型的分类能力非常强。
练集结果:
训练集准确度为0.973,说明模型在训练集的表现仍然很好,但与测试集相比有轻微的过拟合迹象,尤其在类别versicolor的精度略低(0.95),这通常在实际应用中是可以接受的。
训练集的分类报告更进一步确认了在训练集上虽然各项指标都很高,但没有达到完美的状态。
前几个预测结果:
所显示的前几个预测结果表明,模型在训练集和测试集上的预测都与实际结果完全一致,进一步印证了模型的高性能。
浙公网安备 33010602011771号