第L6周:机器学习|支持向量机(SVM):2. 支持向量机实战

news2024/12/25 3:16:38
  • 本文为365天深度学习训练营 中的学习记录博客
  • 原作者:K同学啊

这里展示一下怎么调用scikit-learn库实现线性SVM,知道怎么调用扩展一下知识面就OK了。

1.scikit-learn库实现线性可分的SVM

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

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

# 数据预处理
sc = StandardScaler()
X = sc.fit_transform(X)

# 训练集和测试集的分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建SVM模型
svm = SVC(kernel='linear', C=1.0)

# 训练模型
svm.fit(X_train, y_train)

# 预测
y_pred = svm.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f' % (accuracy * 100.0))

代码输出:

Accuracy: 97.78

2.scikit-learn库实现非线性可分的SVM

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

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

# 数据预处理
sc = StandardScaler()
X = sc.fit_transform(X)

# 训练集和测试集的分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建SVM模型
svm = SVC(kernel='rbf', C=1.0, gamma=0.1)

# 训练模型
svm.fit(X_train, y_train)

# 预测
y_pred = svm.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f' % (accuracy * 100.0))

代码输出:

Accuracy: 100.00

3.sklearn.svm.SVC函数详解

sklearn.svm.SVC 是 Scikit-learn 库中用于实现支持向量机(SVM)分类的一个类。

函数定义:

sklearn.svm.SVC(
    C=1.0,
    kernel='rbf',
    degree=3,
    gamma='scale',
    coef0=0.0,
    shrinking=True,
    probability=False,
    tol=1e-3,
    cache_size=200,
    class_weight=None,
    verbose=False,
    max_iter=-1,
    decision_function_shape='ovr',
    break_ties=False,
    random_state=None
)

● 官方文档:sklearn.svm.SVC.html

常用参数详解:

  1. C(默认值:1.0)

○ 作用:惩罚参数,用于平衡最大化分类间隔和误分类惩罚之间的关系。
○ 解释:较大的 C 值意味着对误分类的惩罚更大,模型会倾向于将更多的训练数据点分类正确,但可能会导致间隔变小,可能出现过拟合;较小的 C 值则会更关注于间隔的大小,而允许更多的误分类,从而提高模型的泛化能力。
○常用范围:通常在 0.001 到 1000 之间进行调节。

  1. kernel(默认值:‘rbf’)

○ 作用:指定要使用的核函数,支持不同的非线性映射方法。
○ 可选值:
■ ‘linear’:线性核函数,即不进行任何非线性映射。
■ ‘poly’:多项式核函数,通常用于多项式可分的情况。
■ ‘rbf’:径向基函数(Radial Basis Function),又称高斯核,是最常用的非线性核函数。
■ ‘sigmoid’:类似于神经网络的激活函数,较少使用。
■ 你也可以传递自定义核函数,方法是传递一个函数。

  1. degree (默认值:3)

○ 作用:当 kernel=‘poly’ 时,指定多项式核的多项式次数。
○ 解释:如果使用多项式核函数(poly),degree 参数决定多项式的阶数,通常是 2 或 3。

  1. gamma(默认值:‘scale’)

○ 作用:核函数系数,适用于 ‘rbf’、‘poly’ 和 ‘sigmoid’ 核函数。
○ 可选值:
■ ‘scale’:使用 1 / (n_features * X.var()) 作为默认值。这个值会根据输入特征的数量和方差自动调整。
■ ‘auto’:使用 1 / n_features 作为值。
○ 解释:gamma 值越大,模型越倾向于拟合训练数据,但可能会导致过拟合;gamma 值越小,模型更倾向于平滑。

  1. coef0(默认值:0.0)

○ 作用:核函数中的独立项,仅在 kernel=‘poly’ 或 kernel=‘sigmoid’ 时有意义。
○ 解释:用于控制多项式核函数和 sigmoid 核函数中的偏移量。

可见下面的截图,和上面的参数详解内容是一样的:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊光刻工序常见术语(2)

上次,我们总结了光刻工序部分的术语,见文章: 《光刻工序常见术语中英文对照(1)》 这次,我们把剩下的又总结了一些,供大家参阅。 1,Developer Mist:显影液回溅产生的水…

计算机毕业设计 基于SpringBoot和Vue的课程教学平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

STM32(五)GPIO输入硬件电路及C语言知识复习

本小节主要是GPIO输入模式下的硬件电路和C语言知识的回顾 C语言中的数据:定义和引用 一、GPIO输入模式下的硬件和电路 1.按键介绍 可以用延时函数消除按键抖动 2.传感器模块介绍 (1)传感器元件的电阻会随模拟量的变化而变化,通…

【算法】链表:206.反转链表(easy)

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法(快慢指针) 解题步骤: 关键点: 复杂度分析: 4、代码 1、题目链接 206. 反转链表 - 力扣(LeetCode) …

通信工程学习:什么是SMTP简单邮件传输协议

SMTP:简单邮件传输协议 SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议,是用于电子邮件传输的标准协议。它定义了电子邮件在互联网上的传输方式,以及邮件服务器之间的通信方式。以下是对SMTP协议…

Stream流的初步认识,Stream流的思想和获取Stream流

一.Stream流的作用 package com.njau.my_stream;import java.util.ArrayList;/*** 目标:认识Stream流* 案例:将以“张”开头的人名筛选出来到一个新的集合中去,再将其中三个字的名字的筛选出来到新集合中去*/ public class StreamDemo1 {pub…

【算法竞赛】算法复杂度

计算的资源是有限的,竞赛题会限制代码所使用的计算资源。 计算资源有两种:计算时间和存储空间。与此对应的有时间复杂度和空间复杂度,时间复杂度衡量计算的次数,空间复杂度衡量需要的存储空间。 编程竞赛的题目在逻辑、数学、算法上有不同的难度:简单的题目,可以一眼看懂;复 …

1.8 物理层下的传输媒体

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 1 导引型传输媒体1.1 双绞线1.2 同轴电缆1.3 光缆 2 非导引型传输媒体2.1 无线电微波通信2.2 多径效应2.3 卫星通信2.4 无线局域网 在数据通信系统中,传输媒体是发…

排水系统C++

题目: 样例解释: 1 号结点是接收口,4,5 号结点没有排出管道,因此是最终排水口。 1 吨污水流入 1 号结点后,均等地流向 2,3,5 号结点,三个结点各流入 1/3 吨污水。 2 号结点流入的 1/3​ 吨污水将均等地流向…

【Nacos 架构 原理】服务发现模块之Nacos注册中心服务数据模型

文章目录 服务(Service)和服务实例(Instance)定义服务服务元数据定义实例实例元数据持久化属性 集群定义集群 生命周期服务的生命周期实例的生命周期集群的生命周期元数据的生命周期 服务(Service)和服务实…

vue3中el-input在form表单按下回车刷新页面

摘要&#xff1a; 在input框中点击回车之后不是调用我写的回车事件&#xff0c;而是刷新页面&#xff01; 如果表单中只有一个input 框则按下回车会直接关闭表单 所以导致刷新页面 再写一个input 表单 &#xff0c;并设置style“display:none” <ElInput style"display…

畅阅读小程序|畅阅读系统|基于java的畅阅读系统小程序设计与实现(源码+数据库+文档)

畅阅读系统小程序 目录 基于java的畅阅读系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师…

用C语言实现通讯录(顺序表实现)

SeqList.h 顺序表的头文件 #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #include "Contact.h" typedef PerInfo SLDatatype;//PerInfo为结构体类型//动态顺序表 typedef struct SeqList {SLDatatype…

量产小妙招---向量间的Project和Product

1 背景 在日常工作中&#xff0c;不管是在感知或者规控&#xff0c;或者其它的模块中&#xff0c;经常需要处理两个向量之间的关系&#xff0c;这就引入了本篇博客和读者朋友们讨论的一个话题&#xff1a;Project和Product。 2 Project和Product 向量间的Project和Product在定义…

STM32单片机编程调试常见问题(二) Keil5软件调试中常见的配置问题

文章目录 一.概要二.‌Keil5‌调试时无法打断点并且部分代码语句执行被优化三.Keil5烧录STM32程序代码后无法自动复位四.Keil5调试时Watch界面中的变量不会实时更新五.Keil5编译后无法进行 go to跳转到变量或函数六.Keil5编辑时注释输入中文显示乱码问号七.Keil5退出调试时出现…

C. Bitwise Balancing

原题 C. Bitwise Balancing 解析 题意如图 我们要求 a , 其实 a 只要满足条件即可, 我们可以发现每一位都不会影响到其它位, 因此对每一位检查, 发现对b c a, d 有固定结果 b c a d 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0 bcd 无法为 011 和 1…

【Python】2. 变量和数据类型

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

python和r语言的区别是什么

在从事数据分析行业中&#xff0c;我们都会从R与Python当中进行选择&#xff0c;但是&#xff0c;从这两个异常强大、灵活好用的数据分析语中选择&#xff0c;却是非常难以选择的。 为了让大家能选择出更适合自己的语言&#xff0c;我们将两种语言进行简单的对比。 Stack Ove…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十八章 Linux编写第一个自己的命令

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

Web APIs——Dom获取属性操作

1.变量声明 1.1以后声明变量我们优先使用哪个&#xff1f; const 有了变量先给const&#xff0c;如果发现它后面是要被修改的&#xff0c;再改为let 1.2 为什么const声明的对象可以修改里面的属性&#xff1f; 因为对象是引用类型&#xff0c;里面存储的是地址&#x…