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

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

1、不适定问题

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


在逻辑回归中,求解样本特征空间的决策边界是通过定义一个概率函数$\sigma(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$ 到 决策边界所在超平面 $w^Tx + b = 0$ 的距离将描述为 $d = \frac {|w^Tx + b |}{\|w\|}$。

3.1 SVM 的约束条件

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

  • 对于边界上方的类别点,$\frac {w^Tx + b}{\|w\|} > d,\forall y^{(i)} = +1$
  • 对于边界下方的类别点,$\frac {w^Tx + b}{\|w\|} < -d,\forall y^{(i)} = -1$

    联合变形为
    $$\left\{ \begin{array}{**lr**} \frac {w^Tx + b}{\|w\|d} >\ \ \ 1,\forall y^{(i)} = \ \ 1 \\ \frac {w^Tx + b}{\|w\|d} > -1,\forall y^{(i)} = -1 \end{array} \right.$$
    $\small {\bf 令\ \ \ } w_d = \frac {w}{\|w\|d},b_d = \frac {b}{\|w\|d}$ : $\small {\bf 得到 \ \ \ } \left\{ \begin{array}{**lr**} w_d^Tx + b_d >\ \ 1,\forall y^{(i)} = \ \ 1 \\ w_d^Tx + b_d < -1,\forall y^{(i)} = -1 \end{array} \right.$,

关于这变形后的直线 $w_d^T + b_d = \pm 1$ 的一些理解:

对于点法式描述的超平面解析方程式 $w^Tx + b = 0$ 中,常量 $b$ 与超平面距原点的实际偏移量$d$具如下关系 : $d = \frac {w^Tx_0}{\|w\|} = \frac {-b}{\|w\|}$,所以对空间内的超平面参考原点平移$+d$个单位后,解析方程式将描述为 $w^Tx + b - d\|w \| = 0 \rightarrow w^Tx + b = d\|w \|$。所以方程式 $w_d^T + b_d = \pm 1$ 本质描述了决策边界平移$\pm d$个单位后位于支撑向量上的两条平行直线。同时,对于原始的决策边界描述方程 $w^Tx + b = 0$,新方程 $w_d^Tx + b_d = 0$ 本质是原方程的线性缩放,描述的是同一个方程。所以对于最终的结果使用$w_d,b_d$来描述决策边界与使用$w ,b $等价。为了表述方便,再令$w = w_d, b = b_d$。

由于类别的识别标记被$\{-1,1\}$ 区分,结合$w = w_d, b = b_d$的换元,联合两描述式:
$$\left\{ \begin{array}{**lr**} w_d^Tx + b_d >\ \ 1,\forall y^{(i)} = \ \ 1 \\ w_d^Tx + b_d < -1,\forall y^{(i)} = -1 \end{array} \right. \rightarrow \left\{ \begin{array}{**lr**} w^Tx + b >\ \ 1,\forall y^{(i)} = \ \ 1 \\ w^Tx + b < -1,\forall y^{(i)} = -1 \end{array} \right. \rightarrow y^{(i)}(w^Tx + b) > 1$$
$\therefore $ SVM算法 搜索的最优决策边界到任意样本点的距离大于等于 $d$ 的关系就被描述为了 $y^{(i)}(w^Tx + b) > 1$;

3.2 SVM 的优化目标

SVM算法优化目标 即对于任意支撑向量,都有它到决策边界的距离$d$ 达到最大化,也即 $\max \frac {|w^Tx + b |}{\|w\|}$。 由于求得支撑向量上存在决策边界的偏移直线 $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

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()

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)
目录
相关文章
|
4天前
|
数据采集 机器学习/深度学习 算法
机器学习方法之决策树算法
决策树算法是一种常用的机器学习方法,可以应用于分类和回归任务。通过递归地将数据集划分为更小的子集,从而形成一棵树状的结构模型。每个内部节点代表一个特征的判断,每个分支代表这个特征的某个取值或范围,每个叶节点则表示预测结果。
17 1
|
8天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
133 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
8天前
|
机器学习/深度学习 人工智能 算法
算法金 | 统计学的回归和机器学习中的回归有什么差别?
**摘要:** 统计学回归重在解释,使用线性模型分析小数据集,强调假设检验与解释性。机器学习回归目标预测,处理大数据集,模型复杂多样,关注泛化能力和预测误差。两者在假设、模型、数据量和评估标准上有显著差异,分别适用于解释性研究和预测任务。
37 8
算法金 | 统计学的回归和机器学习中的回归有什么差别?
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习算法入门:从K-means到神经网络
【6月更文挑战第26天】机器学习入门:从K-means到神经网络。文章涵盖了K-means聚类、逻辑回归、决策树和神经网络的基础原理及应用场景。K-means用于数据分组,逻辑回归适用于二分类,决策树通过特征划分做决策,神经网络则在复杂任务如图像和语言处理中大显身手。是初学者的算法导览。
|
6天前
|
机器学习/深度学习 算法 数据挖掘
Python机器学习10大经典算法的讲解和示例
为了展示10个经典的机器学习算法的最简例子,我将为每个算法编写一个小的示例代码。这些算法将包括线性回归、逻辑回归、K-最近邻(KNN)、支持向量机(SVM)、决策树、随机森林、朴素贝叶斯、K-均值聚类、主成分分析(PCA)、和梯度提升(Gradient Boosting)。我将使用常见的机器学习库,如 scikit-learn,numpy 和 pandas 来实现这些算法。
|
9天前
|
机器学习/深度学习 人工智能 Dart
AI - 机器学习GBDT算法
梯度提升决策树(Gradient Boosting Decision Tree),是一种集成学习的算法,它通过构建多个决策树来逐步修正之前模型的错误,从而提升模型整体的预测性能。
|
3天前
|
机器学习/深度学习 分布式计算 算法
在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)
【6月更文挑战第28天】在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)、数据规模与特性(大数据可能适合分布式算法或深度学习)、性能需求(准确性、速度、可解释性)、资源限制(计算与内存)、领域知识应用以及实验验证(交叉验证、模型比较)。迭代过程包括数据探索、模型构建、评估和优化,结合业务需求进行决策。
8 0
|
3天前
|
机器学习/深度学习 算法
机器学习中的超参数优化涉及手动尝试、网格搜索、随机搜索、贝叶斯优化、梯度优化、进化算法等策略
【6月更文挑战第28天】**机器学习中的超参数优化涉及手动尝试、网格搜索、随机搜索、贝叶斯优化、梯度优化、进化算法等策略。工具如scikit-optimize、Optuna助力优化,迁移学习和元学习提供起点,集成方法则通过多模型融合提升性能。资源与时间考虑至关重要,交叉验证和提前停止能有效防止过拟合。**
5 0
|
4天前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
|
10天前
|
机器学习/深度学习 算法 搜索推荐
机器学习聚类算法
聚类算法是无监督学习技术,用于发现数据集中的自然群体,如用户画像、广告推荐等。常见的聚类算法包括K-Means,它基于距离分配样本至簇,适合球形分布;层次聚类则通过合并或分裂形成簇,能发现任意形状的簇;DBSCAN依据密度来聚类,对噪声鲁棒。KMeans API中`sklearn.cluster.KMeans(n_clusters=8)`用于指定簇的数量。评估聚类效果可使用轮廓系数、SSE等指标,Elbow方法帮助选择合适的K值。