支持向量机 (Support Vector Machine)
引言
支持向量机(Support Vector Machine,简称SVM)是一种监督学习模型,广泛应用于分类和回归任务中。SVM的核心思想是找到一个最佳的超平面,将不同类别的数据点分开,同时最大化分类边界的间隔。本文将详细介绍SVM的基本概念、数学原理、实现步骤以及应用实例。
基本概念
SVM通过寻找一个最佳的超平面来实现数据分类。对于线性可分的数据集,SVM尝试找到一个能够最大化两类数据点之间间隔的超平面。对于线性不可分的数据集,SVM通过引入核函数将数据映射到高维空间,使其在高维空间中线性可分。
超平面
在二维空间中,超平面是一条直线;在三维空间中,超平面是一个平面。对于高维空间,超平面是一个 (n-1) 维的子空间。给定一个数据点 (\mathbf{x}),其对应的决策函数为:
[ f(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + b ]
其中,(\mathbf{w}) 是权重向量,(b) 是偏置。
间隔和支持向量
间隔是指数据点到超平面的距离。在SVM中,我们希望最大化最小间隔,即找到离超平面最近的数据点(支持向量)的距离最大化。通过这种方式,SVM能够更好地区分不同类别的数据点。
数学原理
SVM的数学原理可以概括为以下步骤:
- 构建优化问题:找到一个能够最大化间隔的超平面。
- 引入拉格朗日乘子:将优化问题转换为对偶问题,以便于求解。
- 求解对偶问题:通过求解对偶问题得到权重向量和偏置。
- 引入核函数:对于线性不可分的数据,通过核函数将数据映射到高维空间。
实现步骤
下面是使用Python和Scikit-learn实现SVM并应用于数据分类的示例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载示例数据集
iris = datasets.load_iris()
X = iris.data[:, :2] # 仅使用前两个特征进行可视化
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=