12.13
(1)从scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注意同分布取样);
(2)使用训练集训练朴素贝叶斯分类算法;
(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择;
(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验六的部分。
完整源代码\调用库方法(函数参数说明)
import numpy as np
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
# (1) 加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 留出法,33% 为测试集,保持相同分布
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)
# (2) 使用训练集训练朴素贝叶斯分类算法
nb_model = GaussianNB()
nb_model.fit(X_train, y_train)
# (3) 使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择
cross_val_accuracy = cross_val_score(nb_model, X_train, y_train, cv=5, scoring='accuracy')
cross_val_precision = cross_val_score(nb_model, X_train, y_train, cv=5, scoring='precision_macro')
cross_val_recall = cross_val_score(nb_model, X_train, y_train, cv=5, scoring='recall_macro')
cross_val_f1 = cross_val_score(nb_model, X_train, y_train, cv=5, scoring='f1_macro')
print("交叉验证准确度: ", np.mean(cross_val_accuracy))
print("交叉验证精度: ", np.mean(cross_val_precision))
print("交叉验证召回率: ", np.mean(cross_val_recall))
print("交叉验证 F1 值: ", np.mean(cross_val_f1))
# (4) 使用测试集,测试模型的性能,对测试结果进行分析
y_pred = nb_model.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')
print("\n测试集性能:")
print("准确度: ", accuracy)
print("精度: ", precision)
print("召回率: ", recall)
print("F1 值: ", f1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统