机器学习_10 支持向量机(SVM)
本文主要介绍了支持向量机的基本概念、分类以及算法的实现方式
目录
一、前言
- 🍨 本文为🔗365天深度学习训练营中的学习记录博客
- 🍖 原作者:K同学啊
二、基本概念
支持向量机(Support Vector Machine,简称 SVM)是一种常用于分类和回归任务的监督学习算法。它的核心思想是通过在特征空间中找到一个能够最大化分类间隔的超平面,将不同类别的数据分离开来。
SVM的目标是找到一个最优的决策边界(即超平面),使得分类间隔(即边界到各类别数据点的最小距离)最大化。SVM可以处理线性可分和线性不可分的数据集。
1、SVM

图中有分别属于两类的一些二维数据点和三条直线。如果三条直线分别代表三个分类器的话,请问哪一个分类器比较好?
我们凭直观感受应该觉得答案是H3。首先H1不能把类别分开,这个分类器肯定是不行的;H2可以,但分割线与最近的数据点只有很小的间隔,如果测试数据有一些噪声的话可能就会被错误分类(即对噪声敏感、泛化能力弱)。H3以较大间隔将它们分开,这样就能容忍测试数据的一些噪声而正确分类,是一个泛化能力不错的分类器。
2、线性可分SVM
(1)线性可分SVM
当训练数据线性可分时,通过硬间隔最大化可以学习得到一个线性分类器,即硬间隔SVM,如上图中的H3。
(2)硬间隔
在支持向量机(SVM)中,软间隔和硬间隔是两个重要的概念,主要用于处理不同类型的数据集。它们的区别在于SVM对误分类点的容忍程度。
硬间隔适用于线性可分的数据集。在硬间隔SVM中,所有数据点必须完全分隔,不能允许任何数据点落在分隔超平面的错误一侧,或者处于分类间隔区域内。
3、线性SVM
在前面的讨论中,我们一直假定训练数据是严格线性可分的,即存在一个超平面能完全将两类数据分开。但是现实任务这个假设往往不成立,例如下图所示的数据。

为了解决上述问题,SVM引入了软间隔(Soft Margin)概念,通过允许一些数据点位于错误的一侧来提高模型的鲁棒性。
软间隔适用于线性不可分或有噪声的数据集。在软间隔SVM中,允许一些数据点违背间隔约束(即位于分类超平面的错误一侧),并对这些违背的情况进行惩罚。
4、非线性SVM
前面介绍的都是线性问题,但是我们经常会遇到非线性的问题(例如异或问题),此时就需要用到核技巧(kernel trick)将线性支持向量机推广到非线性支持向量机。
如下图所示,核技巧的基本思路分为两步:
- 使用一个变换将原空间的数据映射到新空间(例如更高维甚至无穷维的空间);
- 然后在新空间里用线性方法从训练数据中学习得到模型。

非线性SVM的核心在于核函数的选择与应用。核函数允许我们在不显式地计算高维空间中的映射的情况下,直接计算在这个高维空间中的内积。这样,我们就可以利用原始特征空间中的数据,在计算上等效于在一个可能更高维度的特征空间中寻找最大边距超平面。常用的核函数有以下几种:
- 线性核:适用于线性可分的数据集。
- 多项式核:适用于数据分布具有多项式关系的情况。
- 高斯核(RBF核):适用于非线性数据。
- Sigmoid核:类似神经网络的激活函数。
在实际操作中,选择合适的核函数是一个关键步骤,通常需要通过交叉验证等方法来确定最优的核函数类型及相应的参数。一旦选定核函数,非线性SVM的学习算法(如SMO算法)会在这个“kernelized”特征空间中寻找最大边距超平面,从而解决了原始空间中非线性可分的问题。这种方法不仅保持了SVM优雅的理论性质,如最大化间隔,同时也大大增强了模型的表达能力和泛化能力。
三、支持向量机实战
1、线性可分的SVM
# 线性SVM
#1、导入库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
#2、加载数据集
iris = datasets.load_iris() # 加载鸢尾花数据集
x = iris.data
y = iris.target
#3、数据预处理
sc = StandardScaler()
x = sc.fit_transform(x)
#4、将数据拆分为训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.2,random_state= 42)
#5、创建SVM模型
svm_mode = SVC(kernel='linear',C= 1.0) # C:正则化参数,越大越不容易拟合
#6、训练模型
svm_mode.fit(x_train,y_train)
#7、预测模型
y_pred = svm_mode.predict(x_test)
# 8、评估模型
accuracy = accuracy_score(y_test,y_pred)
print("accuracy:",accuracy)

2、非线性可分SVM
#非线性SVM
#1、导入库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
#2、加载数据集
iris = datasets.load_iris() # 加载鸢尾花数据集
x = iris.data
y = iris.target
#3、数据预处理
sc = StandardScaler()
x = sc.fit_transform(x)
#4、将数据拆分为训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.2,random_state= 42)
#5、创建SVM模型
svm_mode = SVC(kernel='rbf',C= 1.0,gamma = 0.1) # C:正则化参数,越大越不容易拟合 gamma:高斯核参数,越大越模糊
#6、训练模型
svm_mode.fit(x_train,y_train)
#7、预测模型
y_pred = svm_mode.predict(x_test)
# 8、评估模型
accuracy = accuracy_score(y_test,y_pred)
print("accuracy:",accuracy)

四、总结
1、 sklearn.svm.SVC函数详解
sklearn.svm.SVC 是 Scikit-learn 库中用于实现支持向量机(SVM)分类的一个类。
sklearn.svm.SVC(
C=1.0,
kernel='rbf',
degree=3,
gamma='scale',
coef0=0.0,
shrinking=True,
probability=False,
tol=1e-3,
cache_size=200,
class_weight=None,
verbose=False,
max_iter=-1,
decision_function_shape='ovr',
break_ties=False,
random_state=None
)
函数参数详解:
(1)C:默认值为1.0
作用:惩罚系数,用于平衡最大化分类间隔和误分类惩罚间隔之间的关系;
解释:较大的C意味着对误分类的惩罚更大,模型会倾向于将更多的训练数据点分类正确,但可能会导致间隔变小,可能出现过拟合;较小的C则更关注间隔的大小,而允许更多的误分类,从而提高模型的泛化能力;
(2)kernel:默认值为‘rbf’
作用:指定要使用的核函数,支持不同的非线性映射方法;
可选值:
linear:线性核函数,即不进行任何非线性映射;sigmoid:类似于神经网络的激活函数,较少使用;rbf:径向基函数(Radial Basis Function),又称高斯核,是最常用的非线性核函数;poly:多项式核函数,通常用于多项式可分的情况;
(3)degree :默认值为3
作用:当 kernel='poly' 时,指定多项式核的多项式次数;
解释:如果使用多项式核函数(poly),degree 参数决定多项式的阶数,通常是 2 或 3;
(4)gamma:默认值为'scale'
作用:核函数系数,适用于 'rbf'、'poly' 和 'sigmoid' 核函数;
解释:gamma 值越大,模型越倾向于拟合训练数据,但可能会导致过拟合;gamma 值越小,模型更倾向于平滑;
(5)coef0:默认值为0.0
作用:核函数中的独立项,仅在 kernel='poly' 或 kernel='sigmoid' 时有意义;
解释:用于控制多项式核函数和 sigmoid 核函数中的偏移量;
👏觉得文章对自己有用的宝子可以收藏文章并给小编点个赞!
👏想了解更多统计学、数据分析、数据开发、机器学习算法、深度学习等有关知识的宝子们,可以关注小编,希望以后我们一起成长!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)