实验四:SMO 算法实现与测试
一、实验目的
深入理解支持向量机(SVM)的算法原理,能够使用 Python 语言实现支持向量机的训 练与测试,并且使用五折交叉验证算法进行模型训练与评估。
二、实验内容
(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注 意同分布取样); (2)使用训练集训练支持向量机—SMO 分类算法; (3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选 择; (4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验四的 部分。
三、算法步骤、代码、及结果
1. 算法伪代码
输入
鸢尾花数据集(包含特征数据和对应的类别标签)
步骤
- 数据加载阶段
- o 从 sklearn 库中加载鸢尾花数据集,提取特征数据赋值给变量 X,类别标签赋值给变量 Y。
- 数据划分阶段
- o 使用 train_test_split 函数按照测试集占总样本的 1/3 比例,将数据集划分为训练集(X_train、y_train)和测试集(X_test、y_test),设置随机种子为 42 以确保划分的可重复性。
- 模型构建与训练阶段
- o 创建支持向量机(SVM)模型实例 model,设定以下参数:
- 核函数选择 'linear'(线性核函数)。
- 正则化参数 C 设置为 1.0。
- 随机数生成器的种子设为 42。
- o 使用训练集数据(X_train、y_train)对 model 进行训练。
- 交叉验证阶段
- o 运用五折交叉验证对训练好的模型 model 在训练集(X_train、y_train)上进行评估,评估指标设定为准确率,将每次折叠得到的准确率分数存储在 scores 变量中。
- o 计算并打印五折交叉验证准确率的平均值(即 scores.mean()),以此衡量模型在训练集上的整体性能表现。
- 模型测试与性能评估阶段
- o 用训练好的模型 model 对测试集(X_test、y_test)进行预测,得到预测结果 y_pred。
- o 计算测试集的准确率,通过 accuracy_score 函数对比 y_test 与 y_pred,将结果赋值给变量 accuracy。
- o 计算测试集的精度(查准率),使用 precision_score 函数,采用 'macro' 平均方式对比 y_test 与 y_pred,将结果赋值给变量 precision。
- o 计算测试集的召回率(查全率),使用 recall_score 函数,采用 'macro' 平均方式对比 y_test 与 y_pred,将结果赋值给变量 recall。
- o 计算测试集的 F1 值,使用 f1_score 函数,采用 'macro' 平均方式对比 y_test 与 y_pred,将结果赋值给变量 f1。
- o 分别打印测试集的准确率、精度(查准率)、召回率(查全率)以及 F1 值。
输出
- 五折交叉验证准确率的平均值。
- 测试集的准确率、精度(查准率)、召回率(查全率)以及 F1 值。
2. 算法主要代码
完整源代码\调用库方法(函数参数说明)
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, precision_score, recall_score,
f1_score
# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1 / 3,
random_state=42)
# 模型训练
# 使用 SMO 算法训练支持向量机模型
model = SVC(kernel='linear', C=1.0, random_state=42)
model.fit(X_train, y_train)
# 交叉验证
scores = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')
print("五折交叉验证准确率:", scores.mean())
# 模型测试
y_pred = 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("准确率:", accuracy)
print("精度(查准率):", precision)
print("召回率(查全率):", recall)
print("F1值:", f1)
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
四、实验结果分析
1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
2. 对比分析
其在训练和测试过程中表现出色,具备较高的准确性、精确率、召回率和F1分数。在实际应用中,模型能够很好地处理多类别问题,尤其是对于0类表现近乎完美。对于类别1和2,尽管有所差异,但总体表现依旧令人满意
五、心得体会
在实现与测试 SMO 算法的过程中,我深感其精妙之处。通过不断优化支持向量机的参数,实现高效分类。从理解算法原理到实际编程实现,每一步都充满挑战与收获。测试阶段见证了算法在不同数据集上的表现,也让我认识到算法的优势与局限性。这个过程提升了我的编程技能和对机器学习算法的理解,激励我不断探索更多先进算法。
标签:score,pred,算法,train,测试,test,10.15 From: https://www.cnblogs.com/jais/p/18647890