支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,广泛应用于分类和回归问题。它通过构建一个最优超平面来实现数据的划分。本文将详细介绍SVM中的约束优化问题,并给出相应的源代码实现。
- 算法介绍
SVM旨在找到一个最优超平面,能够将不同类别的数据点分开,并尽可能地使两个类别之间的间隔最大化。这个问题可以被转化为一个约束优化问题,即求解一个二次规划问题。
考虑二类分类问题,训练集包含N个样本点以及对应的标签。假设数据是线性可分的,即存在一个超平面可以把正负样本完全分开。我们希望找到一个超平面,使得正负样本点到超平面的距离最大。
- 优化目标
首先,定义超平面方程为:
w · x + b = 0
其中w是一个法向量,x是任意样本点。而距离超平面最近的正负样本点分别位于超平面上的两个平行线上,所以有:
w · x + b = 1 (正样本)
w · x + b = -1 (负样本)
定义正负样本的函数间隔(functional margin)为:
γ = y_i(w · x_i + b)
其中y_i是第i个样本点的标签,取值为+1或-1。我们希望两个平行线之间的几何间隔(geometrical margin)最大化,即求解下面的优化问题:
maximize: γ
subject to: y_i(w · x_i + b) ≥ γ, i = 1,2,…,N
- 转化为对偶问题
为了解决上述约束问题,我们将其转化为对偶问题。通过拉格朗日乘子法,我们可以得到拉格朗日函数: