机器学习-10 基于sklearn支持向量机

本文详细介绍了支持向量机(SVM)在分类中的应用,讲解了SVM的基本思想、优化目标和拉格朗日乘子法。同时,文章还展示了如何将SVM扩展用于回归问题,提到了不同类型的SVM实现,如SVR、NuSVR和LinearSVR,并探讨了核函数的选择,如Sigmoid和径向基函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习-10 基于sklearn支持向量机

支持向量机——分类

支持向量机 (SVMs) 的应用面比较广,可用于回归、分类和和 异常检测。其最常见的应用是做分类。
支持向量机(Support Vector Machine, SVM) 是由最优分类面衍生而来, 在线性可分情况中, 其根本思想是将特征向量映射到一个比自身维度更高的空间里,在这个空间里建立一个新的隔离平面,使得隶属不同类别的特征向量点间隔最大。各类别对应的平行超平面间的距离越大,分类器的总误差则越小。
设 n 个样本的训练合集为 ( x i , y i ) , i = 1 , 2 , … … , n (x_{i},y_{i}),i=1,2,……,n (xi,yi)i=1,2,n d d d维空间中线性判别函数的形式为
g ( x ) = w x + b g(x)=wx+b g(x)=wx+b
某数据点 x i x_{i} xi到分类平面的距离可以表示为 ∣ ω x + b ∣ ∥ ω ∥ \frac{\left| \omega x+b \right|}{\left\| \omega \right\|} ωωx+b,点到原点的距离为 ∣ b ∣ ∥ ω ∥ \frac{\left| b \right|}{\left\| \omega \right\|} ωb
离分类平面最近的数据点和它们对应的平行超平面,将判别函数归一化使所有数据点都满足 ∣ g ( x ) ∣ ≥ 1 \left| g(x) \right|\ge 1 g(x)1,且距分类平面距离最小的数据点 ∣ g ( x ) ∣ = 1 \left| g(x) \right|=1 g(x)=1。计算 ∥ ω ∥ 2 2 \frac{{{\left\| \omega \right\|}^{2}}}{2} 2ω2极小值优化分类平面,使分类间隔最大化。
约束条件为:
y i [ ω x + b ] − 1 ≥ 0 {{y}_{i}}[\omega x+b]-1\ge 0 yi[ωx+b]10
目标函数为:
φ ( ω ) = 1 2 ∥ ω ∥ 2 = 1 2 ( ω , ω ) \varphi (\omega )=\frac{1}{2}{{\left\| \omega \right\|}^{2}}=\frac{1}{2}(\omega ,\omega ) φ(ω)=21ω2=21(ω,ω)
可定义如下的 L a g r a n g e Lagrange Lagrange 函数
L ( ω , b , a ) = 1 2 ( ω , ω ) − ∑ i = 1 n a i { y i [ ( ω x i ) + b ] − 1 } L(\omega ,b,a)=\frac{1}{2}(\omega ,\omega )-\sum\limits_{i=1}^{n}{{{a}_{i}}\{{{y}_{i}}[(\omega {{x}_{i}})+b]-1\}} L(ω,b,a)=21(ω,ω)i=1nai{yi[(ωxi)+b]1}
其中 a i > 0 a_i>0 ai>0,为 L a g r a n g e Lagrange Lagrange乘子,将所求问题转化为对 ω \omega ω b b b L a g r a n g e Lagrange Lagrange极小值。
ω \omega ω b b b求偏微分,令其等于0。
∑ i = 1 n a i y i = 0 \sum\limits_{i=1}^{n}{{{a}_{i}}{{y}_{i}}=0} i=1naiyi=0
其中 a i ≥ 0 a_i\ge 0 ai0。求解下列函数的最大值
Q ( a ) = ∑ i = 1 n a i ∗ − 1 2 ∑ i , j = 1 n a i a j y i y j ( x i , x j ) Q(a)=\sum\limits_{i=1}^{n}{a_{i}^{*}-\frac{1}{2}\sum\limits_{i,j=1}^{n}{{{a}_{i}}{{a}_{j}}{{y}_{i}}{{y}_{j}}({{x}_{i}},{{x}_{j}})}} Q(a)=i=1nai21i,j=1naiajyiyj(xi,xj)
a i ∗ a_{i}^{*} ai为最优解,则
ω ∗ = ∑ i = 1 n a i ∗ y i x i {{\omega }^{*}}=\sum\limits_{i=1}^{n}{a_{i}^{*}{{y}_{i}}}{{x}_{i}} ω=i=1naiyixi
采用训练样本,训练决策函数,使其具备分类功能,并在反复训练中不断优化确立最优分类平面,形成适用于此类样本分类问题的支持向量机。决策函数可表示为:
f ( x ) = s g n ( ∑ i = 1 n a i y i ( x , x i ) + b ) f(x)=sgn (\sum\limits_{i=1}^{n}{{{a}_{i}}}{{y}_{i}}(x,{{x}_{i}})+b) f(x)=sgn(i=1naiyi(x,xi)+b)
所使用的核函数为 S i g m o i d Sigmoid Sigmoid函数。
K ( x , x t ) = tanh ⁡ ( v ( x i , x j ) + c ) K(x,{{x}_{t}})=\tanh (v({{x}_{i}},{{x}_{j}})+c) K(x,xt)=tanh(v(xi,xj)+c)

代码展示

支持向量机:非平衡类的超平面分离

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs

# we create two clusters of random points
n_samples_1 = 1000
n_samples_2 = 100
centers = [[0.0, 0.0], [2.0, 2.0]]
clusters_std = [1.5, 0.5]
X, y = make_blobs(n_samples=[n_samples_1, n_samples_2],
                  centers=centers,
                  cluster_std=clusters_std,
                  random_state=0, shuffle=False)

# fit the model and get the separating hyperplane
clf = svm.SVC(kernel='linear', C=1.0)
clf.fit(X, y)

# fit the model and get the separating hyperplane using weighted classes
wclf = svm.SVC(kernel='linear', class_weight={1: 10})
wclf.fit(X, y)

# plot the samples
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, edgecolors='k')

# plot the decision functions for both classifiers
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# create grid to evaluate model
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T

# get the separating hyperplane
Z = clf.decision_function(xy).reshape(XX.shape)

# plot decision boundary and margins
a = ax.contour(XX, YY, Z, colors='k', levels=[0], alpha=0.5, linestyles=['-'])

# get the separating hyperplane for weighted classes
Z = wclf.decision_function(xy).reshape(XX.shape)

# plot decision boundary and margins for weighted classes
b = ax.contour(XX, YY, Z, colors='r', levels=[0], alpha=0.5, linestyles=['-'])

plt.legend([a.collections[0], b.collections[0]], ["non weighted", "weighted"],
           loc="upper right")
plt.show()

在这里插入图片描述

支持向量机——回归

支持向量分类的方法可以被扩展用作解决回归问题. 这个方法被称作支持向量回归。
支持向量分类有三种不同的实现形式:SVR,NuSVR 和 LinearSVR。在只考虑线性核的情况下,LinearSVR 比 SVR 提供一个更快的实现形式。
采用对样本泛化性能极强的 SVR算法, 可以有效避免常规算法因样本数据不足引起的计算精度低和不易收敛等不足。给定训练集 :
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … … , ( x n , y n ) } T=\{(x_1,y_1),(x_2,y_2),……,(x_n,y_n)\} T={(x1,y1),(x2,y2),,(xn,yn)}
假设其回归函数为:
y = f ( x ) = ω T ( x ) + b y=f(x)={{\omega }^{T}}(x)+b y=f(x)=ωT(x)+b
为了提高SVR算法的泛化能力, 引入核函数 K ( x i , x j ) K(x_i,x_j) K(xi,xj),将低维回归问题转化为高维优化问题。
min ⁡ ∑ i , j = 1 n ( α i − α i ∗ ) ( α j − α j ∗ ) K ( x i , x j ) + ε ∑ i = 1 n ( α i + α i ∗ ) − ∑ i = 1 n y i ( α i − α i ∗ ) \min \sum\limits_{i,j=1}^{n}{({{\alpha }_{i}}-\alpha _{i}^{*})}({{\alpha }_{j}}-\alpha _{j}^{*})K({{x}_{i}},{{x}_{j}})+\varepsilon \sum\limits_{i=1}^{n}{({{\alpha }_{i}}+\alpha _{i}^{*})}-\sum\limits_{i=1}^{n}{{{y}_{i}}({{\alpha }_{i}}-\alpha _{i}^{*})} mini,j=1n(αiαi)(αjαj)K(xi,xj)+εi=1n(αi+αi)i=1nyi(αiαi)
由此可以得到最优的非线性回归函数:
f ( x ) = ∑ i = 1 n ( α i − α i ∗ ) K ( x i , x j ) + b f(x)=\sum\limits_{i=1}^{n}{({{\alpha }_{i}}-\alpha _{i}^{*})}K({{x}_{i}},{{x}_{j}})+b f(x)=i=1n(αiαi)K(xi,xj)+b
选取径向基函数作为核函数:
K ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 2 σ 2 ) K({{x}_{i}},{{x}_{j}})=\exp (-\frac{{{\left\| {{x}_{i}}-{{x}_{j}} \right\|}^{2}}}{2{{\sigma }^{2}}}) K(xi,xj)=exp(2σ2xixj2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值