Skip to content

第3章:支持向量机(SVM)

支持向量机(SVM)是一种强大的分类模型,它基于最大化两个类别之间的间隔来构建决策边界。SVM也可以用于回归问题,称为支持向量回归(SVR)。本章将详细介绍SVM的原理、应用场景以及如何使用Scikit-Learn实现SVM模型。

3.1 SVM原理

3.1.1 最大间隔分割

SVM的目标是在不同类别之间找到一个最大化间隔的超平面,这个超平面由最靠近超平面的数据点(支持向量)确定。

3.1.2 核技巧

SVM通过核技巧将数据映射到高维空间,使得非线性问题可以在高维空间中线性解决。

3.1.3 软间隔和正则化

为了避免过拟合,SVM引入了软间隔的概念,允许一些数据点违反间隔规则,同时使用正则化项来控制间隔的宽度。

3.2 SVM应用

3.2.1 分类问题

SVM在二分类和多分类问题中表现出色,尤其适用于高维数据和小样本问题。

3.2.2 回归问题

支持向量回归(SVR)用于预测连续值,通过引入ε不敏感带来处理数据中的噪声。

3.2.3 异常检测

SVM也可以用于异常检测,通过找到一个最大化间隔的超平面来区分正常数据和异常数据。

3.3 SVM代码实现

3.3.1 数据准备

我们将使用Scikit-Learn的鸢尾花数据集来演示SVM的实现。

python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 只选取两个类别进行二分类
X = X[y != 2]
y = y[y != 2]

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

3.3.2 模型训练

使用Scikit-Learn的SVC类来训练SVM模型。

python
from sklearn.svm import SVC

# 创建SVM分类器实例
svm_classifier = SVC(kernel='linear', random_state=42)

# 训练模型
svm_classifier.fit(X_train, y_train)

3.3.3 模型评估

评估模型在测试集上的性能。

python
from sklearn.metrics import accuracy_score

# 在测试集上进行预测
y_pred = svm_classifier.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

3.3.4 可视化决策边界

可视化SVM的决策边界。

python
import matplotlib.pyplot as plt
import numpy as np

# 创建网格来评估模型
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))

# 预测整个网格的分类结果
Z = svm_classifier.predict(np.c_[xx.ravel(), yy.ravel()])

# 将结果放入颜色图中
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k', s=20)
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("SVM Decision Boundary")
plt.show()

3.4 本章小结

本章介绍了支持向量机(SVM)的基本原理、应用场景,并使用Scikit-Learn实现了一个简单的SVM模型。通过数据准备、模型训练、评估和可视化,我们可以看到SVM在分类问题中的有效性。理解SVM的工作原理和代码实现对于深入学习机器学习算法至关重要。