机器学习:支持向量机(SVM)

一.概念

       支持向量机(Support Vector Machine,SVM)是一种常用的分类和回归算法。其基本思想是寻找一个最优的超平面,将不同类别的数据分开,并使得该超平面与最近的数据点之间的间隔最大化。支持向量指的是距离超平面最近的数据点。

       SVM可以处理高维数据及非线性问题,在分类问题中尤为有效。它通过将原始数据映射到高维空间中,在该空间中寻找一个超平面来完成分类任务。SVM的核函数方法可以避免高维空间计算量过大的问题。

       除了分类问题,SVM还可以用于回归、异常检测等领域。在实际应用中,SVM已经被广泛应用于文本分类、图像识别、生物信息学等领域。

二.SVM的优缺点

优点:

        支持向量机算法可以解决小样本情况下的机器学习问题,简化了通常的分类和回归等问题。

        由于采用核函数方法克服了维数灾难和非线性可分的问题,所以向高维空间映射时没有增加计算的复杂性。换句话说,由于支持向量机算法的最终决策函数只由少数的支持向量所确定,所以计算的复杂性取决于支持向量的数目,而不是样本空间的维数。

缺点:

        对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二类问题。

        支持向量机算法对大规模训练样本难以实施。因为支持向量机算法借助二次规划求解支持向量,这其中会涉及m阶矩阵的计算,所以矩阵阶数很大时将耗费大量的机器内存和运算时间。

        SVM算法效果与核函数的选择关系很大,往往需要尝试多种核函数,即使选择了效果比较好的高斯核函数,也要调参选择恰当的 \gamma 参数。另一方面就是现在常用的SVM理论都是使用固定惩罚系数 C,但正负样本的两种错误造成的损失是不一样的。

适用数据类型:

        数值型和标称型数据。

三.软,硬间隔

只考虑二分类问题,假设有n个训练点Xi,每个训练点有一个指标yi。训练集即为:,其中为输入变量,其分量称为特征或属性。

是输出指标。问题是给定新的输入x,如何推断它的输出y是1还是-1。

处理方法是找到一个函数

,然后定义下面的决策函数实现输出。

其中sgn(z)是符号函数,也就是当 z⩾0�⩾0 时取值+1,否则取值-1。确定g的算法称为分类机。如果 ,则确定w和b的算法称为线性分类机。考虑训练集T,若存在\omega \epsilon R^{n}b\epsilon R\varepsilon >0使得:对所有的y_{i}=1的指标i,有\omega ^{T}x_{i}+b\geqslant \varepsilon;而对所有的y_{i}=-1的指标j,有\omega ^{T}x_{i}+b\leqslant \varepsilon则称训练集T线性可分。假如数据是完全的线性可分的,那么学习到的模型可以称为硬间隔支持向量机。换个说法,硬间隔指的就是完全分类准确,不能存在分类错误的情况。软间隔,就是允许一定量的样本分类错误。

四.核函数

        SVM中,核函数(kernel function)是一种用于将数据从原始空间映射到高维特征空间的方法。它能使得在原始空间中线性不可分的问题,在高维特征空间中变为线性可分或近似线性可分的问题。

        核函数允许我们在不显式计算高维特征空间的情况下,直接在原始空间中进行计算。这样可以避免高维空间计算复杂度的问题。核函数通过计算原始空间中数据点之间的相似度或者内积来进行数据的非线性映射。

        常见的核函数包括线性核函数、多项式核函数、径向基函数(RBF)核函数等。其中,RBF核函数是应用最广泛的核函数之一,它通过计算数据点之间的欧氏距离来度量它们在高维特征空间中的相似度。RBF核函数可以有效地处理非线性问题,并且具有较好的鲁棒性和泛化能力。

        通过选择合适的核函数,支持向量机可以更好地适应不同类型的数据集,并提高分类的性能。

五.应用

       采用鸢尾花数据集,此数据集包含了150个鸢尾花样本,对应3种鸢尾花,各50个样本,以及它们各自对应的4种关于花外形的数据,适用于分类任务。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
# 引用 iris 数据集
iris = datasets.load_iris()
X = iris.data[:, :2] # 选取前两列作为X参数
y = iris.target # 采集标签作为y参数
C = 1.0 # SVM regularization parameter
 
# 将所得参数进行模型训练
svc = svm.SVC(kernel='linear', C=1, gamma='auto').fit(X, y)
# 建图
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
h = (x_max / x_min)/100
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
 np.arange(y_min, y_max, h))
plt.subplot(1, 1, 1) # 将显示界面分割成1*1 图形标号为1的网格
Z = svc.predict(np.c_[xx.ravel(), yy.ravel()]) # np.c按行连接两个矩阵,但变量为两个数组,按列连接
Z = Z.reshape(xx.shape)# 重新构造行列
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)# 绘制等高线
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired) # 生成一个scatter散点图。
plt.xlabel('Sepal length') # x轴标签
plt.ylabel('Sepal width') # y轴标签
plt.xlim(xx.min(), xx.max()) # 设置x轴的数值显示范围
plt.title('SVC with linear kernel') # 设置显示图像的名称
plt.savefig('./test1.png') #存储图像
plt.show() # 显示

运行结果 

六.总结

       支持向量机是一种分类器。之所以称为”机“是因为它会产生一个二值决策的结果,即它是一种决策”机“。支持向量机是一个二分类器。当其解决多分类问题时需要用额外的方法对其进行扩展。而且SVM的效果也对优化参数和所用核函数中的参数敏感。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_73707081

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值