游乐游手机版
首页/AI热点日报/热点详情

SVM支持向量机使用方法详解与实战案例

类型:热点整理2026-07-22
支持向量机通过训练数据找到决策边界,支持向量是关键样本点。单分类SVM在鸢尾花数据集上演示,nu参数平衡支持向量数量与训练误差,gamma参数决定样本影响范围与边界平滑度,两者联合调参至关重要。

上一篇文章聊到了支持向量机(SVM),一种在深度学习大行其道的今天依然值得关注的传统机器学习方案。它的核心思路很简单:通过训练数据,找到一个能将不同类别样本区分开来的“决策边界”。

那么,这个“支持向量”到底是什么?可以这样理解:我们从输入数据中挑选出那些最具代表性的样本,它们就是支撑起整个分类边界的关键点。训练完成后,新来的数据都要跟这些代表点做对比,来判断它属于哪一类。当然,如果面对多分类任务,支持向量也会有对应的多组划分。

为了更直观地理解SVM的运行机制,先用一段Python代码来演示一个单分类任务。在开始之前,确保你已经安装了numpy、matplotlib以及scikit-learn库。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import load_iris

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data[:, :2] # 只取前两个特征,方便可视化

# 只选取类别为0的数据用于单分类训练
X_train = X[iris.target == 0]

# 创建并训练单分类SVM模型
model = svm.OneClassSVM(kernel='rbf', nu=0.05, gamma=1)
model.fit(X_train)

# 生成用于绘制决策边界的网格数据
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(...)
Z = model.predict(np.c_[xx.ra vel(), yy.ra vel()])
Z = Z.reshape(xx.shape)

# 绘制训练数据与决策边界
plt.scatter(X_train[:, 0], X_train[:, 1], color='blue', label='Inliers')
plt.contourf(xx, yy, Z, levels=[-1, 0], colors='lightgray', alpha=0.5)
plt.contour(xx, yy, Z, levels=[0], linewidths=2, colors='darkred')

# 标记支持向量
support_vectors = X_train[model.support_]
plt.scatter(support_vectors[:, 0], support_vectors[:, 1], color='red', label='Support Vectors')

plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('One-Class SVM - Iris Dataset')
plt.legend()
plt.show()

这段代码利用 svm.OneClassSVM 构建了一个单分类模型,并用著名的鸢尾花数据集进行训练。训练结果通过 model.predict 得到,最终用matplotlib绘制出来,其中红色点就是模型找到的支持向量。

图中那片暗红色的区域就是模型学习到的决策区域——简单说,落在红色区域内的点,就被认为是属于我们这一类。这里我用了两个特征:花萼的长度和宽度。如果你想,当然也可以加入更多特征,只是图形上就不太好展示了。

大家应该注意到了,svm.OneClassSVM 里有两个关键参数:nugamma。它们基本决定了模型的性能。

nu 控制着训练误差与支持向量数量之间的平衡。它既是训练误差的上限,也是支持向量个数的下限。较小的 nu 允许更多支持向量存在,决策边界也更灵活;而较大的 nu 则限制支持向量数量,让边界更保守。

gamma 则定义每个训练样本的影响力大小。它决定了样本的影响范围以及决策边界的平滑程度。小的 gamma 让边界更平滑,每个样本的影响范围也更广;大的 gamma 则会让边界变得复杂,每个样本的影响范围相应缩小。

来,试试调整一下 gamma 值,从1增加到100:

结果正如上面所说:gamma变大,决策区域变得异常复杂,几乎每个训练样本都成了支持向量。

再看看调整 nu 的效果,从0.05改成0.5:

决策边界果然变得更加保守了。不过在实际应用中,nugamma 需要联合调整才能获得最佳拟合效果——这确实是件“炼丹”的活儿。哪怕回归传统,调参这门手艺依旧少不了。

好,这次就聊到这儿。下一篇,会带来一个真正落地的项目案例——如何把单分类SVM用于实际的异常检测场景。

来源:https://m.elecfans.com/article/2384062.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。