12.4

实验四:SMO 算法实现与测试

 

一、实验目的

深入理解支持向量机(SVM)的算法原理,能够使用 Python 语言实现支持向量机的训

练与测试,并且使用五折交叉验证算法进行模型训练与评估。

二、实验内容

1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注 意同分布取样);

2)使用训练集训练支持向量机—SMO 分类算法;

3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择;

4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验四的部分。

三、算法步骤、代码、及结果

   1. 算法伪代码

① 加载iris数据集

留出1/3样本作为测试集

创建SVM分类器,设置核函数为RBF

训练SVM分类器

⑤使用五折交叉验证评估模型准确度

⑥打印准确度和分类报告

⑦使用测试集测试模型性能

计算并打印准确度、精度、召回率和F1

   2. 算法主要代码

完整源代码\调用库方法(函数参数说明)

 

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
from sklearn.metrics import classification_report, accuracy_score, precision_score, recall_score, f1_score

# 加载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)


# 创建SVM分类器,使用默认的RBF
svm_classifier = SVC(kernel='rbf', gamma='scale')

# 训练SVM分类器
svm_classifier.fit(X_train, y_train)

# 使用五折交叉验证评估模型性能(准确度)
scores = cross_val_score(svm_classifier, X_train, y_train, cv=5, scoring='accuracy')

# 打印五折交叉验证的平均准确度
print("五折交叉验证准确度: ", scores.mean())

# 预测训练集结果
y_pred = svm_classifier.predict(X_train)

# 打印分类报告
print(classification_report(y_train, y_pred))


# 预测测试集结果
y_test_pred = svm_classifier.predict(X_test)

# 计算性能指标
accuracy = accuracy_score(y_test, y_test_pred)
precision = precision_score(y_test, y_test_pred, average='macro')
recall = recall_score(y_test, y_test_pred, average='macro')
f1 = f1_score(y_test, y_test_pred, average='macro')

# 打印性能指标
print(f"测试集准确度: {accuracy}")
print(f"测试集精度: {precision}")
print(f"测试集召回率: {recall}")
print(f"测试集F1: {f1}")

 

 

函数参数说明

 

train_test_split(X, y, test_size=1/3, random_state=42):将数据集分割为训练集和测试集。

 

X:特征数据。

y:标签数据。

test_size:测试集的比例,默认为0.25

random_state:随机数种子,确保结果可复现。

 

SVC(kernel='rbf', gamma='scale'):支持向量机分类器。

 

kernel:核函数类型,默认为'rbf',可选'linear''poly''rbf''sigmoid'

gamma:核函数的系数,默认为'scale',也可以是具体的数值。

 

cross_val_score(estimator, X, y, cv=5, scoring='accuracy'):交叉验证。

 

estimator:估计器(模型)。

X:特征数据。

y:标签数据。

cv:交叉验证的折数,默认为5

scoring:评分标准,默认为'accuracy'

 

accuracy_score(y_true, y_pred):计算准确度。

 

y_true:真实标签。

y_pred:预测标签。

 

precision_score(y_true, y_pred, average='macro'):计算精度。

 

y_true:真实标签。

y_pred:预测标签。

average:计算方式,默认为'macro'

 

recall_score(y_true, y_pred, average='macro'):计算召回率。

 

y_true:真实标签。

y_pred:预测标签。

average:计算方式,默认为'macro'

 

f1_score(y_true, y_pred, average='macro'):计算F1值。

 

y_true:真实标签。

y_pred:预测标签。

average:计算方式,默认为'macro'

 

 

   3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

 

 

 

四、实验结果分析

1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

 

 

 

2. 对比分析

理论对比分析

 

1SVM算法原理:

SVM是一种监督学习算法,用于分类和回归分析。

它的核心思想是找到一个超平面,使得不同类别之间的间隔最大化,以此提高分类的鲁棒性。

SVM通过核技巧能够处理非线性问题,将数据映射到高维空间进行线性分割。

2SMO算法:

SMOSequential Minimal Optimization)算法是SVM中的一种优化算法,用于解决SVM的优化问题。

它通过序列最小化优化策略,将大的优化问题分解为一系列最小化二分类问题来解决。

SMO算法简单高效,特别适合处理大规模数据集。

实验对比分析

1数据集:

实验使用了iris数据集,这是一个经典的多类分类问题。

iris数据集包含150个样本,每个样本有4个特征,属于3个类别之一。

2模型训练:

实验中使用了留出法将数据集分为训练集和测试集,其中1/3作为测试集,2/3作为训练集。

使用训练集训练SVM模型,这是一种常见的模型评估方法,可以评估模型在未知数据上的表现。

3模型评估:

实验中使用了五折交叉验证来评估模型的性能,这是一种评估模型泛化能力的方法。

通过交叉验证,可以减少模型评估结果的方差,提高评估的稳定性和可靠性。

4性能指标:

实验中评估了模型的准确度、精度、召回率和F1值,这些是分类问题中常用的性能指标。

准确度表示模型预测正确的比例;精度表示预测为正类别中实际为正的比例;召回率表示实际为正类别中预测为正的比例;F1值是精度和召回率的调和平均数。

5实验结果分析:

实验结果需要对测试集上的性能指标进行分析,以评估模型的实际表现。

分析可能包括比较不同参数设置下的性能,或者比较SVM与其他分类算法的性能。

实验总结

通过此次实验,可以深入理解SVM的工作原理和SMO算法的优化过程,并通过实际操作来掌握SVM模型的训练和评估。实验中使用的数据集、模型训练方法、评估方法和性能指标都是机器学习中常用的,通过对比分析这些内容,可以更好地理解SVM在实际问题中的应用和效果。此外,实验还提供了一个框架,用于比较SVM与其他机器学习算法的性能,从而帮助选择最适合特定问题的算法。

 

posted @ 2024-12-18 18:00  七安。  阅读(13)  评论(0编辑  收藏  举报