【大数据】机器学习------支持向量机(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.rhkb.cn/news/4007.html

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

相关文章

左神算法基础提升--4

文章目录 树形dp问题Morris遍历 树形dp问题 求解这个问题需要用到我们在基础班上学到的从节点的左子树和右子树上拿信息的方法。 求最大距离主要分为两种情况&#xff1a;1.当前节点参与最大距离的求解&#xff1b;2.当前节点不参与最大距离的求解&#xff1b; 1.当前节点参与最…

53,【3】BUUCTF WEB october 2019 Twice SQLinjection

题目得到信息&#xff0c;2次注入&#xff0c;进入靶场 登录页面&#xff0c;很自然想到SQL 第一次注入应该是这个可以登录&#xff0c;注册&#xff0c;提交简介的页面 第二次注入应该是在info处注入&#xff0c;信息显示在简介处 我真的纯脑子有病&#xff0c;人家二次注入不…

python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)图像变换

形态变换 图像处理中的形态学操作是处理图像结构的有效方法。以下是一些常见的形态学操作的介绍及其在 OpenCV 中的实现示例。 1. 腐蚀&#xff08;Erosion&#xff09; 腐蚀操作通过消除图像边界来减少图像中的白色区域&#xff08;前景&#xff09;&#xff0c;使物体的边…

Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)

目录 引言 Apache POI操作Excel的实用技巧 1.合并单元格操作 2.设置单元格样式 1. 创建样式对象 2. 设置边框 3. 设置底色 4. 设置对齐方式 5. 设置字体样式 6.设置自动换行 7. 应用样式到单元格 3. 定位和操作指定单元格 4.实现标签-值的形式 5.列宽设置 1. 设…

python(25) : 含有大模型生成的公式的文本渲染成图片并生成word文档(支持flask接口调用)

公式样例 渲染前 \[ \sqrt{1904.615384} \approx 43.64 \] 渲染后 安装依赖 pip install matplotlib -i https://mirrors.aliyun.com/pypi/simple/ requestspip install sympy -i https://mirrors.aliyun.com/pypi/simple/ requestspip install python-docx -i https…

基于32QAM的载波同步和定时同步性能仿真,包括Costas环的gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…

ARP Check

ARP Check所解决的问题 ARP Check主要用于解决ARP欺骗的问题&#xff0c;依赖于DHCP SnoopingIP Source Guard或者是端口安全全局地址绑定来达到防止ARP欺骗的作用 一旦在端口下配置了ARP Check功能&#xff0c;那么如果不是表项中所对应的IPMAC或是IP的话&#xff0c;就会拒…

通信协议之多摩川编码器协议

前言 学习永无止境&#xff01;本篇是通信协议之多摩川编码器协议&#xff0c;主要介绍RS485硬件层以及软件层帧格式。 注&#xff1a;本文章为学习笔记&#xff0c;部分图片与文字来源于网络/应用手册&#xff0c;如侵权请联系&#xff01;谢谢&#xff01; 一、多摩川协议概述…

Web前端第一次作业

主页代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>主页</title> …

力扣动态规划-2【算法学习day.96】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…

LINUX 内核设计于实现 阅读记录(2025.01.14)

文章目录 一、内核历史1、内核简介2、LINUX 内核与 UNIX 内核比较3、LINUX内核版本命名 二、从内核出发1、获取内核源码&#xff08;1&#xff09;查看Linux内核版本 uname -r&#xff08;2&#xff09;下载源码 https://www.kernel.org/&#xff08;3&#xff09;编译内核 2、…

Phi小模型开发教程:用C#开发本地部署AI聊天工具,只需CPU,不需要GPU,3G内存就可以运行,不输GPT-3.5

大家好&#xff0c;我是编程乐趣。 行业诸多大佬一直在说&#xff1a;“‌2025年将是AI应用元年‌”&#xff0c;虽然说大佬的说法不一定对&#xff0c;但AI趋势肯定没错的。 对于我们程序员来说&#xff0c;储备AI应用开发技能&#xff0c;不管对找工作、接项目、创业肯定是…

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

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

【机器学习实战入门】基于深度学习的乳腺癌分类

什么是深度学习&#xff1f; 作为对机器学习的一种深入方法&#xff0c;深度学习受到了人类大脑和其生物神经网络的启发。它包括深层神经网络、递归神经网络、卷积神经网络和深度信念网络等架构&#xff0c;这些架构由多层组成&#xff0c;数据必须通过这些层才能最终产生输出。…

ASP .NET Core 学习(.NET9)配置接口访问路由

新创建的 ASP .NET Core Web API项目中Controller进行请求时&#xff0c;是在地址:端口/Controller名称进行访问的&#xff0c;这个时候Controller的默认路由配置如下 访问接口时&#xff0c;是通过请求方法&#xff08;GET、Post、Put、Delete&#xff09;进行接口区分的&…

TextButton组件的功能与用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了CircleAvatar Widget,本章回中将介绍Button这种Widget&#xff0c;闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 关于Button相信大家都很熟悉&#xff0c;也就是我们常用的按钮。用户按下按钮后…

3. 后端验证前端Token

书接上回&#xff0c;后端将token返回给前端&#xff0c;前端存入cookie&#xff0c;每次前端给后端发送请求&#xff0c;后端是如何验证的。 若依是用过滤器来实现对请求的验证&#xff0c;过滤器的简单理解是每次发送请求的时候先发送给过滤器执行逻辑判断以及处理&#xff0…

RabbitMQ-消息可靠性以及延迟消息

目录 消息丢失 一、发送者的可靠性 1.1 生产者重试机制 1.2 生产者确认机制 1.3 实现生产者确认 &#xff08;1&#xff09;开启生产者确认 &#xff08;2&#xff09;定义ReturnCallback &#xff08;3&#xff09;定义ConfirmCallback 二、MQ的持久化 2.1 数据持久…

大文件上传服务-后端V1V2

文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节&#xff0c;把之前做的项目拿过来总结一下&#xff0c;自己写的一个…

Web小练习01

#制作简易网页# 本章包括主页、注册页面、登陆页面 主页 1.1主页代码如下 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…