ML算法——Support Vector Machine随笔【机器学习】

news2024/11/24 15:28:53

文章目录

  • 4、Support Vector Machine (SVM)
    • 4.1、理论部分
      • 4.1.1、更优的决策边界
      • 4.1.2、解决低维不可分问题
    • 4.2、sklearn 实现
      • 4.2.1、SVM 分类(SVC)
      • 4.2.2、SVM回归(SVR)
      • 4.2.3、网格调参
    • 4.3、案例

4、Support Vector Machine (SVM)


4.1、理论部分

4.1.1、更优的决策边界

在这里插入图片描述

后者更优,决策边界距离数据点越远,越优。

1)距离计算

通过数学计算,表达这个距离最远。

d i s t a n c e ( x , b , w ) = ∣ w T ∣ ∣ w ∣ ∣ ( x − x ′ ) ∣ = 1 ∣ ∣ w ∣ ∣ ∣ w T x + b ∣ (1) distance(x,b,w) = |\frac{w^T}{||w||}(x-x')| = \frac{1}{||w||}|w^Tx+b| \tag{1} distance(x,b,w)=∣∣w∣∣wT(xx)=∣∣w∣∣1wTx+b(1)

上述公式的推导过程如下:

在这里插入图片描述

(w,b)确定一个超平面 wZ+b =0,(Z表示平面上的点)

超平面上有两点x‘,x‘’,则满足:

w T x ′ = − b , w T x ′ ’ = − b w^T x' = -b ,w^T x'’ = -b wTx=bwTx=b

由于:

w ⊥ h y p e r p l a n e w ⊥ hyperplane whyperplane

则:

w T ( x ′ − x ′ ′ ) = 0 w^T(x'-x'') =0 wT(xx′′)=0

点到超平面的距离, 即图中dist(x,h) :

d i s t a n c e = p r o j e c t ( x − x ′ ) t o ⊥ h y p e r p l a n e distance = project(x - x') to ⊥ hyperplane distance=project(xx)tohyperplane

进一步整理:

d i s t a n c e ( x , b , w ) = ∣ w T ∣ ∣ w ∣ ∣ ( x − x ′ ) ∣ = 1 ∣ ∣ w ∣ ∣ ∣ w T x + b ∣ distance(x,b,w) = |\frac{w^T}{||w||}(x-x')| = \frac{1}{||w||}|w^Tx+b| distance(x,b,w)=∣∣w∣∣wT(xx)=∣∣w∣∣1wTx+b

2)数据标签定义

  • 数据集: ( X 1 , y 1 ) ( X 2 , y 2 ) ( X 3 , y 3 ) . . . ( X n , y n ) (X_1,y_1)(X_2,y_2)(X_3,y_3)...(X_n,y_n) (X1,y1)(X2,y2)(X3,y3)...(Xn,yn)

  • y的说明:当X为正例时,y =1 , X为负例时,y = -1

  • 决策方程: y ( x ) = w T Θ ( x ) + b y(x) = w^TΘ(x) +b y(x)=wTΘ(x)+b,

    其中Θ(x) 指的是数据X进行了变换。

    y ( X i ) > 0 < − − > y i = + 1 y(X_i)>0 <--> y_i = +1 y(Xi)>0<>yi=+1

    y ( X i ) < 0 < − − > y i = − 1 y(X_i)<0 <--> y_i = -1 y(Xi)<0<>yi=1

    因此,得到这样一个条件:

    y i ⋅ y ( x i ) > 0 y_i·y(x_i) > 0 yiy(xi)>0

3)优化目标

找到这样一条线(w,b)|超平面|决策边界,使得离该线最近的点最远。

再简洁一些,优化决策边界,目标就是找参数wb

②对 distance(x,b,w)公式进一步简化,去掉绝对值:

d i s t a n c e ( x , b , w ) = ∣ w T ∣ ∣ w ∣ ∣ ( x − x ′ ) ∣ = 1 ∣ ∣ w ∣ ∣ ∣ w T x + b ∣ distance(x,b,w) = |\frac{w^T}{||w||}(x-x')| = \frac{1}{||w||}|w^Tx+b| distance(x,b,w)=∣∣w∣∣wT(xx)=∣∣w∣∣1wTx+b

由于 y i ⋅ y ( x i ) > 0 , y ( x ) = w T Θ ( x ) + b y_i·y(x_i) > 0,y(x) = w^TΘ(x) +b yiy(xi)>0,y(x)=wTΘ(x)+b,故distance 简化为:

d i s t a n c e ( x , b , w ) = y i y ( X i ) ∣ ∣ w ∣ ∣ (2) distance(x,b,w)=\frac{y_iy(X_i)}{||w||} \tag{2} distance(x,b,w)=∣∣w∣∣yiy(Xi)(2)

相比较原式多出一个yi,但是yi取值为 ±1,无影响。

4)目标函数

①放缩变换:对于决策方程 y ( x ) = w T Θ ( x ) + b y(x) = w^TΘ(x) +b y(x)=wTΘ(x)+b,通过缩放使得|y|≥1,

即:

y i ( w T Θ ( x ) + b ) ≥ 1 y_i(w^TΘ(x) +b) ≥1 yi(wTΘ(x)+b)1

②优化目标函数【最小距中找最远的】:

a r g m a x w , b { 1 ∣ ∣ w ∣ ∣ m i n [ y i ⋅ ( w T Θ ( x ) + b ) ] } (3) argmax_{w,b} \{\frac{1}{||w||}min[yi·(w^TΘ(x) +b)]\} \tag{3} argmaxw,b{∣∣w∣∣1min[yi(wTΘ(x)+b)]}(3)

argmax :什么时候取最大

第①步的目的很明确 m i n [ y i ⋅ ( w T Θ ( x ) + b ) ] = 1 min[yi·(w^TΘ(x) +b)] = 1 min[yi(wTΘ(x)+b)]=1

保证 y i ( w T Θ ( x ) + b ) ≥ 1 y_i(w^TΘ(x) +b) ≥1 yi(wTΘ(x)+b)1条件下,目标函数为:

d i s t a n c e ( w , b ) = a r g m a x w , b 1 ∣ ∣ w ∣ ∣ (4) distance(w,b) =argmax_{w,b}\frac{1}{||w||} \tag{4} distance(w,b)=argmaxw,b∣∣w∣∣1(4)

5)目标函数求解

在4)目标函数中,

约束条件: y i ( w T Θ ( x ) + b ) ≥ 1 y_i(w^TΘ(x) +b) ≥1 yi(wTΘ(x)+b)1

目标函数: d i s t a n c e ( w , b ) = m a x w , b 1 ∣ ∣ w ∣ ∣ distance(w,b) =max_{w,b}\frac{1}{||w||} distance(w,b)=maxw,b∣∣w∣∣1

常规做法:

将求解极大值问题转换成极小值问题

d i s t a n c e ( w , b ) = m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 (5) distance(w,b) = min_{w,b} \frac{1}{2}||w||^2 \tag{5} distance(w,b)=minw,b21∣∣w2(5)

(4)->(5),尽管不是等价变换过来的,但都是在求解 w,b 目的上是一致的。

这个系数是随意的,1/2 1/3 都可以。

②带约束的优化问题,拉格朗日乘数法

构造拉格朗日函数,求对w,b偏导为0的解,舍去不合理的解。

带入w,b, wX+b =0 即为最优决策边界。


6)为什么叫支持向量机?

目标函数求解的详细过程中,可以发现w求解过程只受边缘向量(αi≠0)影响,其他向量对w求解毫无约束作用,这些边缘向量就是支持向量|支撑这个面的向量。

拉格朗日乘数法对w求偏导中, w = ∑ i = 1 n α i y i Θ ( x n ) w = \sum\limits_{i=1}^{n}α_iy_iΘ(x_n) w=i=1nαiyiΘ(xn)

在这里插入图片描述


7)软间隔(soft-margin)

提出软间隔是因为上文的SVM是建立在

y i y ( x i ) ≥ 0 y_iy(x_i)≥0 yiy(xi)0

这一条件下,也就是在分类完全正确的前提下去寻找最优决策边界的。这会导致SVM过于严格,在噪音点的影响下,决策边界比较差。显然虚线的更符合预期,现实是那条实线。

在这里插入图片描述

所以为了降低噪音点的影响,SVM要降低严格程度,引入松弛因子ξi

y i y ( x i ) ≥ 1 − ξ i y_iy(x_i)≥1 - ξ_i yiy(xi)1ξi

Tip:手打柯西可以打出ξ 。

新的目标函数:

m i n 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ξ i (6) min\frac{1}{2}||w||^2+C\sum\limits_{i=1}^{n}ξ_i \tag{6} min21∣∣w2+Ci=1nξi(6)

C是需要人为指定的参数。

当limit C 很大:ξ 很小,分类严格

limit C很小:ξ 可以很大,分类容忍更大的错误 ,更好地防止过拟合。

指定C多大算大?

交叉验证选择合适的C。

4.1.2、解决低维不可分问题

数据本身难分类怎么办?

低维数据 通过函数【数据映射】到高维。

X i − > Θ ( X i ) X_i->Θ(X_i) Xi>Θ(Xi)

在这里插入图片描述

高维数据的数据源是什么?

来自原来低维数据的组合。

在这里插入图片描述

计算多维数据,由于复杂度,实际应用的可行性?

高维数据求内积,维度越高,速度越慢,SVM借鉴了高维计算结果,却是在低维以较小的计算量实现的。

高维数据内积结果 = 原低维数据内积平方。

在低维空间使用核函数实现上述”巧合“。

高斯核函数

K ( X , Y ) = exp ⁡ { − ∣ ∣ X − Y ∣ ∣ 2 2 σ 2 } K(X,Y) =\exp\{-\frac{||X-Y||^2}{2σ^2}\} K(X,Y)=exp{2σ2∣∣XY2}

在这里插入图片描述

借助高斯核函数SVM具有优秀的非线性决策边界,因此,深度学习前,SVM成为了最热门模型。

4.2、sklearn 实现

#训练模型
from sklearn import svm
#线性Kermel & 较大的C
model = svm.SVC(kernel='linear',C=1E10).fit(X_train,y_train)
res =model.score(X_train,y_train)
print(f"训练数据上的准确率为:{res}")
res= model.score(X_test,y_test)
print(f"测试数据上的准确率为:{res}")

4.2.1、SVM 分类(SVC)

class sklearn.svm.SVC(C = 1.0,			   #错误样本的惩罚参数
                      kernel='rbf', 	   #核函数,linear线性、poly多项式、rbf高斯、sigmoid、precomputed自定义
                      defree=3,		       #多项式核函数的阶数
                      gama='auto',	       #当kernel = rbf || poly || sigmoid, 默认为 1/n_features
                      coef0=0.0,	       #kernel 函数常数项
                      shrinking=True,
                      probability=False,   #是否估计概率,会增加计算时间
                      tol=0.001	,          #误差项达到指定时停止训练,默认为0.001
                      cache_size=200,
                      class_weight=None,
                      verbose-False,
                      max_iter=-1,
                      decision_function_shape="ovr",
                      random_state=None
                      			
)

以鸢尾花分类为例,

from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn import datasets
from sklearn.model_selection import train_test_split

#读数据
iris = datasets.load_iris()
X = iris.data
y = iris.target

#鸢尾花属于三分类问题,这里想做SVM二分类,提取出两种花束。
setsoa_or_versicolor = (y==0)|(y==1)
X = X[setsoa_or_versicolor]#X中没有y,但一一对应,y[True]-->X[True],相应的X也就被保留下来了。
y = y[setsoa_or_versicolor]

#标准化
std = StandardScaler()
X_std = std.fit_transform(X)
#拆分训练集
X_train, X_test, y_train, y_test = train_test_split(X_std,y,test_size=0.3,random_state=50)

#SVM建模
clf = SVC()
clf.fit(X_train,y_train)

#模型效果
print(clf.score(X_test,y_test))

执行完 train_test_split() 后target 维数改变了,说明前面的返回序列顺序敲的不对,前两项都是X,后两项都是y。

4.2.2、SVM回归(SVR)

如果不进行标准化,效果会特别差。【下文例子中,标准化前:0.20455436946828742,标准化后:0.6413349923546707】

class sklearn.svm.SVR(C = 1.0,			   #错误样本的惩罚参数
                      kernel='rbf', 	   #核函数,linear线性、poly多项式、rbf高斯、sigmoid、precomputed自定义
                      defree=3,		       #多项式核函数的阶数
                      gama='auto',	       #当kernel = rbf || poly || sigmoid, 默认为 1/n_features
                      coef0=0.0,	       #kernel 函数常数项
                      shrinking=True,
                      probability=False,   #是否估计概率,会增加计算时间
                      tol=0.001	,          #误差项达到指定时停止训练,默认为0.001
                      cache_size=200,
                      class_weight=None,
                      verbose-False,
                      max_iter=-1,
                      decision_function_shape="ovr",
                      random_state=None

)

以波士顿房价预测为例,

from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn import datasets
from sklearn.model_selection import train_test_split

#读数据
boston = datasets.load_boston()
X = boston.data
y = boston.target

#标准化
std = StandardScaler()
X_std = std.fit_transform(X)
#拆分训练集
X_train, X_test, y_train, y_test = train_test_split(X_std,y,test_size=0.3,random_state=30)

#SVM建模
svr = SVR()
svr.fit(X_train,y_train)

#模型效果
print(svr.score(X_test,y_test))

4.2.3、网格调参

在参数排列组合中找到最好的参数。

1)续上文鸢尾花的案例,

from sklearn.model_selection import GridSearchCV

#定义 参数组合
params = {
    'kernel':('linear','rbf','poly'),
    'C':[0.01,0.1,0.5,1,2,10,100]
}

#用网格搜索方式拟合模型
model = GridSearchCV(clf,param_grid=params,cv=10)#Cross Validation,简称CV
model.fit(X_std,y)

#查看结果
print('最好的参数组合: ',model.best_params_)
print('最好的score: ',model.best_score_)

最好的参数组合: {‘C’: 0.01, ‘kernel’: ‘linear’}
最好的score: 1.0

2)续上文波士顿房价预测案例,

from sklearn.model_selection import GridSearchCV

#定义 参数组合
params = {
    'kernel':('linear','rbf','poly'),
    'C':[0.01,0.1,0.5,1,2,10,100]
}

#用网格搜索方式拟合模型
model = GridSearchCV(svr,param_grid=params,cv=10)#Cross Validation,简称CV
model.fit(X_std,y)

#查看结果
print('最好的参数组合: ',model.best_params_)
print('最好的score: ',model.best_score_)

最好的参数组合: {‘C’: 10, ‘kernel’: ‘rbf’}
最好的score: 0.5241088776988833

使用

svr = SVR(C=10,kernel='rbf')

再一次预测结果为 0.8277187266841405

综上,SVM参数、标准化对模型效果影响很大

未标准化:0.20455436946828742

标准化后:0.6413349923546707

网格调参后:0.8277187266841405

为什么最好的score: 0.5241088776988833是一个目前遇到的并不算最高的成绩,不因该是最高的成绩吗?

  1. 网格搜索的参数优化结果可能并不是全局最优的。网格搜索是一种穷举搜索的方法,它可以找到在当前参数范围内的最优解,但是这个最优解可能不是全局最优的,尤其是在参数空间比较大的情况下。因此实际上的搜索还可以缩范围,更加细分
  2. 十折交叉验证的随机性可能会导致结果的不稳定性。取平均值作为最终结果。

4.3、案例

(待补充)
我心中的TOP1编程语言:python ,为啥?因为我目前最需要它。

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

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

相关文章

用Java编写Groovy脚本,然后用命令行执行该脚本

1、Groovy 语言简介 Groovy 是 Apache 旗下的一门基于 JVM 平台的动态/敏捷编程语言Groovy 可以与 Java 语言无缝对接&#xff0c;在写 Groovy 的时候如果忘记了语法可以直接按Java的语法继续写&#xff0c;也可以在 Java 中调用 Groovy 脚本&#xff0c;都可以很好的工作Groo…

Pytorch常用的函数(三)深度学习中常见的卷积操作详细总结

Pytorch常用的函数(三)深度学习中常见的卷积操作 1、标准卷积(Standard Convolution) 1.1 标准卷积的理解 我们直接来看二维卷积&#xff0c;这在实际应用中是最常见的。 上图中Conv 2D其实就是卷积核&#xff0c;也叫做滤波器。滤波器的值决定了输出的情况&#xff0c;模型…

【Java】Java核心 86:Git 教程(9)GIT远程仓库操作

文章目录 14.GIT远程仓库操作-关联、拉取、推送、克隆目标内容小结 Git提供了一系列命令来进行远程仓库的操作。 下面是一些常用的Git远程仓库操作&#xff1a; 克隆远程仓库到本地&#xff1a; git clone <远程仓库URL>查看远程仓库信息&#xff1a; git remote -v添…

功能键F4在Microsoft Excel中有什么用

的确,许多 Excel 用户发现使用键盘快捷键对他们来说更有效。事实上,键盘快捷键可能是使用鼠标的最佳选择,因为使用 Excel 时使用触摸屏可能不是视力障碍者的最佳选择。 使用功能键,如 Excel 中的 F4 以及 F2 可能是非常必要的。在这篇文章中,我们将研究功能键 F4 及其在 …

【Java】Java核心 85:Git 教程(8)GIT远程仓库介绍与码云仓库注册创建

文章目录 13.GIT远程仓库介绍与码云仓库注册创建目标小结 Git是一个分布式版本控制系统&#xff0c;它允许多个开发者协同工作并管理代码的版本。远程仓库是存放在网络上的Git仓库&#xff0c;可以用于团队成员之间的代码共享和协作。 常见的远程仓库托管服务提供商有GitHub、…

XShell、XFtp、Linux上MySQL的远程连接及使用

下载资源包&#xff0c;请于文章顶部下载即可 XShell的使用 1. 打开安装好的XShell 2. 点击左上角新建连接 3. 填写相应连接服务器信息 4. 输入需要连接到Linux操作系统哪个用户的用户名 5. 输入连接到用户的密码 6. 远程登录Linux成功 7. 此时可以正常使用Linux指令操作Linu…

chatgpt赋能python:隐藏鼠标:Python实现隐藏鼠标的应用

隐藏鼠标&#xff1a;Python实现隐藏鼠标的应用 作为一名有10年Python编程经验的工程师&#xff0c;我深知Python在图形用户界面(GUI)开发上的优势&#xff0c;其中一个有趣而且有用的应用就是隐藏鼠标。 在某些情况下&#xff0c;用户可能希望隐藏鼠标&#xff0c;这可以用于…

ARM-异常与中断(四)

文章目录 中断中断请求、中断源中断服务程序保存现场、恢复现场中断仲裁、中断优先级中断嵌套 异常广义上的异常同步异常异步异常精确异步异常&#xff08;Precise Asynchronous Exception&#xff09;非精确异步异常&#xff08;Imprecise Asynchronous Exception&#xff09;…

【DBA专属】MHA高可用数据库集群-----------一主一备两从一管理,一个VIP客户端

MHA高可用数据库集群 目录 环境配置&#xff1a; 所有操作系统均为centos 7.x 64bit 1、关闭防火墙&#xff1a;&#xff08;所有服务器&#xff09; 2.配置所有主机名映射&#xff08;所有服务器&#xff09; 3、同步时区 4.安装MHA node及相关perl依赖包&#xff08;所有…

AutoSAR系列讲解(入门篇)4.1-BSW概述

BSW概述 一、什么是BSW 二、BSW的结构 1、微控制器硬件抽象层&#xff08;MCAL&#xff09; 2、ECU抽象层 3、服务层 4、复杂驱动 三、再将结构细分 一、什么是BSW 中文翻译就是基础软件层&#xff08;Basic Software&#xff09;。这个基础软件层实质上就是将整个ECU分…

【斯坦福】FrugalGPT: 如何使用大型语言模型,同时降低成本并提高性能

FrugalGPT: 如何使用大型语言模型&#xff0c;同时降低成本并提高性能 作者&#xff1a;Lingjiao Chen, Matei Zaharia, James Zou 引言 本文介绍了一种新颖的方法&#xff0c;旨在解决使用大型语言模型&#xff08;LLM&#xff09;时面临的成本和性能挑战。随着GPT-4和Chat…

链路聚合综合实战

拓扑 需求 -PC1和PC3属于vlan 10、PC2和PC4属于vlan 20 -设备之间配置lacp模式的链路聚合&#xff0c;并确保同vlan之间的主机可以互通 配置步骤 1&#xff09;PC配置IP地址 2&#xff09;所有交换机创建vlan10 和vlan20 3&#xff09;交换机和PC互联的接口设置为access &am…

python数据分析之连接MySQL数据库并进行数据可视化

大家好&#xff0c;我是带我去滑雪&#xff01; 本期将熟悉MySQL数据库以及管理和操作MySQL数据库的数据库管理工具Navicat Premium&#xff0c;然后在python中调用MySQL数据库进行数据分析和数据可视化。 目录 1、MySQL数据库与数据库管理工具Navicat Premium 2、调用MySQL…

EasyCVR如何实现国标级联无人机推送的RTMP推流通道?

EasyCVR视频融合平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;包括&#xff1a;NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。平台具有强大的数据接入、处理及分发能力&#xff0c;可在复杂的网络环境中&#xff0c…

el-date-picker禁用指定日期之前或之后的日期

一、elementUI中el-date-picker禁用指定日期之前或之后的日期 通过配置picker-options配置指定禁用日期&#xff08;pickerOptions写到data里面&#xff09; <el-date-pickerv-model"date"type"date"size"small"value-format"yyyy-MM-d…

Linux-passwd或shadow删了怎么办?

passwd或者shadow被删除了怎么办 passwd和shadow被删了&#xff0c;可以启用营救模式进行补救&#xff0c;原因是这两个文件都有备份。 先将光驱的自动启动勾选。 将Boot的引导顺序改变下&#xff0c;将光驱引导顺序放到最前面。 选择Troubleshootin可以从名字来知道&#…

广州华锐互动:机电专业VR模拟实操教学平台提供沉浸式的实践操作和训练机会

虚拟现实(VR)技术是一种先进的技术&#xff0c;可以应用于机电专业的培训中。以下是VR技术应用到机电专业培训的一些好处&#xff1a; 模拟实际操作环境&#xff1a;VR技术可以创建一个虚拟的环境&#xff0c;模拟真实的机械和电气设备的操作环境。这使得学生可以在安全的环境…

Python最基础语法

文章目录 一、简介1、Python安全路径2、Python开发工具(PyCharm) 二、PyCharm使用1、新建项目位置2、Hello World3、查看python版本4、PEP8规范 三、标识符和关键字四、基本数据类型1、数据类型2、多数据赋值&#xff1a;3、标准数据类型4、格式化输出5、输入(input)6、格式转换…

电商系统架构设计系列(四):流量大、数据多的「商品详情页系统」该如何设计?

一个电商的商品系统&#xff0c;主要功能就是增删改查商品信息。 上篇文章中&#xff0c;我给你留了一个思考题&#xff1a;流量大、数据多的商品详情页系统该如何设计&#xff1f; 今天这篇文章&#xff0c;主要聊一下&#xff0c;如何设计一个快速、可靠的存储架构支撑商品系…

七、一百零二类花分类项目实战

一、准备数据集 一百零二类花数据集下载 flower_data包括train和valid文件&#xff0c;分别存放102个文件&#xff0c;对应102种类别的花 cat_to_name.json为类别和花品种键值对 将压缩包进行解压&#xff0c;跟项目放到同级路径下 二、导包 若遇到报错&#xff0c;不存…