12.17
(1)从scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注意同分布取样);
(2)使用训练集训练支持向量机—SMO分类算法;
(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择;
(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验四的部分。
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_predict
from sklearn.svm import SVC
from sklearn.metrics import precision_score, recall_score, f1_score, accuracy_score
# 加载Iris数据集
iris = load_iris()
X, y = iris.data, 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
)
# 创建支持向量机分类器
# SVC是scikit-learn中支持向量机的实现,内置了SMO算法
# kernel参数可以选择不同的核函数,默认为'rbf'(径向基函数)
# C参数是正则化参数,default: 1.0
clf = SVC(kernel='rbf', C=1.0, random_state=42)
# 使用五折交叉验证对模型进行性能评估
y_train_pred = cross_val_predict(clf, X_train, y_train, cv=5)
# 计算评估指标
accuracy = accuracy_score(y_train, y_train_pred)
precision = precision_score(y_train, y_train_pred, average='weighted')
recall = recall_score(y_train, y_train_pred, average='weighted')
f1 = f1_score(y_train, y_train_pred, average='weighted')
print("训练集性能指标:")
print("准确度:", accuracy)
print("精度:", precision)
print("召回率:", recall)
print("F1值:", f1)
# 在训练集上训练模型
clf.fit(X_train, y_train)
# 在测试集上进行预测
y_test_pred = clf.predict(X_test)
# 计算测试集的评估指标
test_accuracy = accuracy_score(y_test, y_test_pred)
test_precision = precision_score(y_test, y_test_pred, average='weighted')
test_recall = recall_score(y_test, y_test_pred, average='weighted')
test_f1 = f1_score(y_test, y_test_pred, average='weighted')
print("\n测试集性能指标:")
print("准确度:", test_accuracy)
print("精度:", test_precision)
print("召回率:", test_recall)
print("F1值:", test_f1)
加载数据集:使用load_iris函数从sklearn.datasets库加载Iris数据集。
数据集划分:使用train_test_split函数将Iris数据集分成训练集和测试集。其中,test_size=0.33表示测试集占总数据集的33%,stratify=y参数确保两个数据集按同样的比例保持类分布。
创建SVM分类器:SVC是scikit-learn中实现支持向量机的类,可以用来进行分类任务。
kernel: 核函数的类型。
C: 正则化参数,控制误分类的惩罚程度。较大的C值会导致模型更复杂,更容易过拟合。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统