【机器学习】自定义数据集 使用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)配置本地开发环境 基础语法入门数据类型变量与常量运算符算术运算符比较运算符 条件…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
