SMV 算法【python,机器学习,算法】

27 篇文章 0 订阅
20 篇文章 0 订阅

支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised
learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),
其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。

SVM 使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险
(structural risk), 是一个具有稀疏性和稳健性的分类器。SVM 可以通过核方法(kernel method)进行非线性分类,
是常见的核学习(kernel learning)方法之一。

支持向量机(Support Vector Machine, SVM)是一种强大的机器学习算法,主要用于分类问题,也可以用于回归和异常检测。以下是SVM训练的一般步骤:

  1. 数据准备:
    • 收集数据集,并划分为训练集和测试集(或验证集)。
    • 对于分类问题,确保数据集包含每个类别的标签。
    • 对于回归问题,确保目标变量是连续的。
    • 如果需要,对数据进行预处理,如缩放、标准化或归一化,因为SVM对特征的尺度敏感。
  2. 选择核函数(对于非线性SVM):
    SVM的一个关键特性是它可以处理非线性问题,通过选择一个核函数(如线性核、多项式核、径向基函数(RBF)核或
    Sigmoid 核)来实现。 根据问题的性质和数据集的特性选择合适的核函数。
  3. 选择参数:
    对于 SVM,有两个主要的参数需要选择:C(正则化参数)和 γ(核函数的系数,对于 RBF 核)。
    C 控制对误分类的惩罚程度,C 越大,模型越复杂,但可能过拟合;C 越小,模型越简单,但可能欠拟合。
    γ 控制RBF 核的“宽度”,γ越大,核函数越窄,模型越复杂;γ越小,核函数越宽,模型越简单。
    可以使用交叉验证和网格搜索等方法来找到最佳的 C 和 γ 值。
  4. 训练 SVM 模型:
    使用训练集和选定的核函数及参数来训练 SVM 模型。
    训练过程中,SVM 会找到一个决策边界(超平面),该边界将不同类别的数据点分隔开,并最大化两个类别之间的间隔。
  5. 评估模型:
    使用测试集来评估模型的性能。
    对于分类问题,可以使用准确率、召回率、F1 分数等指标来评估模型的性能。
    对于回归问题,可以使用均方误差(MSE)、均方根误差(RMSE)等指标来评估模型的性能。
  6. 优化模型(可选):
    如果模型的性能不佳,可以尝试调整参数、选择不同的核函数或进行特征选择等优化措施。
    也可以尝试使用集成方法(如 Bagging、Boosting)来改进 SVM 的性能。
  7. 使用模型进行预测:
    一旦模型训练完成并经过评估和优化,就可以使用它来对新数据进行预测了。
    对于分类问题,模型会输出数据点所属的类别;对于回归问题,模型会输出一个连续值作为预测结果。

需要注意的是,虽然 SVM 在许多问题上表现良好,但它并不总是最佳选择。
在选择使用 SVM 之前,最好先了解问题的性质和数据集的特性,并考虑其他可能的机器学习算法。

为了方便计算分析,下面以二维数据进行讨论。

三个超平面

  1. 决策超平面
    W 1 x 1 + W 2 x 2 + b = 0 W_1x_1+W_2x_2+b=0 W1x1+W2x2+b=0,位于正负超平面的中间位置。
  2. 正类超平面
    W 1 x 1 + W 2 x 2 + b = 1 W_1x_1+W_2x_2+b=1 W1x1+W2x2+b=1,所有的正类数据会分布到该平面内或者分割的平面以上。
  3. 负类超平面
    W 1 x 1 + W 2 x 2 + b = − 1 W_1x_1+W_2x_2+b=-1 W1x1+W2x2+b=1,所有的负类数据会分布到该平面内或者分割的平面以下。

正负超平面之间的距离应最大化,这样才能更好的进行分类,正负超平面上会分布一些向量数据点,因此通过该方式进行分类的方法称作支持向量机。
其中 W 1 W_1 W1 W 2 W_2 W2表示权重, x 1 x_1 x1 x 2 x_2 x2表示特征值。

正负超平面之间的距离

通过向量法则以及三个超平面的式子可以推导出正负超平面距离公式 L = 2 ∣ W ⃗ ∣ L=\frac{2}{|\vec{W}|} L=W 2,其中 W ⃗ = w 1 2 + w 2 2 \vec{W}=\sqrt{w_1^2+w_2^2} W =w12+w22
那么问题将转换为求取 W ⃗ \vec{W} W 最小值的问题。

求取 ∣ W ⃗ ∣ |\vec{W}| W 的最小值

分类值 y i = { 1 , − 1 } y_i=\{1,-1\} yi={1,1},那么 y i . ( w ⃗ . x i ⃗ + b ) ⩾ 1 y_i . (\vec{w}.\vec{x_i}+b)\geqslant 1 yi.(w .xi +b)1 i ∈ 1 , 2 , 3 , . . . , n i \in 1,2,3,...,n i1,2,3,...,n表示所有的样本。

将问题转换为:求取 f ( w ) = ∣ w ⃗ ∣ 2 2 f(w)=\frac{|\vec{w}|^2}{2} f(w)=2w 2最小值问题,限制条件为 y i . ( w ⃗ . x i ⃗ + b ) − 1 ⩾ 0 y_i . (\vec{w}.\vec{x_i}+b)-1\geqslant 0 yi.(w .xi +b)10

为了使用拉格朗日乘子,将限制条件转换为等式 g i ( w , b ) = y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 = p i 2 g_i(w,b)=y_i * (\vec{w} . \vec{x_i}+b)-1=p_i^2 gi(w,b)=yi(w .xi +b)1=pi2

因此,拉格朗日方程式子为: L ( w , b , λ i , p i ) = ∣ w ⃗ 2 ∣ 2 − ∑ i = 1 s λ i ∗ ( y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 − p i 2 ) L(w,b,\lambda_i,p_i)=\frac{|\vec{w}^2|}{2}-\sum\limits_{i=1}^{s} \lambda_i * (y_i * (\vec{w} . \vec{x_i}+b)-1-p_i^2) L(w,b,λi,pi)=2w 2i=1sλi(yi(w .xi +b)1pi2)

对各个分量求偏导,并令其为0,可以得到 4 个式子:

  1. L ′ ( w ) = w ⃗ − ∑ i = 1 s λ i y i x i ⃗ = 0 L^\prime(w)=\vec{w}-\sum\limits_{i=1}^{s}\lambda_i y_i \vec{x_i}=0 L(w)=w i=1sλiyixi =0
  2. L ′ ( b ) = − ∑ i = 1 s λ i y i = 0 L^\prime(b)=-\sum\limits_{i=1}{s}\lambda_i y_i=0 L(b)=i=1sλiyi=0
  3. L ′ ( λ i ) = y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 − p i 2 = 0 L^\prime(\lambda_i)=y_i * (\vec{w} . \vec{x_i}+b)-1-p_i^2=0 L(λi)=yi(w .xi +b)1pi2=0
  4. L ′ ( p i ) = 2 λ i p i = 0 L^\prime(p_i)=2\lambda_i p_i=0 L(pi)=2λipi=0

由 3 和 4 式子可以得到 λ i ∗ ( y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 ) = 0 \lambda_i * (y_i * (\vec{w} . \vec{x_i}+b)-1) = 0 λi(yi(w .xi +b)1)=0
因为 λ i ⩾ 0 \lambda_i \geqslant 0 λi0,所以 y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 ⩾ 0 y_i * (\vec{w} . \vec{x_i}+b)-1 \geqslant 0 yi(w .xi +b)10

上面 4 个式子加上 ′ l a m b d a i ⩾ 0 'lambda_i \geqslant 0 lambdai0就是 KKT 条件。

将原问题转换为对偶问题求解

  1. 原问题
    m i n i m i z e    f ( w ) = ∣ w i ⃗ ∣ 2 2 minimize\ \ f(w)=\frac{|\vec{w_i}|^2}{2} minimize  f(w)=2wi 2
    限制条件 g i ( w , b ) = y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) − 1 ⩾ 0 g_i(w,b)=y_i * (\vec{w} \cdot \vec{x_i}+b)-1 \geqslant 0 gi(w,b)=yi(w xi +b)10
  2. 对偶问题
    m a x i m i z e    q ( λ ) = m a x i m i z e ( m i n i m i z e ( ∣ w i ⃗ ∣ 2 2 − y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) − 1 ) ) maximize\ \ q(\lambda)=maximize(minimize(\frac{|\vec{w_i}|^2}{2} - y_i * (\vec{w} \cdot \vec{x_i}+b)-1)) maximize  q(λ)=maximize(minimize(2wi 2yi(w xi +b)1)),其中 λ i ⩾ 0 \lambda_i \geqslant 0 λi0
  3. 根据 KKT 条件,精简对偶问题
    m a x i m i z e    q ( λ i ) = m a x i m i z e ( ∑ i = 1 s λ i − 1 2 ∑ i = 1 s ∑ j = 1 s λ i λ j y i y j x i ⃗ ⋅ x j ⃗ ) maximize\ \ q(\lambda_i) = maximize(\sum\limits_{i=1}^{s}\lambda_i-\frac{1}{2}\sum\limits_{i=1}^{s}\sum\limits_{j=1}^{s}\lambda_i\lambda_j y_i y_j \vec{x_i} \cdot \vec{x_j}) maximize  q(λi)=maximize(i=1sλi21i=1sj=1sλiλjyiyjxi xj )
  4. 由对偶问题,求解得到 λ i \lambda_i λi,然后根据 w ⃗ = ∑ i = 1 s λ i y i x i ⃗ \vec{w}=\sum\limits_{i=1}{s}\lambda_i y_i \vec{x_i} w =i=1sλiyixi 求解得到 w ⃗ \vec{w} w ,再根据 y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) − 1 = 0 y_i *(\vec{w}\cdot\vec{x_i}+b)-1=0 yi(w xi +b)1=0求得 b b b

核技巧

  1. 方法一:通过维度转换函数将向量进行升维度,然后计算 x i ⃗ ⋅ x j ⃗ \vec{x_i} \cdot \vec{x_j} xi xj 的结果。这种方法有限制性,当维度很高时,无法计算结果。
  2. 方法二: 定义多项式核函数 K ( x i ⃗ , x j ⃗ ) = ( c + x i ⃗ , x j ⃗ ) d K(\vec{x_i},\vec{x_j})=(c+\vec{x_i},\vec{x_j})^d K(xi ,xj )=(c+xi ,xj )d,参数 c c c控制了式子中既有低次项也有高次项。
  3. 在 SVM 问题中,使用高斯核函数 K ( x i ⃗ , x j ⃗ ) = e − γ ∣ x i ⃗ − y j ⃗ ∣ 2 K(\vec{x_i},\vec{x_j})=e^{-\gamma|\vec{x_i}-\vec{y_j}|^2} K(xi ,xj )=eγxi yj 2,即 Radial Basis Kernel 函数。 γ \gamma γ相当于相似容忍度。

损失函数

使用铰链损失函数 m a x ( 0 , 1 − p ) max(0,1-p) max(0,1p)。其中 p = y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) p=y_i *(\vec{w}\cdot \vec{x_i}+b) p=yi(w xi +b)

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值