引自免费微信小程序:皆我百晓生
在机器学习领域,支持向量机(Support Vector Machine, SVM)是一种非常强大的监督学习模型,主要用于分类和回归分析。SVM的核心思想是找到一个决策边界(即超平面),这个边界能够在不同类别的样本之间最大化间隔,从而实现最优分类。下面详细介绍SVM的主要概念和原理。
1. 线性可分SVM
当数据集线性可分时,SVM寻找一个超平面,使得两类数据点到该超平面的距离最大。这个距离被称为间隔(margin)。SVM试图最大化这个间隔,以提高模型的泛化能力。
定义:
- 支持向量:最接近决策边界的那些训练样本点。
- 间隔:从支持向量到决策边界的垂直距离。
- 决策边界:将不同类别分开的超平面。
目标函数与约束条件:
对于线性可分情况,SVM的目标是最小化权重向量w的范数的一半,同时满足所有训练样本的分类正确性和间隔要求。数学上可以表示为: [ \min_{\mathbf{w}, b} \frac{1}{2} |\mathbf{w}|^2 ] [ \text{s.t. } y_i(\mathbf{w}^T \mathbf{x}_i + b) \geq 1, \forall i ]
2. 线性不可分SVM
当数据集不是线性可分的,SVM通过引入松弛变量允许一些样本点违反分类规则,但同时最小化这些违反规则的代价。
软间隔:
引入松弛变量ξ,允许部分样本点位于错误一侧,目标函数变为: [ \min_{\mathbf{w}, b, \boldsymbol{\xi}} \left( \frac{1}{2} |\mathbf{w}|^2 + C \sum_{i=1}^{n} \xi_i \right) ] [ \text{s.t. } y_i(\mathbf{w}^T \mathbf{x}_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0, \forall i ]
其中C是正则化参数,控制着对误分类点的惩罚程度。
3. 非线性SVM
对于非线性可分的问题,SVM通过核技巧(Kernel Trick)将数据映射到高维空间,在这个高维空间中寻找一个线性可分的超平面。
核函数:
常见的核函数包括多项式核、高斯核(径向基函数核)、Sigmoid核等。例如高斯核函数定义为: [ K(\mathbf{x}_i, \mathbf{x}_j) = e^{-\gamma |\mathbf{x}_i - \mathbf{x}_j|^2} ]
4. 多分类SVM
对于多分类问题,可以通过构建多个二分类SVM并采用一对多(One-vs-Rest)或一对一(One-vs-One)策略解决。
实现代码示例
使用Python的Scikit-Learn库实现SVM分类器:
from sklearn import svm
from sklearn.datasets import make_blobs
import numpy as np
# 创建数据集
X, y = make_blobs(n_samples=100, centers=2, random_state=6)
# 训练SVM模型
clf = svm.SVC(kernel='linear', C=1)
clf.fit(X, y)
# 预测新数据点
new_data = np.array([[1, 2], [3, 4]])
predictions = clf.predict(new_data)
print(predictions)
以上是对SVM的基本介绍和应用,希望对你理解SVM有所帮助。如果有更深入的问题或具体的应用场景,欢迎继续探讨。