【支持向量机(SVM)】:算法原理及核函数

1 SVM算法原理

1.1 目标函数确定

SVM思想:要去求一组参数(w,b),使其构建的超平面函数能够最优地分离两个集合
在这里插入图片描述
样本空间中任意点x到超平面(w,b)的距离可写成:
在这里插入图片描述
欲找到具有最大间隔的划分超平面,也就是要找到能满足下式中约束的参数w和b,使得间隔γ最大。
在这里插入图片描述

  • y为正例的时候取值为1,y为负例的时候取值为-1
    距离超平面最近的几个训练样本点使上式等号成立,他们被称为“支持向量”,两个异类支持向量到超平面的距离之和为:

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

1.2 约束条件优化问题转换

在这里插入图片描述

1.3 对偶问题转换

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

此时,求解当 α 是什么值时,该值会变得很大,当求出 α 值,再求解 w, b 值。此时,就变成了极大极小值问题。

1.4 确定超平面

在这里插入图片描述

1.5 计算举例

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

1.6 SVM原理小节

  1. 支持向量机公式推导最主要找到 w、b 的求解方法
  2. α 非0的样本为支持向量

2 SVM核函数

2.1 核函数的作用

核函数将原始输入空间映射到新的特征空间,从而,使原本线性不可分的样本可能在核空间可分。
在这里插入图片描述

2.2 核函数分类

当存在线性不可分的场景时,我们需要使用核函数来提高训练样本的维度、或者将训练样本投向高维
在这里插入图片描述

  1. 线性核:一般是不增加数据维度,而是预先计算内积,提高速度
  2. 多项式核:一般是通过增加多项式特征,提升数据维度,并计算内积
  3. 高斯核(RBF、径向基函数):一般是通过将样本投射到无限维空间,使得原来不可分的数据变得可分。高斯核函数使用的最多。

在这里插入图片描述
SVM 默认使用 RBF 核函数,将低维空间样本投射到高维空间,再寻找分割超平面。

2.3 高斯核函数

高斯核 Radial Basis Function Kernel (径向基函数,又称RBF核)
在这里插入图片描述

  • γ = 1 2 σ 2 \gamma=\frac {1}{2\sigma^2} γ=2σ21
  • γ \gamma γ是超参数,作用与标准差相反
  • γ \gamma γ越大,高斯分布越窄,数据越集中; γ \gamma γ越小,高斯分布越宽,数据越分散

在这里插入图片描述

2.3 高斯核函数API

from sklearn.svm import SVC
SVC(kernel="rbf",gamma=gamma)
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from plot_util import plot_decision_boundary


# 获取数据
x,y=make_moons(noise=0.15)
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()

# 构建函数
def RBFsvm(gamma=0.1):
    return Pipeline(
        [
            ('std_scalar',StandardScaler()),
            ('svc',SVC(kernel='rbf',gamma=gamma))
        ]
    )

# 实验
# svc1 =RBFsvm(0.5)
# x_std=svc1['std_scalar'].fit_transform(x)
# svc1.fit(x_std,y)
# plot_decision_boundary(svc1,axis=[-3,3,-3,3])
# plt.scatter(x_std[y==0,0],x_std[y==0,1])
# plt.scatter(x_std[y==1,0],x_std[y==1,1])
# plt.show()

svc1 =RBFsvm(1.0)
svc1.fit(x,y)
plot_decision_boundary(svc1,axis=[-1.5,2.5,-1,1.5])
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()


svc2 =RBFsvm(100)
svc2.fit(x,y)
plot_decision_boundary(svc2,axis=[-1.5,2.5,-1,1.5])
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()

svc3 =RBFsvm(0.1)
svc3.fit(x,y)
plot_decision_boundary(svc3,axis=[-1.5,2.5,-1,1.5])
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()

在这里插入图片描述

2.4 超参数 γ \gamma γ

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值