支持向量机(SVM)基础教程

一、引言

支持向量机(Support Vector Machine,简称SVM)是一种高效的监督学习算法,广泛应用

于分类和回归分析。SVM以其强大的泛化能力、简洁的数学形式和优秀的分类效果而备受机器学

习领域的青睐。

二、SVM基本原理

2.1 最大间隔分类器

SVM的核心目标是寻找一个最优的超平面,该超平面能够将不同类别的样本尽可能完美地分

开,并且最大化分类间隔。分类间隔是指超平面到最近的数据点的距离,这个距离越大,模型的泛

化能力通常越强。

2.2 函数间隔与几何间隔

函数间隔:一个标量,表示超平面正确分类样本的程度。

函数间隔越大,表示分类器的信心越强。

几何间隔:函数间隔的归一化形式,考虑了超平面的法向量。

几何间隔更直观地反映了数据点到超平面的实际距离。

2.3 支持向量

支持向量是那些位于分类间隔边缘的数据点。

在最优超平面确定后,只有支持向量对超平面的位置有影响,而其他数据点则不会影响超平

面的位置。

三、SVM算法步骤

3.1 数据预处理

在应用SVM之前,通常需要对数据进行预处理,包括特征缩放、去除缺失值、异常值处理

等,以确保算法的性能不受数据尺度的影响。

3.2 构建优化问题

SVM的优化问题可以表述为

3.3 求解优化问题

3.4 计算超平面参数

3.5 构建分类器

四、SVM应用实例

下面是一个使用Python和scikit-learn库实现SVM分类器的示例。

4.1 导入数据

import numpy as np

import matplotlib.pyplot as plt

from sklearn import datasets

# 导入数据集

X, y = datasets.make_blobs(n_samples=50, centers=2, random_state=6)

4.2 训练SVM模型

from sklearn.svm import SVC

from sklearn.preprocessing import StandardScaler

# 数据归一化

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)

# 创建SVM模型

clf = SVC(kernel='linear', C=1.0)

# 训练模型

clf.fit(X_scaled, y)

4.3 可视化分类结果

# 绘制数据点

plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y, cmap=plt.cm.Paired,

edgecolors='k')

# 绘制超平面

ax = plt.gca()

xlim = ax.get_xlim()

ylim = ax.get_ylim()

xx = np.linspace(xlim[0], xlim[1], 30)

yy = np.linspace(ylim[0], ylim[1], 30)

YY, XX = np.meshgrid(yy, xx)

xy = np.vstack([XX.ravel(), YY.ravel()]).T

Z = clf.decision_function(xy).reshape(XX.shape)

ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])

# 绘制支持向量

ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,

           facecolors='none', edgecolors='k')

plt.title('SVM with Linear Kernel')


plt.show()

4.4 结果分析

运行上述代码,我们可以得到如下分类结果图:

从图中可以看出,SVM成功地将两类数据分开,并且找到了最大间隔的超平面。

黑色实线表示最优超平面,黑色虚线表示分类间隔。

红色和蓝色点表示不同类别的样本点,黑色圆圈表示支持向量。

五、SVM的核技巧

当数据不是线性可分时,SVM可以通过引入核技巧来处理非线性问题。

核技巧允许SVM在原始特征空间中非线性地映射数据到高维特征空间,然后在高维空间中寻

找最优超平面。

5.1 常见的核函数

5.2 选择合适的核函数

选择合适的核函数对于SVM的性能至关重要。

通常,我们可以通过交叉验证和网格搜索来找到最优的核函数和参数。

六、SVM参数选择

在实现支持向量机(SVM)时,参数的选择对模型的性能有着决定性的影响。

下面是一些关键的SVM参数及其详细说明:

1. 正则化参数 C

定义:C是SVM中的一个正则化参数,它控制着模型对误分类的容忍度。

在SVM中,我们希望找到一个既能最大化分类间隔又能最小化误分类的决策边界。

作用

当C值较大时,模型会尝试将所有训练样本正确分类,这可能会导致模型过于复杂,从而产生

过拟合。过拟合意味着模型在训练数据上表现很好,但在未见过的新数据上表现不佳。

当C值较小时,模型允许更多的误分类,这可能会导致欠拟合。欠拟合的模型过于简单,无法

捕捉数据的真实结构。

调整建议

如果训练误差远低于验证误差,可能是因为模型过拟合,此时应减小C值。

如果训练误差和验证误差都很高,可能是因为模型欠拟合,此时应增大C值。

通常,通过交叉验证来选择合适的C值,以找到泛化能力最强的模型。

2. 核函数参数

定义:核函数参数决定了核函数的形状和映射方式,这些参数对于处理非线性问题至关重

要。

常见的核函数参数有:

调整建议

核函数参数的选择通常依赖于数据集的特性。

可以通过网格搜索和交叉验证来找到最优的参数组合。

3. 核函数类型

定义:核函数类型决定了数据在特征空间中的映射方式。

选择合适的核函数

对于线性可分的数据,线性核函数通常是最佳选择,因为它简单且计算效率高。

对于非线性问题,可以选择多项式核、RBF核或sigmoid核。

选择核函数时,需要考虑数据的分布和问题的复杂性。

通常,RBF核是一个通用的选择,因为它可以映射到无限维的特征空间。

七、总结

本文详细介绍了支持向量机(SVM)的基本原理、算法步骤、核技巧以及在Python中的实

现。

SVM是一种强大的机器学习算法,适用于多种分类和回归问题。但是SVM的性能受核函数和

参数选择的影响较大,因此在实际应用中,需要根据具体问题进行适当的调整和优化。

相关推荐
肥猪猪爸3 分钟前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
LZXCyrus31 分钟前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
我感觉。1 小时前
【机器学习chp4】特征工程
人工智能·机器学习·主成分分析·特征工程
YRr YRr1 小时前
深度学习神经网络中的优化器的使用
人工智能·深度学习·神经网络
DieYoung_Alive1 小时前
一篇文章了解机器学习(下)
人工智能·机器学习
夏沫的梦1 小时前
生成式AI对产业的影响与冲击
人工智能·aigc
goomind1 小时前
YOLOv8实战木材缺陷识别
人工智能·yolo·目标检测·缺陷检测·pyqt5·木材缺陷识别
只怕自己不够好1 小时前
《OpenCV 图像基础操作全解析:从读取到像素处理与 ROI 应用》
人工智能·opencv·计算机视觉
幻风_huanfeng1 小时前
人工智能之数学基础:线性代数在人工智能中的地位
人工智能·深度学习·神经网络·线性代数·机器学习·自然语言处理
嵌入式大圣1 小时前
嵌入式系统与OpenCV
人工智能·opencv·计算机视觉