吃瓜教程-Task05

目录

支持向量机

间隔与支持向量

SVM基本型

对偶问题

kkt条件

例子

对偶问题

例子

对偶问题原理解释

软间隔与正则化

 替代损失函数

支持向量回归

 例子


支持向量机

间隔与支持向量

在样本空间中,划分超平面可通过如下线性方程来描述:

样本空间中任意点x到超平面的距离可写为:

SVM基本型

与找到最大间隔,即可写成:


对偶问题

kkt条件

KKT条件(Karush-Kuhn-Tucker条件)是非线性优化问题的必要条件,通常用于解决包含约束条件的优化问题。它包括三个主要部分:

1)原问题的一阶导数为零,

2)松弛变量与约束条件的乘积为零(补充松弛性条件),

3)约束条件小于等于零。

例子

最小化 f(x,y) = x^2 + y^2, 受约束 g(x,y) = x + y - 1 <= 0。

1)原问题的一阶导数为零:df/dx = 2x + λ = 0,df/dy = 2y + λ = 0;

2)补充松弛性条件:λ * g(x,y) = 0;

3)约束条件:g(x,y) = x + y - 1 <= 0。

从1)我们可以得到 x = -λ/2,y = -λ/2,代入约束条件得到 λ = -2。代入回原问题解得到x = y = 1。验证满足所有条件,这是最优解。

对偶问题

对偶问题是一种优化策略,用于解决难以直接解决的原始优化问题。原始问题的对偶问题可以提供原问题解的下界(最小化问题)或上界(最大化问题)。对偶问题在许多优化算法(如支持向量机和线性规划)中被广泛应用,因为它通常具有更简单的数学形式,更易于求解。如果问题满足一些条件(如凸性和约束条件),原问题和对偶问题的解会相等,称为强对偶性。

例子

原始问题是:最小化 f(x) = x^2,满足条件 g(x) = x - 2 >= 0。

首先,构造拉格朗日函数L(x,λ) = f(x) - λg(x) = x^2 - λ(x - 2)。这里的λ是拉格朗日乘子,对应于约束g(x)。这个函数包含了原始问题的目标函数和约束,使得我们能够同时处理它们。

然后,我们构造对偶函数D(λ),它是拉格朗日函数L(x,λ)关于x的最小值。即,对于每个λ,找到最小化L(x,λ)的x。我们可以通过求解L(x,λ)的导数并令其等于零来找到这个x:2x - λ = 0,解出 x = λ / 2。然后,我们用x = λ / 2替换拉格朗日函数中的x,得到D(λ) = (λ/2)^2 - λ(λ/2 - 2) = -λ^2/2 + 2λ。

对偶问题是:最大化 D(λ)。即,找到使D(λ)最大的λ。我们可以通过求解D(λ)的导数并令其等于零来找到这个λ:-λ + 2 = 0,解出 λ = 2。

最后,我们将λ = 2带回原始问题,得到原始问题的解x = λ / 2 = 1。因此,原始问题的最小值是f(x) = (1)^2 = 1。

对偶问题原理解释

原始问题是寻找一个解来最小化目标函数。对于包含约束的最小化问题,我们可以构建拉格朗日函数,然后寻找使这个函数最小的值。然后,我们定义对偶函数,对偶函数是对于每个λ,拉格朗日函数的最小值。

然而,对于某些λ,对偶函数的值可能低于原问题的最优值。为什么会这样呢?这是因为拉格朗日函数包含了原问题的目标函数和约束。在满足所有约束的x值中,原问题的目标函数是有一个最小值的。而在所有x(可能并不满足所有约束)中,拉格朗日函数则可能找到一个更小的值。

对于所有可能的x(包括违反约束的x),在某些λ下,拉格朗日函数可能会比原问题的最优值还要小。这是因为λ * g(x)可能会使得拉格朗日函数减小,即使f(x)并未达到最小值。因此,对偶函数D(λ) = min_x{L(x, λ)}可能会给出一个小于原问题最优值的下界。而我们的目标是找到一个使这个下界尽可能大的λ,即求解max λ {D(λ)}。也就是使得对偶函数的值最大的λ。这就是为什么说对偶问题是寻找原问题最优值下界的最大化问题的原因。这样,我们就能找到最接近原问题最优值的下界,也就找到了原问题的一个近似解

软间隔与正则化

在现实任务往往很难确定合适的核函数使得训练样本在特征空间 中线性可分,所以我们允许支持向量机在一些样本上出错。

 替代损失函数

它们通常是凸的连续函数且是 的上界。

支持向量回归

 例子

from sklearn.svm import SVR
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_regression
import numpy as np# 创建一个回归问题的数据集
X, y = make_regression(n_samples=100, n_features=1, noise=0.1)# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 使用线性核函数创建一个支持向量回归模型
svr = SVR(kernel='linear', epsilon=0.1, C=1.0)# 在训练集上训练模型
svr.fit(X_train, y_train)# 在测试集上测试模型
y_pred = svr.predict(X_test)# 计算并输出均方误差
mse = mean_squared_error(y_test, y_pred)
print('Mean squared error: ', mse)

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

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

相关文章

数据结构【哈夫曼树】

哈夫曼树 哈夫曼树的概念哈夫曼树的构造构造算法的实现哈夫曼树应用哈夫曼编码哈夫曼编码的算法实现 哈夫曼树的概念 最优二叉树也称哈夫曼 (Huffman) 树&#xff0c;是指对于一组带有确定权值的叶子结点&#xff0c;构造的具有最小带权路径长度的二叉树。权值是指一个与特定结…

[原创]从强化学习的本质推导到PPO

前言 这篇博客很久之前就想做了&#xff0c;一直在拖是因为觉得自己对知识点理解还没有足够的透彻。但是每当去复盘基本概念的时候又很难理清逻辑&#xff0c;所以觉得即便现在半吊子水平&#xff0c;但是也想通过博客记录一下自己肤浅的学习心得&#xff0c;权当是为自己巩固…

加拿大量子研究新动作!D-Wave与滑铁卢大学合作研究量子相干性

​ &#xff08;图片来源&#xff1a;网络&#xff09; D-Wave是量子计算系统、软件和服务的领导者&#xff0c;也是量子计算机的第一家供应商。近期&#xff0c;D-Wave宣布与滑铁卢大学量子计算研究所&#xff08;IQC&#xff09;达成两项新合作。他们为量子计算系统建立了关键…

【计算机网络】网络层协议 -- ICMP协议

文章目录 1. ICMP协议简介2. ICMP协议格式3. ping命令4. ping命令与端口号没有关系&#xff01;&#xff01;&#xff01;5. traceroute命令 1. ICMP协议简介 ICMP&#xff08;Internet Control Message Protocol&#xff0c;控制报文协议&#xff09;&#xff0c;用于在IP主机…

无代码集成明道云与更多应用连接

明道云是一个APaaS平台&#xff0c;可以帮助用户快速搭建个性化企业应用&#xff0c;用户不需要代码开发就能够搭建出用户体验上佳的销售、运营、人事、采购等核心业务应用&#xff0c;打通企业内部数据&#xff0c;也能够通过API和Webhook和其他系统对接。 场景描述&#xff…

libcurl网络库的函数接口使用

文章目录 1、libcurl简介2、libcurl的使用3、函数简介4、 curl_easy_setopt函数部分选项介绍5、curl_easy_perform 函数说明&#xff08;error 状态码&#xff09;6、简单实例,包含库文件&#xff0c;头文件即可 1、libcurl简介 libcurl是一个跨平台的网络协议库&#xff0c;支…

消息队列(3) -封装数据库的操作

前言 上一篇博客我们写了, 关于交换机, 队列,绑定, 写入数据库的一些建库建表的操作 这一篇博客中,我们将建库建表操作,封装一下实现层一个类来供上层服务的调用 , 并在写完该类之后, 测试代码是否完整 实现封装 在写完上述的接口类 与 xml 后, 我们想要 创建一个类 ,来调用…

uniapp实现支付宝菜单展开与收起

需求实现支付宝类似的效果&#xff1a; 思路&#xff1a; 1.首先建立展开收起按钮&#xff0c;这里使用的是uview里面的icon图标。 2.其次建立展开菜单内容&#xff0c;这里只演示了文本信息&#xff0c;后期引入首页应用。 3.最后写js逻辑&#xff0c;展开收起时改变盒子高度和…

基于STM32设计的出租车计费系统

一、项目介绍 在城市交通中&#xff0c;出租车是一种常见的交通工具。为了方便乘客和司机之间的交易&#xff0c;出租车计费系统被广泛应用于出租车行业。系统能够自动计算乘客的费用&#xff0c;提供准确、方便的计费服务&#xff0c;并且能够记录乘客的行驶数据&#xff0c;…

flink kafka消费者如何处理kafka主题的rebalance

背景&#xff1a; 我们日常使用kafka客户端消费kafka主题的消息时&#xff0c;当消费者退出/加入消费者组&#xff0c;kafka主题分区数有变等事件发生时&#xff0c;都会导致rebalance的发生&#xff0c;此时一般情况下&#xff0c;如果我们不自己处理offset&#xff0c;我们不…

django处理分页

当数据库量比较大的时候一定要分页查询的 在django中操作数据库进行分页 queryset models.PrettyNum.objects.all() #查询所有 queryset models.PrettyNum.objects.all()[0:10] #查询出1-10列 queryset models.PrettyNum.objects.filter(mobile__contains136)[0:10] …

python-opencv对极几何 StereoRectify

OpenCV如何正确使用stereoRectify函数 函数介绍 用于双目相机的立体校正环节中&#xff0c;这里只谈谈这个函数怎么使用&#xff0c;参数具体指哪些函数参数 随便去网上一搜或者看官方手册就能得到参数信息&#xff0c;但是&#xff01;&#xff01;相对关系非常容易出错&…

机器学习深度学习——池化层

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——卷积的多输入多输出通道 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们…

1. Git基础知识

文章目录 Git基础知识一、集中式与分布式二、中心服务器三、工作流四、分支实现五、冲突六、Fast forward七、储藏&#xff08;Stashing&#xff09;八、SSH 传输设置九、.gitignore 文件十、Git 命令一览十一、和远端仓库交互 Git基础知识 一、集中式与分布式 Git 属于分布式…

【单片机】51单片机,晨启科技,板子引脚对应关系

一般引脚: sbit beepP2^4; //将单片机的P2.4端口定义为beep.本口用于屏蔽上电后蜂鸣器响 sbit ledP1^0; //将单片机的P1.0端口定义为led&#xff0c;用于点亮LED-D1 sbit DIG1P0^0; //数码管位选1 sbit DIG2P0^1; //数码管位选2P10xFF;//初始化P1引脚全部置高&a…

【第一阶段】kotlin的when表达式

1.Java 的if /when是语句 kotlin的if/when是表达式&#xff0c;表达式是有返回值的 java中void是个关键字&#xff0c;Unit在kotlin中是个类 2.当使用when语句的时候必须有一个不满足的值即else: fun main() {var week:Int5val info when(week){1->"今天是星期一"…

Transformer学习笔记

Transformer学习笔记 前言前提条件相关介绍Transformer总体架构编码器&#xff08;Encoder&#xff09;位置编码&#xff08;Positional Encoding&#xff09;get_attn_pad_mask函数&#xff08;Padding Mask&#xff09;EncoderLayerMultiHeadAttentionScaledDotProductAttent…

项目出bug,找不到bug,如何拉回之前的版本

1.用gitee如何拉取代码 本文为转载于「闪耀太阳a」的原创文章原文链接&#xff1a;https://blog.csdn.net/Gufang617/article/details/119929145 怎么从gitee上拉取代码 1.首先找到gitee上想要拉取得代码URL地址 点击复制这里的https地址 1 ps:&#xff08;另外一种方法&…

xcode打包导出ipa

转载&#xff1a;xcode打包导出ipa 目录 转载&#xff1a;xcode打包导出ipa 第一步&#xff1a;注册苹果开发者账号 第二步&#xff1a;下载APP Uploader 第三步&#xff1a;使用xcode打包导出ipa文件&#xff0c;供其他人内测 众所周知&#xff0c;在开发苹果应用时需要使…

Leetcode31 下一个排列

解题思路&#xff1a; 算法过程的第二步&#xff0c;可以变为将[j,end]排序&#xff0c;然后从[j,end)和i进行比较&#xff0c;在区间j,end区间第一个大于nums[i]后&#xff0c;交换即可 public void nextPermutation(int[] nums) {int len nums.length - 1;for(int i len;i…