【机器学习】自定义数据集 使用scikit-learn中svm的包实现svm分类
一、支持向量机(support vector machines. ,SVM)概念
1. SVM 绪论
支持向量机(SVM)的核心思想是找到一个最优的超平面,将不同类别的数据点分开。SVM 的关键特点包括:
① 分类与回归:
-
SVM 可以用于分类(SVC, Support Vector Classification)和回归(SVR, Support Vector Regression)。
-
分类任务中,SVM 通过找到一个超平面,最大化不同类别之间的间隔(margin)。
-
回归任务中,SVM 通过找到一个超平面,使得数据点尽可能接近该超平面。
② 核函数(Kernel):
-
SVM 通过核函数将数据映射到高维空间,从而解决非线性问题。
-
常用的核函数包括:
线性核(linear)
多项式核(poly)
径向基核(RBF, rbf)
Sigmoid 核(sigmoid)
③ 支持向量:
-
支持向量是离超平面最近的数据点,它们决定了超平面的位置和方向。
2. scikit-learn 中的SVM包
① SVC:
-
用于分类任务的支持向量机。
-
主要参数:
kernel:核函数类型(如 'linear'、'rbf' 等)。
C:正则化参数,控制模型的复杂度。
gamma:核函数的系数(仅对 'rbf'、'poly' 和 'sigmoid' 核有效)。
② SVR:
-
用于回归任务的支持向量机。
-
主要参数与
SVC类似。
③ LinearSVC:
-
线性支持向量分类器,专门用于线性核的 SVM。
-
比
SVC(kernel='linear')更高效。
④ LinearSVR:
-
线性支持向量回归器,专门用于线性核的 SVM 回归。
3. SVM包中的主要参数
① kernel:
-
核函数类型,默认为
'rbf'。 -
可选值:
'linear'、'poly'、'rbf'、'sigmoid'或自定义核函数。
② C:
-
正则化参数,默认为
1.0。 -
较小的
C值表示更强的正则化,较大的C值表示更弱的正则化。
③ gamma:
-
核函数的系数,默认为
'scale'(即1 / (n_features * X.var()))。 -
较小的
gamma值表示核函数的影响范围较大,较大的gamma值表示核函数的影响范围较小。
④ degree:
-
多项式核的阶数,默认为
3。 -
仅对
kernel='poly'有效。
⑤ probability:
-
是否启用概率估计,默认为
False。 -
如果为
True,可以使用predict_proba方法获取类别概率。
4. SVM示例代码
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt# 1. 自定义数据集
np.random.seed(42)
X = np.random.randn(100, 2) # 100 个样本,每个样本有 2 个特征
y = (X[:, 0] + X[:, 1] > 0).astype(np.int32) # 根据特征的线性组合生成标签# 2. 初始化 SVM 模型
svm_model = SVC(kernel='linear', C=1.0, random_state=42)# 3. 训练模型
svm_model.fit(X, y)# 4. 可视化决策边界
def plot_decision_boundary(model, X, y):# 创建网格点x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),np.arange(y_min, y_max, 0.01))# 预测网格点的类别Z = model.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)# 绘制决策边界plt.contourf(xx, yy, Z, alpha=0.8, cmap='viridis')# 绘制样本点plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o', cmap='viridis')plt.title("SVM 决策边界")plt.xlabel("特征 1")plt.ylabel("特征 2")plt.show()# 可视化决策边界
plot_decision_boundary(svm_model, X, y)
二、SVM类型
1. 线性可分支持向量机(Linear Separable SVM)
① 定义
-
适用于数据 线性可分 的情况,即存在一个超平面可以将不同类别的样本完全分开。
-
目标是找到一个最优超平面,使得两类样本之间的间隔(margin)最大化。
② 数学形式
-
超平面方程:w⋅x+b=0,其中:
w 是法向量,决定了超平面的方向。
b 是偏置项,决定了超平面的位置。
-
优化目标:
- 约束条件:
其中 是样本的类别标签。
③ 特点
-
适用于数据完全线性可分的情况。
-
通过最大化间隔,提高模型的泛化能力。
2. 线性支持向量机(Linear SVM)
① 定义
-
适用于数据 近似线性可分 的情况,即数据中存在少量噪声或异常点,无法完全分开。
-
引入 松弛变量(slack variables),允许部分样本违反间隔约束。
② 数学形式
- 优化目标:
- 约束条件:
其中:
是松弛变量,表示第
个样本违反间隔约束的程度。
是正则化参数,控制模型对误分类的惩罚力度。
③ 特点
-
通过引入松弛变量,允许部分样本误分类,提高模型的鲁棒性。
-
适用于数据近似线性可分的情况。
3. 非线性支持向量机(Nonlinear SVM)
① 定义
-
适用于数据 非线性可分 的情况,即无法通过一个超平面将不同类别的样本分开。
-
通过 核函数(Kernel Function) 将数据映射到高维空间,使得数据在高维空间中线性可分。
② 数学形式
- 核函数的作用是将原始特征空间映射到高维特征空间:
其中,甚至可以是无限维。
- 优化目标:
- 约束条件:
③ 常用核函数
- 线性核(Linear Kernel):
- 多项式核(Polynomial Kernel):
- 径向基核(RBF Kernel):
- Sigmoid 核(Sigmoid Kernel):
④ 特点
-
通过核函数,可以处理非线性可分的数据。
-
核函数的选择对模型性能有重要影响。
4. 总结
| 类型 | 适用场景 | 核心思想 | 关键参数/技术 |
|---|---|---|---|
| 线性可分支持向量机 | 数据完全线性可分 | 最大化间隔 | 无松弛变量 |
| 线性支持向量机 | 数据近似线性可分 | 允许部分样本误分类 | 松弛变量、正则化参数 C |
| 非线性支持向量机 | 数据非线性可分 | 通过核函数映射到高维空间 | 核函数、正则化参数 C |
-
线性可分支持向量机 是理想情况,现实中较少见。
-
线性支持向量机 通过引入松弛变量,提高了模型的鲁棒性。
-
非线性支持向量机 通过核函数,可以处理复杂的非线性问题。
三、自定义数据集 使用scikit-learn中svm的包实现svm分类
1. 代码示例
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt# 1. 自定义数据集
# 生成 200 个样本,每个样本有 2 个特征
np.random.seed(42) # 设置随机种子以确保结果可重复
X = np.random.randn(200, 2).astype(np.float32)
# 根据特征的线性组合生成标签,大于 0 标记为 1,否则标记为 0
y = (2 * X[:, 0] + 3 * X[:, 1] > 0).astype(np.int32)# 2. 初始化 SVM 模型
# 使用线性核函数
svm_model = SVC(kernel='linear', random_state=42)# 3. 训练模型
svm_model.fit(X, y)# 4. 可视化决策边界和支持向量
def plot_decision_boundary(model, X, y):# 创建网格点x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),np.arange(y_min, y_max, 0.01))# 预测网格点的类别Z = model.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)# 绘制决策边界plt.contourf(xx, yy, Z, alpha=0.8, cmap='viridis')# 绘制样本点plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o', cmap='viridis')# 绘制支持向量plt.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1],s=100, facecolors='none', edgecolors='r', label='支持向量')plt.title("SVM 决策边界")plt.xlabel("特征 1")plt.ylabel("特征 2")plt.legend()plt.show()# 可视化训练集的决策边界和支持向量
plot_decision_boundary(svm_model, X, y)
2. 代码解释
① 自定义数据集:
-
X = np.random.randn(200, 2).astype(np.float32):
生成 200 个样本,每个样本有 2 个特征。
使用 np.random.randn 生成符合标准正态分布的随机数。
astype(np.float32) 将数据类型转换为 32 位浮点数。
-
y = (2 * X[:, 0] + 3 * X[:, 1] > 0).astype(np.int32):
根据特征的线性组合生成标签。
公式 2 * X[:, 0] + 3 * X[:, 1] > 0 表示特征的线性组合是否大于 0。
大于 0 的样本标记为 1,否则标记为 0。
astype(np.int32) 将标签转换为 32 位整数。
② 初始化 SVM 模型:
-
svm_model = SVC(kernel='linear', random_state=42):
使用线性核函数初始化 SVM 模型。
kernel='linear' 表示使用线性核函数。
random_state=42 确保每次运行代码时结果一致。
③ 训练模型:
-
svm_model.fit(X, y):
使用训练集数据训练 SVM 模型。
④ 可视化决策边界和支持向量:
-
plot_decision_boundary函数:
绘制 SVM 的决策边界和支持向量。
使用 np.meshgrid 创建网格点,覆盖整个特征空间。
使用 model.predict 预测网格点的类别。
使用 plt.contourf 绘制决策边界。
使用 plt.scatter 绘制样本点和支持向量。
相关文章:
【机器学习】自定义数据集 使用scikit-learn中svm的包实现svm分类
一、支持向量机(support vector machines. ,SVM)概念 1. SVM 绪论 支持向量机(SVM)的核心思想是找到一个最优的超平面,将不同类别的数据点分开。SVM 的关键特点包括: ① 分类与回归: SVM 可以用于分类&a…...
快速提升网站收录:利用网站历史数据
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/38.html 利用网站历史数据可以有效提升网站的收录速度,以下是一些具体的策略和方法: 一、理解网站历史数据的重要性 网站历史数据记录了网站过去的运营情况、用户行…...
【Git】初识Git Git基本操作详解
文章目录 学习目标Ⅰ. 初始 Git💥注意事项 Ⅱ. Git 安装Linux-centos安装Git Ⅲ. Git基本操作一、创建git本地仓库 -- git init二、配置 Git -- git config三、认识工作区、暂存区、版本库① 工作区② 暂存区③ 版本库④ 三者的关系 四、添加、提交更改、查看提交日…...
Python NumPy(11):NumPy 排序、条件筛选函数
1 NumPy 排序、条件筛选函数 NumPy 提供了多种排序的方法。 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。 下表显示了三种排序算法的比较。 种类速度最坏情况工作空间稳定性…...
AJAX综合案例——图书管理
黑马程序员视频地址: AJAX-Day02-10.案例_图书管理AJAX-Day02-10.案例_图书管理_总结_V1.0是黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖的第25集视频,…...
JDK自带工具解析与生产问题定位指南(一)
1. 引言 Java开发工具包(JDK)内置了强大的诊断工具集,用于监控、分析和调试Java应用程序。这些工具涵盖了从进程管理、内存分析到性能监控的各个方面。本文将介绍一些最常用的Java开发工具,包括jps、jmap、jstat、jcmd、jstack、…...
FPGA 使用 CLOCK_DEDICATED_ROUTE 约束
使用 CLOCK_DEDICATED_ROUTE 约束 CLOCK_DEDICATED_ROUTE 约束通常在从一个时钟区域中的时钟缓存驱动到另一个时钟区域中的 MMCM 或 PLL 时使 用。默认情况下, CLOCK_DEDICATED_ROUTE 约束设置为 TRUE ,并且缓存 /MMCM 或 PLL 对必须布局在相同…...
《解锁AI黑科技:数据分类聚类与可视化》
在当今数字化时代,数据如潮水般涌来,如何从海量数据中提取有价值的信息,成为了众多领域面临的关键挑战。人工智能(AI)技术的崛起,为解决这一难题提供了强大的工具。其中,能够实现数据分类与聚类…...
Java小白入门教程:Object
目录 一、定义 二、作用 三、使用场景 四、语法以及示例 1、创建Object类型的对象 2、使用 toString()方法 3、使用 equals()方法 4、使用 hashCode()方法 5、使用 getClass()方法 6、使用 clone()方法 7、使用 finalize()方法 一、定义 在Java中, object…...
记6(人工神经网络
目录 1、M-P神经元2、感知机3、Delta法则4、前馈型神经网络(Feedforward Neural Networks)5、鸢尾花数据集——单层前馈型神经网络:6、多层神经网络:增加隐含层7、实现异或运算(01、10为1,00、11为0)8、线性…...
stm32硬件实现与w25qxx通信
使用的型号为stm32f103c8t6与w25q64。 STM32CubeMX配置与引脚衔接 根据stm32f103c8t6引脚手册,采用B12-B15四个引脚与W25Q64连接,实现SPI通信。 W25Q64SCK(CLK)PB13MOSI(DI)PB15MISO(DO)PB14CS(…...
编程题-最接近的三数之和
题目: 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 解法一(排序双指针): 题目要求找…...
索引的底层数据结构、B+树的结构、为什么InnoDB使用B+树而不是B树呢
索引的底层数据结构 MySQL中常用的是Hash索引和B树索引 Hash索引:基于哈希表实现的,查找速度非常快,但是由于哈希表的特性,不支持范围查找和排序,在MySQL中支持的哈希索引是自适应的,不能手动创建 B树的…...
【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中
文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型:中间结果的处理4.5 方案验证,首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…...
网络编程套接字(中)
文章目录 🍏简单的TCP网络程序服务端创建套接字服务端绑定服务端监听服务端获取连接服务端处理请求客户端创建套接字客户端连接服务器客户端发起请求服务器测试单执行流服务器的弊端 🍐多进程版的TCP网络程序捕捉SIGCHLD信号让孙子进程提供服务 …...
前端学习-事件委托(三十)
目录 前言 课前思考 for循环注册事件 语法 事件委托 1.事件委托的好处是什么? 2.事件委托是委托给了谁,父元素还是子元素 3.如何找到真正触发的元素 示例代码 总结 前言 才子佳人,自是白衣卿相 课前思考 1.如果同时给多个元素注册事件&…...
线程池以及在QT中的接口使用
文章目录 前言线程池架构组成**一、任务队列(Task Queue)****二、工作线程组(Worker Threads)****三、管理者线程(Manager Thread)** 系统协作流程图解 一、QRunnable二、QThreadPool三、线程池的应用场景W…...
c语言操作符(详细讲解)
目录 前言 一、算术操作符 一元操作符: 二元操作符: 二、赋值操作符 代码例子: 三、比较操作符 相等与不相等比较操作符: 大于和小于比较操作符: 大于等于和小于等于比较操作符: 四、逻辑操作符 逻辑与&…...
【自然语言处理(NLP)】深度学习架构:Transformer 原理及代码实现
文章目录 介绍Transformer核心组件架构图编码器(Encoder)解码器(Decoder) 优点应用代码实现导包基于位置的前馈网络残差连接后进行层规范化编码器 Block编码器解码器 Block解码器训练预测 个人主页:道友老李 欢迎加入社…...
JavaScript 入门教程
JavaScript 入门教程 JavaScript 入门教程引言学习 JavaScript 的好处常见的 JavaScript 框架和库 安装开发环境下载并安装 Node.js 和 npm安装常用开发工具(如 VS Code)配置本地开发环境 基础语法入门数据类型变量与常量运算符算术运算符比较运算符 条件…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
