当前位置: 首页 > news >正文

【监督学习】支持向量机步骤及matlab实现

支持向量机

    • (四)支持向量机
      • 1.算法步骤
      • 2. MATLAB 实现
      • 参考资料

(四)支持向量机

支持向量机(Support Vector Machine, SVM)是一种用于分类、回归分析以及异常检测的监督学习模型。SVM特别擅长处理高维空间的数据,并在文本和图像分类、生物信息学等领域有着广泛的应用。
支持向量机分类原理

核心概念:

  1. 最大间隔超平面

    • 超平面:在二维空间中,超平面是一条直线;在三维空间中,是一个平面;更高维度则是超平面;
    • 最大间隔:SVM的目标是找到一个能够将不同类别的样本分开,并且使得两类之间的间隔最大化。这个间隔是由距离超平面最近的数据点(即支持向量)来定义的。
  2. 支持向量

    • 支持向量:位于分类边界(决策边界或超平面)最近的数据点称为支持向量。这些点对于定义最优超平面至关重要。即使去掉其他非支持向量的数据点,也不会影响超平面的位置。
  3. 核技巧(Kernel Trick)

    • 当数据不是线性可分时,可以通过使用核函数将原始特征空间映射到一个更高维度的空间,在那里数据可能变得线性可分。常用的核函数包括:
      • 线性核:适用于线性可分的数据;
      • 多项式核:可以捕捉输入变量间的非线性关系;
      • RBF(径向基函数)核:非常流行,尤其适合于复杂的非线性问题;
      • Sigmoid核:类似于神经网络中的激活函数。
  4. 软间隔与硬间隔

    • 硬间隔:假设数据完全线性可分,寻找一个能够完美分离所有训练样本的超平面。
    • 软间隔:允许某些样本跨越边际甚至落在错误的一侧,通过引入松弛变量和惩罚参数C来实现。这有助于提高模型对噪声的鲁棒性和泛化能力。

1.算法步骤

开始
数据准备
数据预处理
选择核函数
求解优化问题
构建决策边界
模型评估
结束
  1. 数据准备

    • 目标:收集与业务问题相关的结构化数据;
    • 关键操作
      • 定义特征(如客户收入、信用历史、消费行为)和标签(如“违约/非违约”)。
      • 划分数据集为训练集(70% ~ 80%)和测试集(20% ~ 30%)。
  2. 数据预处理

    • 标准化:对特征进行 Z-score 标准化,消除量纲影响: x s c a l e d = x − μ σ x_{scaled}=\frac{x−μ}{σ} xscaled=σxμ
    • 处理缺失值:删除或填充缺失数据(如用均值/中位数);
    • 类别平衡:若标签分布不均,使用过采样(SMOTE)或欠采样。
  3. 选择核函数

    • 常用核函数
      • 线性核linear),适用于线性可分问题,复杂度低: K ( x i , x j ) = x i T x j K(x_i,x_j)=x_i^Tx_j K(xi,xj)=xiTxj
      • 高斯核RBF),适用于非线性问题,需调节参数 γ γ γ K ( x i , x j ) = e x p ⁡ ( − γ ∥ x i − x j ∥ 2 ) K(x_i,x_j)=exp⁡(−γ \lVert xi−xj \rVert ^2) K(xi,xj)=exp(γxixj2)
      • 多项式核polynomial),适用于高阶特征交互: K ( x i , x j ) = ( x i T x j + c ) d K(x_i,x_j)=(x_i^Tx_j+c)^d K(xi,xj)=(xiTxj+c)d
  4. 求解优化问题

    • 目标函数:最大化间隔,转化为凸二次规划问题: min ⁡ w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ξ i \min_{w,b} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^{n} \xi_i w,bmin21w2+Ci=1nξi s.t.  y i ( w T x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 \text{s.t. } y_i(w^T x_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0 s.t. yi(wTxi+b)1ξi,ξi0
      • 参数
        • C C C :正则化参数,控制分类错误的惩罚力度;
        • γ γ γ(高斯核):控制决策边界的复杂度。
  5. 构建决策边界

    • 支持向量:距离决策边界最近的样本点。
    • 分类规则 f ( x ) = s i g n ( ∑ i = 1 n α i y i K ( x i , x ) + b ) f(x) = \mathrm{sign} \left( \sum_{i=1}^{n} \alpha_i y_i K(x_i, x) + b \right) f(x)=sign(i=1nαiyiK(xi,x)+b)
  6. 模型评估

    • 分类指标
      • 准确率(Accuracy):模型预测正确的样本数占总样本数的比例, A c c u r a c y = T P + T N T P + F P + F N + T N Accuracy=\frac{TP+TN}{TP+FP+FN+TN} Accuracy=TP+FP+FN+TNTP+TN
      • 精确率(Precision):正确预测为正类的样本数占所有预测为正类的样本数的比例,公式: A c c u r a c y = T P / ( T P + F P ) Accuracy=TP / (TP + FP) Accuracy=TP/(TP+FP)
      • 召回率(Recall):正确预测为正类的样本数占所有实际正类样本数的比例。公式: R e c a l l = T P / ( T P + F N ) Recall=TP / (TP + FN) Recall=TP/(TP+FN)
      • F1分数(F1 Score):精确率和召回率的调和平均数,用于综合评估两者的表现,公式: F 1 S c o r e = 2 ∗ ( P r e c i s i o n ∗ R e c a l l ) / ( P r e c i s i o n + R e c a l l ) F1\ Score=2 * (Precision * Recall) / (Precision + Recall) F1 Score=2(PrecisionRecall)/(Precision+Recall)
      • ROC 曲线与 AUC 值(适用于二分类):
        • ROC 曲线是一种展示分类模型在不同阈值下的性能的图形化方法,它通过绘制真阳性率(TPR,True Positive Rate)对假阳性率(FPR,False Positive Rate)来实现;
          • 真阳性率( T P R ) = T P T P + F N 真阳性率(TPR)= \frac{TP}{TP+FN} 真阳性率(TPR=TP+FNTP(也称为召回率Recall);
          • 假阳性率( F P R ) = F P F P + T N 假阳性率(FPR) = \frac{FP}{FP+TN} 假阳性率(FPR=FP+TNFP
          • ROC 曲线展示了模型区分正负类别的能力。理想情况下,希望 TPR 尽可能高,同时保持FPR尽可能低。曲线越靠近左上角(即 TPR接近 1 而 FPR 接近 0 ) ,表示模型的性能越好。
        • AUC 指的是ROC曲线下方的面积大小,它是衡量模型区分能力的一个单一数值指标,AUC的取值范围从0到1,其中:
          • AUC = 1 表示完美的分类器;
          • AUC = 0.5 表示模型的表现与随机猜测相同;
          • AUC < 0.5 则表示模型比随机猜测还要差(这种情况通常可以通过反转预测标签来改善)。
          • AUC值越高,说明模型的平均性能越好,对于不平衡数据集来说,AUC是一个非常有用的评估标准,因为它不直接依赖于类别分布的比例。
    • 回归指标(SVR):
      • 均方误差(MSE):预测值与实际值之间差异的平方的平均值;
      • R 2 R² R2 值(决定系数):表示模型解释变量变异的比例。

2. MATLAB 实现

银行需根据客户信息预测其贷款违约风险,特征包括:

  • 年龄月收入信用评分负债比(负债/收入)历史违约次数
  • 标签:0(正常客户),1(高风险客户)。

支持向量机根据客户信息预测其贷款违约风险结果①
支持向量机根据客户信息预测其贷款违约风险结果②

%% 支持向量机(SVM)根据客户信息预测其贷款违约风险
clc; clear; close all;%% 生成模拟数据(1000个样本)
rng(25); % 固定随机种子
num_samples = 1000;% 特征生成
age = randi([22, 65], num_samples, 1); % 年龄:22-65岁
income = rand(num_samples, 1)*15000 + 3000; % 月收入:3000-18000
credit_score = randn(num_samples, 1)*50 + 650; % 信用评分:均值650,标准差50
debt_ratio = rand(num_samples, 1)*0.7 + 0.1; % 负债比:0.1-0.8
past_default = randi([0, 3], num_samples, 1); % 历史违约次数:0-3次% 标签生成(违约概率与负债比、历史违约次数正相关)
default_prob = 1 ./ (1 + exp(-(0.5*debt_ratio + 0.8*past_default - 0.1*(credit_score-600)/50)));
labels = double(default_prob > 0.6); % 阈值0.6% 合并特征矩阵
X = [age, income, credit_score, debt_ratio, past_default];
y = labels;%% 数据标准化(Z-score)
X_scaled = zscore(X);% 按7:3划分训练集和测试集
cv = cvpartition(y, 'HoldOut', 0.3);
X_train = X_scaled(cv.training, :);
y_train = y(cv.training, :);
X_test = X_scaled(cv.test, :);
y_test = y(cv.test, :);%% 使用高斯核SVM,设置参数
svm_model = fitcsvm(X_train, y_train, ...'KernelFunction', 'RBF', ...       % 高斯核'BoxConstraint', 1, ...            % 正则化参数C,控制过拟合'KernelScale', 'auto', ...         % 自动计算核参数γ'Standardize', false);             % 已手动标准化数据%% 预测测试集
[y_pred, scores] = predict(svm_model, X_test);%% =====================================================================
%% 模型评估指标计算
% 1. 准确率 (Accuracy)
accuracy = sum(y_pred == y_test) / numel(y_test);% 2. 混淆矩阵
conf_mat = confusionmat(y_test, y_pred);
TP = conf_mat(2,2); % 真正例 (True Positive)
FP = conf_mat(1,2); % 假正例 (False Positive)
FN = conf_mat(2,1); % 假负例 (False Negative)% 3. 精确率 (Precision)
precision = TP / (TP + FP);% 4. 召回率 (Recall)
recall = TP / (TP + FN);% 5. F1-Score
f1_score = 2 * (precision * recall) / (precision + recall);% 6. 均方误差 (MSE) —— 基于预测概率(需转换为0-1概率)
% 注意:SVM默认输出决策值,需转换为概率(MATLAB需训练后验概率模型)
svm_model = fitPosterior(svm_model); % 训练概率输出模型
[~, prob_estimates] = predict(svm_model, X_test);
mse = mean((prob_estimates(:,2) - y_test).^2); % 使用正类概率计算MSE% 7. R²值 (基于预测概率)
ss_total = sum((y_test - mean(y_test)).^2);
ss_residual = sum((y_test - prob_estimates(:,2)).^2);
r_squared = 1 - (ss_residual / ss_total);%% 输出结果
fprintf('=== 模型评估指标 ===\n');
fprintf('准确率: %.2f%%\n', accuracy*100);
fprintf('精确率: %.2f%%\n', precision*100);
fprintf('召回率: %.2f%%\n', recall*100);
fprintf('F1-Score: %.2f\n', f1_score);
fprintf('均方误差 (MSE): %.4f\n', mse);
fprintf('R²值: %.4f\n\n', r_squared);
disp('混淆矩阵:');
disp(conf_mat);%% 绘制ROC曲线
figure;
[X_roc, Y_roc, ~, AUC] = perfcurve(y_test, scores(:,2), 1);
plot(X_roc, Y_roc, 'LineWidth', 2);
xlabel('假正率 (FPR)');
ylabel('真正率 (TPR)');
title(sprintf('ROC曲线 (AUC = %.2f)', AUC));
grid on;

参考资料

[1] 【数之道】支持向量机SVM是什么,八分钟直觉理解其本质_哔哩哔哩_bilibili

相关文章:

【监督学习】支持向量机步骤及matlab实现

支持向量机 &#xff08;四&#xff09;支持向量机1.算法步骤2. MATLAB 实现参考资料 &#xff08;四&#xff09;支持向量机 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种用于分类、回归分析以及异常检测的监督学习模型。SVM特别擅长处理高维空间的…...

机器学习-随机森林解析

目录 一、.随机森林的思想 二、随机森林构建步骤 1.自助采样 2.特征随机选择 3构建决策树 4.集成预测 三. 随机森林的关键优势 ​**(1) 减少过拟合** ​**(2) 高效并行化** ​**(3) 特征重要性评估** ​**(4) 耐抗噪声** 四. 随机森林的优缺点 ​优点 ​缺点 五.…...

Javaweb后端spring事务管理 事务四大特性ACID

2步操作&#xff0c;只能同时成功&#xff0c;同时失败&#xff0c;要放在一个事务中&#xff0c;最后提交事务或者回滚事务 事务控制 事务管理进阶 事务的注解 这是所有异常都会回滚 事务注解 事务的传播行为 四大特性...

在Spring Boot + MyBatis中优雅处理多表数据清洗:基于XML的配置化方案

问题背景 在实际业务中&#xff0c;我们常会遇到数据冗余问题。例如&#xff0c;一个公司表&#xff08;sys_company&#xff09;中存在多条相同公司名的记录&#xff0c;但只有一条有效&#xff08;del_flag0&#xff09;&#xff0c;其余需要删除。删除前需将关联表&#xf…...

【无标题】四色拓扑模型与宇宙历史重构的猜想框架

### 四色拓扑模型与宇宙历史重构的猜想框架 --- #### **一、理论基础&#xff1a;四色拓扑与时空全息原理的融合** 1. **宇宙背景信息的拓扑编码** - **大尺度结构网络**&#xff1a;将星系团映射为四色顶点&#xff0c;纤维状暗物质结构作为边&#xff0c;构建宇宙尺度…...

[特殊字符] Django 常用命令

&#x1f680; Django 常用命令大全&#xff1a;从开发到部署 Django 提供了许多实用的命令&#xff0c;可以用于 数据库管理、调试、测试、用户管理、运行服务器、部署 等。 本教程将详细介绍 Django 开发中最常用的命令&#xff0c;并提供 示例&#xff0c;帮助你更高…...

mysql中如何保证没有幻读发生

在 MySQL 中&#xff0c;幻读&#xff08;Phantom Read&#xff09;是指在一个事务中&#xff0c;两次相同的查询返回了不同的结果集&#xff0c;通常是由于其他事务插入或删除了符合查询条件的数据。为了保证没有幻读&#xff0c;MySQL 主要通过 事务隔离级别 和 锁机制 来实现…...

Golang实践录:go发布版本信息收集

go发布版本信息收集。 背景 本文从官方、网络资料收罗有关go的发布历史概况。主要目的是能快速了解golang不同版本的变更。鉴于官方资料为英文&#xff0c;为方便阅读&#xff0c;使用工具翻译成中文&#xff0c;重要特性参考其它资料补充/修改。由于发布版本内容较多&#xf…...

字节跳动AI原生编程工具Trae和百度“三大开发神器”AgentBuilder、AppBuilder、ModelBuilder的区别是?

字节跳动AI编程工具Trae与百度"三大开发神器"&#xff08;AgentBuilder、AppBuilder、ModelBuilder&#xff09;在定位、功能架构和技术路线上存在显著差异&#xff0c;具体区别如下&#xff1a; 一、核心定位差异 Trae&#xff1a;AI原生集成开发环境&#xff08;AI…...

【UCB CS 61B SP24】Lecture 21: Data Structures 5: Priority Queues and Heaps 学习笔记

本文介绍了优先队列与堆&#xff0c;分析了最小堆的插入与删除过程&#xff0c;并用 Java 实现了一个通用类型的最小堆。 1. 优先队列 1.1 介绍 优先队列是一种抽象数据类型&#xff0c;其元素按照优先级顺序被处理。不同于普通队列的先进先出&#xff08;FIFO&#xff09;&…...

mapbox高阶,结合threejs(threebox)添加三维球体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️threebox Sphere静态对象二、🍀使用t…...

QEMU源码全解析 —— 块设备虚拟化(1)

本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 详解全虚拟半虚拟及硬件辅助虚拟化技术-百度开发者中心 特此致谢! 序言 本专栏之前的系列文章,讲了很多QEMU/KVM相关知识,其中一部分内容是设备的虚拟…...

IDEA中Git版本回退终极指南:Reset与Revert双方案详解

目录 前言一、版本回退前置知识二、Reset方案&#xff1a;整体改写历史1、IDEA图形化操作&#xff08;推荐&#xff09;1.1、查看提交历史1.2、选择目标版本1.3、选择回退模式1.3.1、Soft&#xff08;推荐&#xff09;1.3.2、Mixed1.3.3、Hard&#xff08;慎用&#xff09;1.3.…...

Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配

Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配 目录 Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配 一、简单介绍 二、简单介绍 flutter_screenutil 三、安装 carousel_slider 四、简单案例实现 五、关键代码 六、补…...

实验一:在Windows 10/11下配置和管理TCP/IP

目录 1.【实训目标】 2.【实训环境】 3.【实训内容】 4.【实训步骤】 1.【实训目标】 1.了解网络基本配置中包含的协议、服务、客户端。 2.了解Windows支持的网络协议及参数设置方法。 3.掌握TCP/IP协议的配置。 2.【实训环境】 硬件环境&#xff1a;每人一台计算机&a…...

基于hive的电信离线用户的行为分析系统

标题:基于hive的电信离线用户的行为分析系统 内容:1.摘要 随着电信行业的快速发展&#xff0c;用户行为数据呈现出海量、复杂的特点。为了深入了解用户行为模式&#xff0c;提升电信服务质量和精准营销能力&#xff0c;本研究旨在构建基于 Hive 的电信离线用户行为分析系统。通…...

Rust WebAssembly 入门教程

一、开发环境搭建 1. 基础工具安装 # 安装 Rust curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh# 安装 wasm-pack cargo install wasm-pack# 安装开发服务器 cargo install basic-http-server# 安装文件监听工具 cargo install cargo-watch2. VSCode 插件安装…...

部署RabbitMQ集群详细教程

部署RabbitMQ集群详细教程 下面是一份在 Ubuntu 环境下部署 RabbitMQ 集群的详细步骤说明&#xff0c;涉及主机名设置、Erlang & RabbitMQ 安装、管理插件启用、集群通信 Cookie 配置、节点加入集群、镜像队列策略设置以及集群验证等。为了演示方便&#xff0c;以下示例假…...

20250306JIRA添加企业微信邮箱通知

文章目录 一&#xff0c;参考链接如下二&#xff0c;补充内容1&#xff0c;登录企业邮箱2&#xff0c;设置密码3&#xff0c;设置收发信设置 一&#xff0c;参考链接如下 参考链接&#xff1a;https://blog.csdn.net/icett/article/details/142520823 二&#xff0c;补充内容…...

代码随想录算法训练营第五十七天 | 101. 孤岛的总面积 102. 沉没孤岛 103. 水流问题 104.建造最大岛屿

101. 孤岛的总面积 题目链接&#xff1a;KamaCoder 文档讲解&#xff1a;代码随想录 状态&#xff1a;AC Java代码&#xff1a; import java.util.*;class Main {static int count 0;static int res 0;static boolean island true;public static int[][] dir new int[][]{…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...