算法伪代码

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),这通常在实际应用中是可以接受的。

训练集的分类报告更进一步确认了在训练集上虽然各项指标都很高,但没有达到完美的状态。

前几个预测结果:

所显示的前几个预测结果表明,模型在训练集和测试集上的预测都与实际结果完全一致,进一步印证了模型的高性能。

posted on 2025-01-06 15:22    阅读(12)  评论(0)    收藏  举报