2024.10.3

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

一、实验目的

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

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

二、实验内容

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

意同分布取样);

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

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

择;

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

部分。

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

   1. 算法伪代码

1. 输入特征数据集和标签

2. 使用线性核函数初始化SVM模型

3. 将数据集分为训练集和测试集

4. 在训练集上训练SVM模型

5. 对每个评估指标进行以下操作:

    (a. 使用5折交叉验证计算指标得分

    (b. 输出每个指标的平均得分和标准差

6. 在测试集上进行预测

7. 输出测试集的性能评估报告

   2. 算法主要代码

import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.svm import SVC
from sklearn.metrics import make_scorer, precision_score, recall_score, f1_score, classification_report

鸢尾花数据集 = datasets.load_iris()  # 加载数据集
特征 = 鸢尾花数据集.data  # 特征数据
标签 = 鸢尾花数据集.target  # 目标标签


特征训练集, 特征测试集, 标签训练集, 标签测试集 = train_test_split(特征, 标签, test_size=0.33, stratify=标签, random_state=42)

print(f'训练集样本数: {特征训练集.shape[0]}, 测试集样本数: {特征测试集.shape[0]}')

svm模型 = SVC(kernel='linear', random_state=42)  # 创建 SVM 模型
svm模型.fit(特征训练集, 标签训练集)  # 在训练集上训练模型

评估指标 = {
    '准确率': 'accuracy',  # 准确率
    '精度': make_scorer(precision_score, average='weighted'),  # 精度
    '召回率': make_scorer(recall_score, average='weighted'),  # 召回率
    'F1': make_scorer(f1_score, average='weighted')  # F1
}

各指标得分 = {}
for 指标名, 指标函数 in 评估指标.items():
    各指标得分[指标名] = cross_val_score(svm模型, 特征训练集, 标签训练集, cv=5, scoring=指标函数)

    print(f'{指标名} 的平均得分: {各指标得分[指标名].mean():.4f} ± {各指标得分[指标名].std():.4f}')

标签预测 = svm模型.predict(特征测试集)  # 在测试集上进行预测

分类报告 = classification_report(标签测试集, 标签预测, target_names=鸢尾花数据集.target_names)
print("测试集性能评估:\n", 分类报告)

 

调用库方法(函数参数说明)

1.datasets.load_iris():加载鸢尾花数据集。

无参数,返回一个包含数据和标签的Bunch对象。

train_test_split():将数据集分为训练集和测试集。

test_size=0.33:测试集占总数据集的比例为33%

stratify=标签:确保训练集和测试集中各类样本的比例与原始数据集中的比例相同。

random_state=42:确保每次分割的结果都是一样的。

SVC(kernel='linear', random_state=42):创建SVM模型。

kernel='linear':指定核函数为线性核。

random_state=42:确保模型的初始化是可复现的。

fit():在训练集上训练模型。

 

2.cross_val_score():进行交叉验证并计算得分。

svm模型:需要评估的模型。

特征训练集:用于评估的特征数据。

标签训练集:用于评估的目标标签。

cv=5:使用5折交叉验证。

scoring=指标函数:指定评估指标。

 

3.make_scorer():创建一个得分函数。

precision_scorerecall_scoref1_score:指定评估指标。

average='weighted':计算加权平均值。

classification_report():输出分类报告。

posted @ 2024-10-03 00:13  kuku睡  阅读(21)  评论(0)    收藏  举报