【大数据】机器学习------支持向量机(SVM)

支持向量机的基本概念和数学公式:

1. 线性可分的支持向量机

对于线性可分的数据集在这里插入图片描述
,其中(x_i \in R^d) 是特征向量在这里插入图片描述
是类别标签,目标是找到一个超平面
在这里插入图片描述
,使得对于所有在这里插入图片描述
的样本
在这里插入图片描述
,对于所有(y_i = -1) 的样本,(w^T x_i + b \leq -1)。

间隔(M)定义为:在这里插入图片描述

目标是最大化间隔,即最小化(\frac{1}{2}|w|^2),同时满足![在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 对偶问题

通过引入拉格朗日乘子(\alpha_i\geq 0),原问题的拉格朗日函数为:
在这里插入图片描述

对偶问题通过对(L)求(w)和(b)的偏导数并令其为(0)得到:
在这里插入图片描述
在这里插入图片描述

对偶问题是最大化
在这里插入图片描述
约束条件为在这里插入图片描述

3. 核函数

核函数在这里插入图片描述
,将数据映射到高维空间。常见的核函数有:

  • 线性核:

  • 在这里插入图片描述

  • 多项式核:在这里插入图片描述

  • 径向基函数(RBF)核:在这里插入图片描述

4. 软间隔与正则化

引入松弛变量(\xi_i\geq 0),目标函数变为:

在这里插入图片描述
约束条件为

在这里插入图片描述
在这里插入图片描述

5. 支持向量回归(SVR)

对于回归问题,引入(\epsilon)-不敏感损失函数,目标是找到(w) 和(b) 使得:
在这里插入图片描述

约束条件为
在这里插入图片描述
在这里插入图片描述

代码示例(使用 Python 和 scikit-learn 库):

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC, SVR
from sklearn.metrics import accuracy_score, mean_squared_error
import numpy as np# 生成示例数据集
X, y = datasets.make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=42)
y[y == 0] = -1  # 将类别标签转换为 -1 和 1# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 线性 SVM 分类器
svm_classifier = SVC(kernel='linear', C=1.0)
svm_classifier.fit(X_train, y_train)
y_pred = svm_classifier.predict(X_test)
print("线性 SVM 分类准确率:", accuracy_score(y_test, y_pred))# 多项式核 SVM 分类器
svm_poly_classifier = SVC(kernel='poly', degree=3, C=1.0)
svm_poly_classifier.fit(X_train, y_train)
y_pred_poly = svm_poly_classifier.predict(X_test)
print("多项式核 SVM 分类准确率:", accuracy_score(y_test, y_pred_poly))# RBF 核 SVM 分类器
svm_rbf_classifier = SVC(kernel='rbf', gamma=0.7, C=1.0)
svm_rbf_classifier.fit(X_train, y_train)
y_pred_rbf = svm_rbf_classifier.predict(X_test)
print("RBF 核 SVM 分类准确率:", accuracy_score(y_test, y_pred_rbf))# 生成回归数据集
X_reg, y_reg = datasets.make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.3, random_state=42)# 支持向量回归
svr = SVR(kernel='rbf', C=1.0, epsilon=0.2)
svr.fit(X_train_reg, y_train_reg)
y_pred_reg = svr.predict(X_test_reg)
print("SVR 均方误差:", mean_squared_error(y_test_reg, y_pred_reg))

在这里插入图片描述

代码解释:

datasets.make_classification:生成分类数据集。

  • train_test_split:将数据集划分为训练集和测试集。
  • SVC:支持向量分类器,可指定不同的核函数(linearpolyrbf 等)和正则化参数 C
  • accuracy_score:计算分类准确率。
  • datasets.make_regression:生成回归数据集。
  • SVR:支持向量回归,可指定核函数、正则化参数 C 和(\epsilon) 参数。
  • mean_squared_error:计算均方误差。

手动实现 SVM 分类器(简化版):

import numpy as npdef linear_kernel(x1, x2):return np.dot(x1, x2)def train_svm(X, y, C=1.0, max_iter=1000, tol=1e-3, kernel=linear_kernel):n_samples, n_features = X.shapealpha = np.zeros(n_samples)b = 0eta = 0L = 0H = 0for iteration in range(max_iter):num_changed_alphas = 0for i in range(n_samples):Ei = np.sum(alpha * y * kernel(X, X[i])) + b - y[i]if (y[i] * Ei < -tol and alpha[i] < C) or (y[i] * Ei > tol and alpha[i] > 0):j = np.random.choice([k for k in range(n_samples) if k!= i])Ej = np.sum(alpha * y * kernel(X, X[j])) + b - y[j]alpha_i_old = alpha[i]alpha_j_old = alpha[j]if y[i] == y[j]:L = max(0, alpha[j] + alpha[i] - C)H = min(C, alpha[j] + alpha[i])else:L = max(0, alpha[j] - alpha[i])H = min(C, C + alpha[j] - alpha[i])if L == H:continueeta = 2 * kernel(X[i], X[j]) - kernel(X[i], X[i]) - kernel(X[j], X[j])if eta >= 0:continuealpha[j] -= y[j] * (Ei - Ej) / etaalpha[j] = np.clip(alpha[j], L, H)if abs(alpha[j] - alpha_j_old) < tol:continuealpha[i] += y[i] * y[j] * (alpha_j_old - alpha[j])b1 = b - Ei - y[i] * (alpha[i] - alpha_i_old) * kernel(X[i], X[i]) - y[j] * (alpha[j] - alpha_j_old) * kernel(X[i], X[j])b2 = b - Ej - y[i] * (alpha[i] - alpha_i_old) * kernel(X[i], X[j]) - y[j] * (alpha[j] - alpha_j_old) * kernel(X[j], X[j])if 0 < alpha[i] < C:b = b1elif 0 < alpha[j] < C:b = b2else:b = (b1 + b2) / 2num_changed_alphas += 1if num_changed_alphas == 0:breakreturn alpha, bdef predict_svm(X, alpha, b, X_train, y_train, kernel=linear_kernel):n_samples = X.shape[0]y_pred = []for i in range(n_samples):pred = np.sum(alpha * y_train * kernel(X_train, X[i])) + by_pred.append(np.sign(pred))return np.array(y_pred)# 示例使用
X = np.array([[1, 2], [2, 3], [3, 4], [6, 7], [7, 8], [8, 9]])
y = np.array([1, 1, 1, -1, -1, -1])
alpha, b = train_svm(X, y, C=1.0)
y_pred = predict_svm(X, alpha, b, X, y)
print("手动实现 SVM 预测结果:", y_pred)

在这里插入图片描述

代码解释:

linear_kernel:定义线性核函数。

  • train_svm:使用 SMO(Sequential Minimal Optimization)算法训练 SVM,更新拉格朗日乘子(\alpha) 和偏置(b)。
  • predict_svm:使用训练好的(\alpha) 和(b) 进行预测。

在这里插入图片描述

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

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

相关文章

Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来

引言 当我们手握智能手机&#xff0c;流畅地滑动屏幕、切换应用、欣赏动画时&#xff0c;背后其实藏着一套庞大且精密的开源系统——Android AOSP&#xff08;Android Open Source Project&#xff09;。这套系统不仅是所有安卓设备的根基&#xff0c;也是系统开发者的终极 pl…

mono3d汇总

lidar坐标系 lidar坐标系可以简单归纳为标准lidar坐标系和nucense lidar坐标系&#xff0c;参考链接。这个坐标系和车辆的ego坐标系是一致的。 标准lidar坐标系 opendet3d&#xff0c;mmdetection3d和kitt都i使用了该坐标系 up z^ x front| /| /left y <------ 0kitti采…

linux下springboot项目nohup日志或tomcat日志切割处理方案

目录 1. 配置流程 2. 配置说明 其他配置选项&#xff1a; 3. 测试执行 4. 手动执行 https://juejin.cn/post/7081890486453010469 通常情况下&#xff0c;我们的springboot项目部署到linux服务器中&#xff0c;通过nohup java -jar xxx.jar &指令来进行后台运行我们…

[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令

[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令 简介 项目分析 如何执行系统命令并拿到结果 代码实现 简介 在Python学习日记-77中我们介绍了 socket 基于 TCP 和基于 UDP 的套接字&#xff0c;还实现了服务器端和客户端的通信&#xff0c;本…

使用SIPP发起媒体流性能测试详解

使用SIPP发起媒体流性能测试详解 一、SIPP工具简介二、测试前的准备三、编写测试脚本四、运行测试五、分析测试结果六、总结SIPP(SIP Performance Protocol)是一个开源工具,专门用于SIP(Session Initiation Protocol)协议的性能测试和基准测试。SIP是一种用于控制多媒体通…

macOS 安装JDK17

文章目录 前言介绍新特性下载安装1.下载完成后打开downloads 双击进行安装2.配置环境变量3.测试快速切换JDK 小结 前言 近期找开源软件&#xff0c;发现很多都已经使用JDK17springboot3 了&#xff0c;之前的JDK8已经被替换下场&#xff0c;所以今天就在本机安装了JDK17&#…

重温STM32之环境安装

缩写 CMSIS&#xff1a;common microcontroller software interface standard 1&#xff0c;keil mdk安装 链接 Keil Product Downloads 安装好后&#xff0c;开始安装平台软件支持包&#xff08;keil 5后不在默认支持所有的平台软件开发包&#xff0c;需要自行下载&#…

vue3+ts+uniapp 微信小程序(第一篇)—— 微信小程序定位授权,位置信息权限授权

文章目录 简介一、先看效果1.1 授权定位前&#xff0c;先弹出隐私协议弹框1.2 上述弹框点击同意&#xff0c;得到如下弹框1.3 点击三个点&#xff0c;然后点设置 1.4 在1.2步骤下&#xff0c;无论同意或者拒绝 二、manifest.json 文件配置三、微信公众平台配置3.1 登录进入微信…

迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-编写内核 LED HDF 驱动程序

接下来编译 LED 驱动&#xff0c;该驱动用于在基于华为设备框架&#xff08;HDF&#xff09;的系统中控制 LED 灯的开关&#xff0c;完整代码如下所示&#xff1a; 更多内容可以关注&#xff1a;迅为RK3568开发板篇OpenHarmony

kafka集群安装Raft 协议

​使用消息中间件&#xff0c;可以实现系统与系统之间的异步通信和无缝对接&#xff0c;也可用在模块之间的的异步通信&#xff0c;有效避免了同步阻塞IO。作为一个高吞吐量、可扩展、高可靠性的分布式消息系统&#xff0c;Kafka 能够胜任从简单的消息队列到复杂的流处理平台的…

华为AI培训-NLP实验

中文分词、命名实体识别、语义词性标注、语句逻辑推理、文本摘要、机器翻译、文本情感分析、内容创作 1 实验介绍 1.1 实验背景 中文分词、命名实体识别、语义词性标注、语句逻辑推理是自然语言处理领域中的重要任务。中文分词是将连续的汉字序列切分成有意义的词语序列…

Flask学习入门笔记

Flask学习入门笔记 前言1. 安装Flask2. 创建一个简单的Flask应用3. 路由与视图函数3.1 基本路由3.2 动态路由3.3 HTTP方法 4. 请求与响应4.1 获取请求数据4.2 返回响应 5. 模板渲染5.1 基本模板渲染5.2 模板继承 6. 静态文件6.1 静态文件的目录结构6.2 在模板中引用静态文件6.2…

citrix netscaler13.1 重写负载均衡响应头(基础版)

在 Citrix NetScaler 13.1 中&#xff0c;Rewrite Actions 用于对负载均衡响应进行修改&#xff0c;包括替换、删除和插入 HTTP 响应头。这些操作可以通过自定义策略来完成&#xff0c;帮助你根据需求调整请求内容。以下是三种常见的操作&#xff1a; 1. Replace (替换响应头)…

【Web】2025西湖论剑·中国杭州网络安全安全技能大赛题解(全)

目录 Rank-l Rank-U sqli or not Rank-l username存在报错回显&#xff0c;发现可以打SSTI 本地起一个服务&#xff0c;折半查找fuzz黑名单&#xff0c;不断扔给fenjing去迭代改payload from flask import Flask, request, render_template_stringapp Flask(__name__)app…

WEB渗透技术研究与安全防御

目录 作品简介I IntroductionII 1 网络面临的主要威胁1 1.1 技术安全1 2 分析Web渗透技术2 2.1 Web渗透技术的概念2 2.2 Web漏洞产生的原因2 2.3 注入测试3 2.3.1 注入测试的攻击流程3 2.3.2 进行一次完整的Sql注入测试4 2.3.3 Cookie注入攻击11 3 安全防御方案设计…

软考高级5个资格、中级常考4个资格简介及难易程度排序

一、软考高级5个资格 01、网络规划设计师 资格简介&#xff1a;网络规划设计师要求考生具备全面的网络规划、设计、部署和管理能力&#xff1b;该资格考试适合那些在网络规划和设计方面具有较好理论基础和较丰富从业经验的人员参加。 02、系统分析师 资格简介&#xff1a;系统分…

Centos 宝塔安装

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 安装成功界面 宝塔说明文档 https://www.bt.cn/admin/servers#wcu 或者可以注册宝塔账号 1 快速部署 安装docker 之后 2 需要在usr/bin下下载do…

Java锁 从乐观锁和悲观锁开始讲 面试复盘

目录 面试复盘 Java 中的锁 大全 悲观锁 专业解释 自我理解 乐观锁 专业解释 自我理解 悲观锁的调用 乐观锁的调用 synchronized和 ReentrantLock的区别 相同点 区别 详细对比 总结 面试复盘 Java 中的锁 大全 悲观锁 专业解释 适合写操作多的场景 先加锁可以…

使用nginx搭建通用的图片代理服务器,支持http/https/重定向式图片地址

从http切换至https 许多不同ip的图片地址需要统一进行代理 部分图片地址是重定向地址 nginx配置 主站地址&#xff1a;https://192.168.123.100/ 主站nginx配置 server {listen 443 ssl;server_name localhost;#ssl证书ssl_certificate ../ssl/ca.crt; #私钥文件ssl_ce…

latin1_swedish_ci(latin1 不支持存储中文、日文、韩文等多字节字符)

文章目录 1、SHOW TABLE STATUS WHERE Name batch_version;2、latin1_swedish_ci使用场景注意事项修改字符集和排序规则修改表的字符集和排序规则修改列的字符集和排序规则修改数据库的默认字符集和排序规则 3、ALTER TABLE batch_version CONVERT TO CHARACTER SET utf8mb4 C…