11.29

news/2024/11/29 8:53:32/文章来源:https://www.cnblogs.com/0608lin/p/18575660

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

 

一、实验目的

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

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

 

 

二、实验内容

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

意同分布取样);

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

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

择;

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

部分

 

 

 

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

   1. 算法伪代码

开始

    加载 iris 数据集到 X, y

    划分 X, y 为训练集 (X_train, y_train) 和测试集 (X_test, y_test)

    创建 SVM 分类器 svm

    进行五折交叉验证并打印平均得分

    训练 svm 分类器

    预测测试集 y_pred

    计算并打印测试集性能指标

结束

  

   2. 算法主要代码

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

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_validate
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 1. 加载iris数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target

# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, stratify=y, random_state=42)

# 3. 创建SVM分类器(使用线性核函数)
svm = SVC(kernel='linear', C=1.0, random_state=42)

# 4. 使用五折交叉验证来评估模型性能
scoring = ['accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted']
cv_results = cross_validate(svm, X_train, y_train, cv=5, scoring=scoring)

# 输出交叉验证的平均得分
print("交叉验证结果:")
for metric in scoring:
    print(f"{metric.replace('_', ' ').capitalize()} 平均值: {np.mean(cv_results['test_' + metric]):.4f}")

# 5. 在整个训练集上训练最终模型
svm.fit(X_train, y_train)

# 6. 在测试集上进行预测
y_pred = svm.predict(X_test)

# 7. 计算测试集上的性能指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')

# 8. 打印测试集上的性能指标
print("\n测试集性能:")
print(f"准确率: {accuracy:.4f}")
print(f"精度: {precision:.4f}")
print(f"召回率: {recall:.4f}")
print(f"F1 分数: {f1:.4f}")

 

 

 

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

 

 

四、实验结果分析

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

 

 

2. 对比分析

1. 总体性能指标

准确率(Accuracy:

平均准确率为 0.93,表示模型在训练集上的预测正确率较高。

测试集上的准确率为 0.98,表明模型在未见过的数据上具有很高的准确性。

精度(Precision:

总体精度为 0.9357,表明对于被预测为正类的实例,实际也是正类的概率很高。

召回率(Recall:

召回率为 0.93,意味着模型能够识别出大部分真正的正类实例。

F1 :

F1 值为 0.9294,这是一个综合了精度和召回率的指标,显示了模型的良好平衡性。

2. 分类报告

类别 0:

精确度、召回率和 F1 值均为 1.00,表示在这个类别上的预测非常准确。

类别 1 2:

各项指标也接近完美,显示出模型在这两个类别上的优秀表现。

宏观平均(Macro Avg:

精确度、召回率和 F1 值都保持在较高的水平,展示了模型在各个类别上的整体稳定性。

加权平均(Weighted Avg:

同样保持在较高的水平,进一步证明了模型的整体可靠性和一致性。

3. 对比分析

五折交叉验证与测试集上的性能对比:

五折交叉验证的平均准确率为 0.93,而测试集上的准确率为 0.98。这表明模型在未见过的数据上有很好的泛化能力。

不同参数设置下的性能对比:

如果尝试了不同的 C 值或核函数,可以发现最优参数配置对性能的影响。例如,线性核可能在某些情况下优于 RBF 核。

与其他分类算法的性能对比:

与决策树、随机森林等其他分类算法相比,SVM iris 数据集上表现出色,尤其是在多类别问题中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/843261.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多协议兼容:开启跨网文件传输的新纪元!

金融、医疗、政府单位、跨国公司等企业内部往往存在多个隔离的网络环境,如内网、外网、测试网等。随着数字化办公的深入,内网与内网、内网与外网间的文件交换需求频繁,传统的文件传输方式已无法满足安全、合规的文件交换需求。1、跨国公司在不同地区运营时,需要安全、高效地…

Odoo和其他SprinBoot框架同时存在时时区问题

因为Centos的停更以及Odoo版本升级后更加友好的支持了Ubuntu所以发布Odoo服务使用了Ubuntun系统环境,因为Odoo为国外人开发所以他们默认代码中处理了跨时区的问题,便于在国内可以友好显示,但是我还不能手动去调时区,要不然就的处理Odoo的源代码了,可是我还有另一个MySQL的…

请问PbootCMS模板调用当前栏目的文章和分页

#### 调用当前栏目的文章 ```html {pboot:list num=10 scode={sort:scode} page=0}<li><a href="[list:link]">[list:title lencn=20]</a></li> {/pboot:list}扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精…

帝国CMS导入恢复数据MySQL server has gone away错误的解决办法

问题原因: max_allowed_packet 配置值过小。 解决方案:Windows/Linux:在 my.ini 或 my.cnf 文件中添加或修改:max_allowed_packet=150M保存后重启MySQL服务。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascri…

Pwn buuctf 合集

持续更新中堆考点:checksec 检查保护:菜单题目依次检查各功能,简单逆向一下。在 Add 中发现使用 calloc,只能控制申请大小:

【人人都能学得会的NLP - 文本分类篇 02】使用DL方法做文本分类任务

【人人都能学得会的NLP - 文本分类篇 02】使用DL方法做文本分类任务 NLP Github 项【人人都能学得会的NLP - 文本分类篇 02】使用DL方法做文本分类任务NLP Github 项目:NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署…

第九章课后习题

习题9.2点击查看代码 import numpy as np from scipy.stats import norm, chi2, chisquare import pylab as pltn = 50; k = 6 a = np.loadtxt(ti9.2.txt).flatten() mu = a.mean(); s = a.std(ddof=1) x1 = a.min(); x2 = a.max() x = np.linspace(14.55, 15.55, k) bin = np.…

2024年各编程语言运行100万个并发任务需要多少内存?

你还记得2023年那篇比较各种流行编程语言异步编程内存消耗比较的文章吗? 现在是2024年底,我很好奇在一年时间里,随着各种语言的最新版本发布,情况有什么变化。 让我们再次进行基准测试,看看结果! 基准 用于基准测试的程序与去年相同:让我们启动 N 个并发任务,每个任务等…

用星球助手导出帖子的手把手教程

当我们把星球的帖子下载到本地电脑之后, 如果想要导出成PDF或者Word之类的格式进行学习, 该怎么弄呢? 其实也是相当简单的. 到"搜索"模块里, 选择"帖子", 输入关键词后者留空都可以, 点击"搜索", 在出现的帖子的右上角有三个图标, 从左到右分别…

OpenVZ 8.0 - 基于容器的 Linux 开源虚拟化解决方案

OpenVZ 8.0 - 基于容器的 Linux 开源虚拟化解决方案OpenVZ 8.0 - 基于容器的 Linux 开源虚拟化解决方案 Open source container-based virtualization for Linux 请访问原文链接:https://sysin.org/blog/openvz-8/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.or…

Virtuozzo Hybrid Server 8.0 - 容器、计算和存储虚拟化平台

Virtuozzo Hybrid Server 8.0 - 容器、计算和存储虚拟化平台Virtuozzo Hybrid Server 8.0 - 容器、计算和存储虚拟化平台 The VMware alternative for service providers and enterprises 请访问原文链接:https://sysin.org/blog/virtuozzo-hybrid-server-8/ 查看最新版。原创…

一款开源、免费、美观的 Avalonia UI 原生控件库 - Semi Avalonia

前言 最近发现DotNetGuide技术社区交流群有不少小伙伴在学习Avalonia,今天大姚给大家分享一款开源、免费、美观的 Avalonia UI 原生控件库:Semi Avalonia。Avalonia项目介绍 Avalonia是一个强大的框架,使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制U…