【机器学习】自定义数据集 使用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)配置本地开发环境 基础语法入门数据类型变量与常量运算符算术运算符比较运算符 条件…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
