从数学角度理解SVM分类算法

yizhihongxing

从数学角度理解SVM分类算法

1. 背景

支持向量机(Support Vector Machine,SVM)是一种分类算法,以最大化分类器的边际(margin)为目标,并且分类效果在训练数据集上表现非常好。

2. SVM算法原理

SVM算法通过将特征空间映射到高维空间,寻找一个超平面(hyperplane),将不同类别的数据点进行分离。SVM算法的核心思想就是找到数据集的最优超平面。

2.1 SVM的简单公式

$$ f(x) = w^T x + b $$

其中,$w$是超平面的法向量,$b$是超平面的截距,$x$是样本点。

$f(x)$的符号决定了$x$所属的类别。

当$f(x) > 0$时,$x$属于正例类别;

当$f(x) < 0$时,$x$属于负例类别;

当$f(x) = 0$时,$x$在超平面上。

2.2 SVM的目标函数

求解SVM的过程就是在所有可能的超平面中找到最优的超平面。用数学语言描述,就是找到使边际最大的超平面。

定义决策边距(decision margin):

$$margin = \frac{2}{\left|\boldsymbol{w}\right|}$$

其中$\boldsymbol{w}$是向量$(w_1, w_2, ..., w_n)$,所有的$\boldsymbol{w}$都满足边距的条件。

SVM分类问题的目标就是最大化边距,可以转化为以下的优化问题:

$$\max_{\boldsymbol{w},b} \frac{2}{\left|\boldsymbol{w}\right|}$$

同时满足以下约束条件:

$$y^{(i)}(\boldsymbol{w}^Tx^{(i)} + b) \geq 1, i=1, 2, ..., m$$

其中,$y^{(i)}$是类别标签,$x^{(i)}$是样本点,$m$是样本数目。

这个约束条件实际上是告诉我们:所有的样本都必须正确分类。

2.3 最大化边距

根据拉格朗日乘子法,将所有约束条件转化为目标函数的一部分。得到下面的拉格朗日函数:

$$L(\boldsymbol{w}, b, \alpha) = \frac{1}{2}\left|\boldsymbol{w}\right|^2 - \sum_{i=1}^m\alpha_i(y^{(i)}(\boldsymbol{w}^Tx^{(i)} + b) - 1)$$

其中,$\alpha$是拉格朗日乘子向量,可以用于求解最优化问题的惩罚因子。

最优化的问题被转换成了极大极小化的问题:

$$\min_{\boldsymbol{w},b} \max_{\alpha} L(\boldsymbol{w}, b, \alpha)$$

化简后得到:

$$\max_{\alpha} \sum_{i=1}^m\alpha_i - \frac{1}{2}\sum_{i,j=1}^m y^{(i)}y^{(j)}\alpha_i\alpha_jx^{(i)}\cdot x^{(j)}$$

约束条件为:

$$\sum_{i=1}^m y^{(i)}\alpha_i=0 \;\;\;\;\;\;\;\;\;\;\;\;\ 0 \leq \alpha_i \leq C,$$

其中,$C$是一个惩罚因子,用于控制过拟合的情况。

求解这个优化问题,得到$\alpha$向量,然后就可以用$f(x)$进行分类了。

2.4 对偶问题

这个最优化问题是一个凸二次规划问题,可以用凸优化的方法进行求解。不过,可以将这个原问题转换成对偶问题。

对偶问题的目标函数:

$$\min_{\alpha} \frac{1}{2} \sum_{i=1}^m\sum_{j=1}^m y^{(i)}y^{(j)}\alpha_i\alpha_j \cdot \left(x^{(i)}\cdot x^{(j)}\right) - \sum_{i=1}^m \alpha_i$$

约束条件为:

$$\sum_{i=1}^m y^{(i)}\alpha_i=0 \;\;\;\;\;\;\;\;\;\;\;\;\ 0 \leq \alpha_i \leq C$$

通过求解对偶问题,可以得到最优化问题的解,包括$\boldsymbol{w}$和$b$。

2.5 图形化表示

在2维空间中,SVM就是寻找一条直线尽可能远离下面的负点并尽可能接近上面的正点。

SVM-Graphical-Representation

上图中,红色和蓝色的点代表两个不同的分类,绿色的线就是SVM分类器找到的超平面。

2.6 核函数

如果数据集无法线性分割,可以使用核函数来将非线性数据转换为线性数据。

在2维空间中,可以使用圆形的核函数将非线性数据转换为线性数据。

$$K(x, y) = exp(-\gamma||x-y||^2)$$

其中,$\gamma$是一个调节参数,$||x-y||$是点$x$和点$y$之间的欧几里得距离。

在高维空间中,多项式核函数和高斯核函数非常流行。

3. 两个SVM的例子

3.1 线性SVM的例子

在这个例子中,我们使用sklearn库中的make_blobs方法生成1000个随机点,其中包含2个不同的分类。

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

X, y = make_blobs(n_samples=1000, centers=2, n_features=2,
                  random_state=0, cluster_std=0.5)

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='viridis')
plt.show()

SVM-Line

可以看到这些点是可分的,我们可以使用线性SVM将这些点分开。

from sklearn.svm import SVC

model = SVC(kernel='linear', C=1E10)
model.fit(X, y)

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='viridis')

xlim = plt.xlim()
ylim = plt.ylim()
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
XX, YY = np.meshgrid(xx, yy)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = model.decision_function(xy).reshape(XX.shape)

plt.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1],
           alpha=0.5, linestyles=['--', '-', '--'])

plt.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1],
            s=100, linewidth=1, facecolors='none', edgecolors='k')
plt.show()

SVM-Linear-Result

在上面的图片中,黑色实线是超平面,黑色虚线是超平面与两类数据点的边界。在这个例子中线性SVM可以正确地将数据分为两类。

3.2 非线性SVM的例子

在这个例子中,我们使用sklearn库中的make_moons方法生成1000个随机点,其中包含2个不同的分类。

from sklearn.datasets import make_moons

X, y = make_moons(n_samples=1000, noise=0.30, random_state=0)

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='viridis')
plt.show()

SVM-Moon

可以看到这些点是非线性可分的,我们需要使用非线性SVM将这些点分开。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

clf = Pipeline([
    ("scaler", StandardScaler()),
    ("svm", SVC(kernel="rbf", gamma=0.1, C=1E10))
])
clf.fit(X, y)

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='viridis')

xlim = plt.xlim()
ylim = plt.ylim()
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
XX, YY = np.meshgrid(xx, yy)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = clf.decision_function(xy).reshape(XX.shape)

plt.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1],
           alpha=0.5, linestyles=['--', '-', '--'])

plt.scatter(clf["svm"].support_vectors_[:, 0], clf["svm"].support_vectors_[:, 1],
            s=100, linewidth=1, facecolors='none', edgecolors='k')
plt.show()

SVM-Moon-Result

在上面的图片中,黑色实线是SVM函数,黑色虚线是SVM函数与两类数据点的边界。在这个例子中非线性SVM可以正确地将数据分为两类。由于这个例子中数据并不是线性可分的,所以我们需要使用核函数将非线性数据转换为线性数据。在这个例子中我们使用的是高斯核函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从数学角度理解SVM分类算法 - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • 集成学习应用:随机森林算法

    介绍 随机森林是一种集成学习算法,由多个决策树组成的集成模型。每棵树都是基于随机选择的子样本和特征进行训练,最终的结果是所有树的预测结果的平均值或多数投票的结果。随机森林通常用于分类和回归问题,并且在许多实际问题中取得了很好的性能。 安装及使用 在Python中使用随机森林模型,需要先安装scikit-learn库(如果您已经安装了Anaconda发行版,s…

    机器学习算法 2023年3月27日
    00
  • 梯度下降求极值

    梯度下降算法是一种常见的优化方法,用于求解目标函数的极值。此算法利用目标函数的梯度信息,沿着目标函数下降的方向进行迭代更新,直到达到某个停止条件为止。下面将详细介绍梯度下降求极值的作用、使用方法以及相关的注意点和示例分析。 一、梯度下降法的作用 梯度下降方法主要用于求解目标函数的极小值或极大值。在一些机器学习和深度学习的优化问题中,梯度下降方法经常被采用,如…

    机器学习算法 2023年3月27日
    00
  • KNN最邻近分类算法

    让我为您详细讲解 KNN 最邻近分类算法作用与使用方法的完整攻略。 什么是 KNN 最邻近分类算法? KNN 是一种监督学习算法,最初于 1951 年由 Fix 和 Hodges 提出。它通过计算待分类对象与训练集中各个样本的距离,找出与待分类对象距离最近的 k 个样本,然后通过这 k 个样本的标签进行投票或计算,来确定待分类对象的标签。 KNN 最邻近分类…

    机器学习算法 2023年3月27日
    00
  • 机器学习环境搭建

    下面我就详细讲述一下机器学习环境搭建方法的完整攻略。本攻略将介绍以下内容: 环境搭建前的准备工作 安装Anaconda 配置Conda环境 安装必要的Python包 安装GPU加速库 1. 环境搭建前的准备工作 在开始安装机器学习环境之前,需要先确认以下事项: 确认自己的操作系统(Windows、Mac、Linux等) 确认自己的计算机是否支持GPU加速 确…

    机器学习算法 2023年3月27日
    00
  • 信息熵是什么

    信息熵是信息论中的一个概念,它是用来度量随机变量的不确定性。在信息论中,信息量越大,就表示不确定性越小,反之亦然。 用公式表示信息熵为:$H(X)=-\sum_{i}p(x_i)\log_2p(x_i)$,其中$p(x_i)$表示事件$x_i$发生的概率,$\log_2$表示以2为底的对数。 举个例子,假设有一个硬币,正面朝上和反面朝上的概率相等,那么此时信…

    机器学习算法 2023年3月27日
    00
  • 数学解析线性回归

    数学解析线性回归 线性回归是数据分析和机器学习中最常见的技术之一。它用于建立两个或多个变量之间的线性关系模型,并据此进行预测。此外,线性回归还可以用于对数据进行探索性分析、关键变量的识别、异常数据的处理等方面。在本篇文章中,我们将详细讲解线性回归的原理、作用以及使用方法,帮助你更好地应用于你的数据分析与建模工作中。 线性回归的原理 线性回归的最基本形式是一元…

    机器学习算法 2023年3月27日
    00
  • 理解贝叶斯公式

    接下来我将详细讲解贝叶斯公式的作用、使用方法及其使用场景,希望对您有所帮助。 什么是贝叶斯公式? 贝叶斯公式是由英国统计学家 Thomas Bayes 发现的一个概率公式,也称为贝叶斯定理。它用于计算在已知某一事件发生的前提下,其他相关事件发生的概率。贝叶斯公式的表达式如下: $$P(A|B) = \frac{P(B|A)P(A)}{P(B)}$$ 其中 A…

    机器学习算法 2023年3月27日
    00
  • sklearn决策树分类算法

    Sklearn决策树分类算法是一种基于树形结构进行分类的机器学习算法,它可以用于解决诸如分类、回归等多种问题。在本文中,我们将逐步讲解Sklearn决策树分类算法的应用方法,其中包括数据预处理、模型训练、模型评估等步骤。 第一步:数据预处理 在进行机器学习时,数据预处理是非常重要的一步。首先,我们需要加载数据集,以便进行观察和分析。在本文中,我们将使用Skl…

    机器学习算法 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部