Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

学习笔记: 机器学习经典算法-线性SVM(LinearSVM)

简介: 机器学习经典算法-个人笔记和学习心得分享

1、不适定问题

在解决分类问题时,通常根据算法模型在样本的特征空间内生成的决策边界来为样本分类提供依据。但对于许多现实的样本集来说,在其特征空间内可能会存许多满足分类要求的决策边界,也就是决策边界不唯一。


在逻辑回归中,求解样本特征空间的决策边界是通过定义一个概率函数σ(t),根据概率函数建模形成了一个损失函数,再通过最小化损失函数来求解一条符合条件的决策边界,由于损失函数完全由采样数据所决定,所以求解的决策边界的不一定是面对实际情况的最优决策边界,也就是决策边界的泛化能力可能不足。

2、支撑向量机对不适定问题的解决方案

对于算法模型来说,最重要的问题是模型的泛化能力。对于分类模型来说也对应决策边界的泛化能力。一个好的决策边界,应该能够充分地分割样本的特征空间。所以就有对于这样一个 “好的决策边界” 定义为距样本空间内各类别簇的分布边缘都尽可能远,换而言之就是各类别簇距 decision_boundary 最近的一些点离 decision_boundary 最远。

不同于 逻辑回归 建模在于求一条符合条件的 decision_boundar ,支撑向量机(SVM,Support Vector Machine) 的主要思想是 寻找一个最优决策边界 ,该决策边界拥有充分的泛化能力,不仅能很好的划分训练数据,同时还能很好地应对实际要面对的数据。在SVM的数学理论里该最优决策边界定义为距离样本空间内各类别簇尽可能远的决策边界, 也就是 距离所有类别簇的最近样本最远的决策边界,这些距离决策边界最近的类别簇样本称为 支撑向量,它们最终决定了SVM算法 寻找的最优决策边界。

SVM 线性分类器类别

  • Hard Margin SVM ,基于 SVM思想 的最原始分类器。
  • Soft Margin SVM ,基于 Hard Margin SVM 的优化算法,添加了正则项。

3、Hard Margin SVM 的最优化问题

由于距离决策边界最近的类别簇样本,也就是 支撑向量 决定了最优决策边界。这个最优决策边界满足距离所有类别簇的最近样本最远。令支撑向量到决策边界的距离为 d,则有 SVM算法 在于最大化 d。首先根据解析几何,空间上任意点x 到 决策边界所在超平面 wTx+b=0 的距离将描述为 d=|wTx+b|w

3.1 SVM 的约束条件

SVM 定义了支撑向量到决策边界的距离为 d,那么样本空间内任意样本点到决策边界的距离都将大于 d。同时决策边界应该从各样本簇中心划分样本空间,所以对于二分类 y(i){1,1},就有两个类别的样本到decision_boundary 的有向距离应满足:

  • 对于边界上方的类别点,wTx+bw>d,y(i)=+1
  • 对于边界下方的类别点,wTx+bw<d,y(i)=1

    联合变形为
    {wTx+bwd>   1,y(i)=  1wTx+bwd>1,y(i)=1
       wd=wwd,bd=bwd :    {wTdx+bd>  1,y(i)=  1wTdx+bd<1,y(i)=1

关于这变形后的直线 wTd+bd=±1 的一些理解:

对于点法式描述的超平面解析方程式 wTx+b=0 中,常量 b 与超平面距原点的实际偏移量d具如下关系 : d=wTx0w=bw,所以对空间内的超平面参考原点平移+d个单位后,解析方程式将描述为 wTx+bdw=0wTx+b=dw。所以方程式 wTd+bd=±1 本质描述了决策边界平移±d个单位后位于支撑向量上的两条平行直线。同时,对于原始的决策边界描述方程 wTx+b=0,新方程 wTdx+bd=0 本质是原方程的线性缩放,描述的是同一个方程。所以对于最终的结果使用wd,bd来描述决策边界与使用wb等价。为了表述方便,再令w=wd,b=bd

由于类别的识别标记被{1,1} 区分,结合w=wd,b=bd的换元,联合两描述式:
{wTdx+bd>  1,y(i)=  1wTdx+bd<1,y(i)=1{wTx+b>  1,y(i)=  1wTx+b<1,y(i)=1y(i)(wTx+b)>1
SVM算法 搜索的最优决策边界到任意样本点的距离大于等于 d 的关系就被描述为了 y(i)(wTx+b)>1

3.2 SVM 的优化目标

SVM算法优化目标 即对于任意支撑向量,都有它到决策边界的距离d 达到最大化,也即 max。 由于求得支撑向量上存在决策边界的偏移直线 w^Tx + b = \pm 1,所以将任意分类下的支撑向量代入直线再取绝对值的结果都是 |w^Tx + b| = 1,因此优化目标函数描述为
\max \frac {|w^Tx + b |}{\|w\|} \rightarrow \max \frac {1}{\|w\|} \rightarrow \min (\|w\|)
为了便于获取导数,对于取模最小值的函数进一步转换为 \min (\|w\|) \rightarrow \min (\frac {1}{2}\|w\|^2)

综上, Hard Margin SVM 搜索线性决策边界的最优化目标为:
基于约束 \mathrm{s.t.} \ \ y^{(i)}(w^Tx + b) > 1 下的 \min (\frac {1}{2}\|w\|^2) 求极值问题。

4、Soft Margin SVM 与 SVM 正则化

Hard Margin SVM 算法搜索的决策边界由于极度依赖两个类别内的支撑向量,所以就会很容易受到错误样本(极端样本,这类样本并不能代表一般情况)的影响。导致生成不理想的线性决策边界,也就是出现过拟合问题。所以通常只适用于具有强线性可分且采样良好数据集(意味着没有outlier出现)。

考虑现实生产情况下采集到样本往往都会出现 outlier 问题,因此Hard Margin SVM算法的易受极端样本影响的拟合 缺点 需要被进一步改进,来提高的泛化能力。
Hard Margin SVM 算法中,优化目标被条件 \mathrm{s.t.} \ \ y^{(i)}(w^Tx + b) > 1 所约束,该约束本质是要求决策边界所在 \pm d 范围的 Margin 区域内不能存在任何样本点。所以如果对这个条件进行宽松,缩小Margin Area 的范围,就可以适当地提高 SVM 模型的容错能力。因此,分别对数据集的每个样本点都添加上容错空间 \zeta_i,\zeta_i \ge 0,就有得到了基于 Hard Margin SVM 方法改进的 Soft Margin SVM

Soft Margin SVM 的约束条件为: \mathrm{s.t.} \ \ y^{(i)}(w^Tx + b) > 1 - \zeta_i .

需要注意如果当 \zeta取无穷大,这个约束条件无论w,b取任意值都会永远成立。所以为了使添加到约束条件内的 宽松量 \zeta 不会使约束条件失效,\zeta本身也需要被约束。它被添加到 Hard Margin SVM 的优化函数里进行最小化约束。

Soft Margin SVM 的优化目标 :\min (\frac {1}{2}\|w\|^2 + \sum_{i=1}^{m}{\zeta_i})

Soft Margin SVM 的正则化

  • L1正则化\min (\frac {1}{2}\|w\|^2 + C\sum_{i=1}^{m}{\zeta_i}) ,常量C(C \ge0) 衡量了搜索决策边界时考虑容错的权值(也叫惩罚因子)。如果 C \to +\infty,最小化损失函数时\zeta_i只能趋于0,意味着要求模型的容错率最低,这也说明了 Hard Margin SVM 是非常严格的分类器,几乎没有容错空间。
  • L2正则化\min (\frac {1}{2}\|w\|^2 + C\sum_{i=1}^{m}{\zeta_i^2} )

    容错率权值C 越大(左图),生成的决策平面容错率越低;容错率权值C 越小(右图),生成的决策平面容错率越高,模型泛化能力提高;

=

5、scikit-learn 框架下的线性SVM

5.1 SVM 的特征归一化

SVM 算法的决策边界依赖于最大化 支撑向量到它的距离 d ,如果特征量纲不一样,在具有大方差的特征方向上计算的距离 d 将掩盖其它特征方向上距离,从而主导决策边界的生成。所以在实际应用时需要首先进行 数据的特征归一化

5.2 sklearn 下的调用线性SVM

### Prepare data
import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.model_selection import train_test_split
Train_X,Test_X,Train_Y,Test_Y = train_test_split(iris.data[iris.target < 2,:2],iris.target[iris.target < 2],test_size= 0.2,random_state=666)
### Scale data
from sklearn.preprocessing import StandardScaler
standardScaler = StandardScaler()
standardScaler.fit(Train_X)
Train_X_std = standardScaler.transform(Train_X)
Test_X_std  = standardScaler.transform( Test_X)
### SVM classifier
from sklearn.svm import LinearSVC  ### SVC-support_vector_cassifier, SVM分类器
svc = LinearSVC(C = 1e9) ### 减小模型的容错空间,使得正则化的权值C 尽可能大,该模型结果接近 Hard Margin SVM 
svc.fit(Train_X_std,Train_Y)

#### 获取决策边界所在方程 w^Tx+b =0
svc.coef_       ### w
svc.intercept_  ### b
AI 代码解读

6、应用线性SVM求解非线性分类

非线性决策面的拟合本质是数据集添加多项式后在升维的特征空间内变得线性可分的结果。

### Prepare data
import numpy as np
from sklearn import datasets
X,y = datasets.make_moons(noise= 0.15,random_state=666)   ### 使用 datasets 生成含噪音的指定形状的测试数据

### show sample distribution
import matplotlib.pyplot as plt
plt.scatter(X[y == 0,0],X[y == 0,1])
plt.scatter(X[y == 1,0],X[y == 1,1])



### Polynomial Features
from sklearn.preprocessing import PolynomialFeatures,StandardScaler
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
def PolynomialSVC(degree,C = 1.0):
    return Pipeline([
        ("Poly",PolynomialFeatures(degree = degree)),
        ("std_scaler",StandardScaler()),
        ("LinearSVC",LinearSVC(C = C))
    ])

poly_SVC = PolynomialSVC(degree = 1)
poly_SVC.fit(X,y)


### draw decision boundary
def plot_decision_boundary(model, axis):
    x0, x1 = np.meshgrid(
        np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1),
        np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1, 1),
    )
    X_new = np.c_[x0.ravel(), x1.ravel()]
    y_predict = model.predict(X_new)
    zz = y_predict.reshape(x0.shape)

    from matplotlib.colors import ListedColormap
    custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])
    plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)


plot_decision_boundary(poly_SVC, axis=[-1.5, 2.5, -1.0, 1.5])
plt.scatter(X[y==0,0], X[y==0,1])
plt.scatter(X[y==1,0], X[y==1,1])
plt.show()
AI 代码解读

7、应用线性SVM求解回归问题

回归问题的本质在于找到一条直线或曲线能够最优地拟合 数据点,不同的回归算法差异主要是拟合策略的不同,如线性回归算法的拟合策略是使得找到的拟合直线与所有数据点的误差最小化(\min MSE)。

SVM回归 的拟合策略与寻找最优决策边界的过程类似,它的回归策略提出对于一条回归直线,在这条直线上下偏移一个人为指定 \epsilon 大小范围的 Margin Area 里期望包含尽可能多的数据点,这样的一条直线就是一条较好的拟合直线。
详细的SVM推导过程可参考博客 回归SVM的优化目标

7.2 sklearn 下的SVM Regressor(SVR)

### Prepare data
import numpy as np
from sklearn import datasets
boston = datasets.load_boston()
from sklearn.model_selection import train_test_split
Train_X,Test_X,Train_Y,Test_Y = train_test_split(boston.data,boston.target,test_size= 0.2,random_state=666)

### Polynomial Features
from sklearn.preprocessing import PolynomialFeatures,StandardScaler
from sklearn.svm import LinearSVR
from sklearn.pipeline import Pipeline
def standardLinearSVR(epsilon = 0.1):
    return Pipeline([
        ("std_scaler",StandardScaler()),
        ("LinearSVR",LinearSVR(epsilon = epsilon))
    ])

SVR = standardLinearSVR(epsilon = .5)
SVR.fit(Train_X,Train_Y)
SVR.score(Test_X,Test_Y)
AI 代码解读
目录
打赏
0
0
0
0
185
分享
相关文章
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
208 6
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
354 13
机器学习算法的优化与改进:提升模型性能的策略与方法
解锁机器学习的新维度:元学习的算法与应用探秘
元学习作为一个重要的研究领域,正逐渐在多个应用领域展现其潜力。通过理解和应用元学习的基本算法,研究者可以更好地解决在样本不足或任务快速变化的情况下的学习问题。随着研究的深入,元学习有望在人工智能的未来发展中发挥更大的作用。
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
57 14
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
84 1
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
193 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
深入探索机器学习中的决策树算法
深入探索机器学习中的决策树算法
64 0
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
58 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等