机器学习——支持向量机SVM(一)

本文深入探讨了支持向量机(SVM)的原理与应用,解释了其作为线性分类器延伸的重要角色,特别是在处理非线性分类问题时的优势。文章详细介绍了SVM的几何意义,包括如何找到最佳分类超平面,以及‘支持向量’和‘间隔’的概念。通过数学推导,阐述了如何使用拉格朗日算子求解最优超平面。

在之前做数学建模的时候就有使用过支持向量机的有关知识,但是对于支持向量机的理解一直不是很深刻,尤其是数学推导部分还是存在一些问题。在最近看周志华西瓜书的过程中同样发现这一问题,西瓜书中对支持向量机的讲解部分不是很详细,所以我又查找了其他的资料。

支持向量机是一种原创性(非组合)的具有明显直观几何意义的分类算法,具有较高的准确率。虽然支持向量机的几何意义较为直观,但是细节非常复杂,内容涉及到凸优化分析,核函数,神经网络等多个领域,内容多而数学推导过程复杂。

我们可以将支持向量机看成是线性分类器的延伸和推广,他作为一个分类器最大的作用就是可以解决一些非线性边界的分类问题,而且处理过程复杂度比较小,因此支持向量机在生活中得到广泛的应用,被誉为是“让应用数学家真正得到应用的一种算法”。
在这里插入图片描述

如上图中圈和×的边界显然不是一个线性边界,我们之前介绍的那些线性分类器无法将两者进行划分,而支持向量机可以很好的完成这一个任务。

在最基本的线性可分问题中,我们可以很轻松的画出两者的边界。在这里,我们需要意识到的是这种分离的方法不是唯一的,我们需要从这些分类方法中找出最好的那一种方法。
在这里插入图片描述
在分类问题中,我们认为处于位于两类训练样本“正中间”的划分超平面就是最好的分类方法,因为此时划分平面对训练样本的容忍性最好(即使样本发生少量变动依然可以完成分类)如下图所示:
在这里插入图片描述

我们注意到有几个样本在分类的边界上,我们将其称为“支持向量”。

两个支持向量到超平面之间的距离之和称为“间隔”,我们希望得到最好的划分超平面,也就是希望这个距离越大。

在样本空间中,划分超平面可以用线性方程w⋅x+b=0w\cdot x+b=0wx+b=0来进行表示,其中www表示超平面的法向量,如下图:
在这里插入图片描述

对于分别通过x1x_{1}x1x2x_{2}x2这两个支持向量的超平面来说,我们可以反解法推导出分别为w⋅x+b=1w\cdot x+b=1wx+b=1w⋅x+b=−1w\cdot x+b=-1wx+b=1,这两条直线之间的距离就是d=2∣∣w∣∣d=\frac{2}{||w||}d=w2,我们希望求出d=2∣∣w∣∣d=\frac{2}{||w||}d=w2在符合yi⋅(w⋅x+b)≥1y_{i}\cdot \left ( w\cdot x+b\right )\geq 1yi(wx+b)1情况下的最值。这个问题等价于求解:
在这里插入图片描述
对于这个问题,我们就可以用拉格朗日算子来求解其最值了。

头歌平台上关于机器学习支持向量机的相关内容包括线性支持向量机支持向量机分类模型及其应用。 线性支持向量机的代码示例如下: ```python #encoding=utf8 from sklearn.svm import LinearSVC def linearsvc_predict(train_data,train_label,test_data): ''' input:train_data(ndarray):训练数据 train_label(ndarray):训练标签 output:predict(ndarray):测试集预测标签 ''' #********* Begin *********# clf = LinearSVC(dual=False) clf.fit(train_data,train_label) predict = clf.predict(test_data) #********* End *********# return predict ``` 该代码定义了个`linearsvc_predict`函数,用于使用线性支持向量机对测试数据进行预测 [^2]。 支持向量机分类模型及其应用的任务是基于关卡2基础上,取数据集前600条记录作为训练数据,后90条记录作为测试数据,构建支持向量机模型,输出其模型准确率和预测准确率。代码示例如下: ```python #********** Begin **********# #在上关基础,对经过缺失值填充、数值变量标准化后的数据集,取前600条记录作为训练数据,后90条记录作为测试数据 #构建支持向量机模型,返回计算结果模型准确率rv和预测准确率r def return_values(): import numpy as np X1=np.load('X1.npy') #经过缺失值填充、数值变量标准化后的数据集,numpy数组690*15 Y=np.load('Y.npy') #因变量,numpy数组,690个元素 from sklearn.svm import SVC x1 = X1[:600, :] y1 = Y[:600] x2 = X1[600:, :] y2 = Y[600:] clf = SVC(kernel='rbf') clf.fit(x1, y1) rv = clf.score(x1, y1) r = clf.score(x2, y2) return(rv,r) #********** End **********# from sklearn import svm # 加载sklearn库来调用svm算法 from sklearn.datasets import load_iris #加载sklearn库中的数据集 from sklearn.model_selection import train_test_split #划分测试集训练集 ``` 此代码定义了`return_values`函数,用于构建支持向量机模型并返回模型准确率和预测准确率 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值