【机器学习】十大算法之一 “SVM”

news2024/11/20 0:54:54

 

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?type=blog个人简介:打工人。

持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。

如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 

        

        机器学习算法种类繁多,SVM支持向量机算法是其中十大常用算法之一。该算法起源于20世纪80年代,并在90年代逐渐形成了比较完整的理论体系和工程应用。该算法在分类领域有着广泛的应用,并在多项应用场景中表现出了较优的性能。

本文讲详细讲解机器学习十大算法之一“SVM”


目录

一、简介

二、SVM的发展史

三、SVM算法公式讲解

四、SVM的算法原理

        1. 高效

        2. 对样本大小不敏感

        3. 可以通过核函数处理非线性分类问题

        4. 对边缘数据敏感

五、SVM算法的功能

        1. 分类问题

        2. 回归问题

        3. 异常检测

六、示例代码

        1. 实现一个简单的线性SVM模型

        2. 实现一个带核函数的SVM模型

七、总结


一、简介

        支持向量机(Support Vector Machine,SVM)是机器学习十大算法之一,是一种二分类模型。SVM将实例空间映射到一个高维空间,将空间进行线性划分,同时使得分类面到两端最近的数据点的距离(margin)最大化,因此SVM也被称为最大间隔分类器(Maximal Margin Classifier)。SVM是由Vapnik和Cortes于1995年提出的,是一种广泛应用的机器学习算法,具有很好的泛化能力和鲁棒性。

二、SVM的发展史

        SVM算法是由Vapnik等人于1995年提出的。Vapnik等人早在1982年就开始了支持向量机的研究工作。SVM最初是被应用于二元分类问题,后来发展成可以用于多元分类、回归分析和异常检测等领域。

        SVM在很长一段时间内由于其算法复杂度高、理论不足、实际应用受限等问题,挣扎着发展。直到20世纪90年代期初,SVM才经过若干改进,达到了一个比较成熟的阶段。同时,大量的工作表明,SVM是非常成功的分类器,并在模式识别、计算机视觉、自然语言处理等领域得到广泛应用。

三、SVM算法公式讲解

        下面我们介绍一下SVM的算法公式和其背后的意义。

        在SVM中,我们首先需要根据训练数据构建一个超平面(Hyperplane),以此来分隔数据。超平面是在空间中将不同类别的数据分开的一条直线或曲面。如图所示,绿色和红色点表示两类数据,直线为超平面。

        超平面的数学定义为:每个样本点(xi​,yi​) 有yi​(wxi​+b)≥1,其中w表示超平面的法向量,b表示截距,yi​表示样本的标签。

        在上述公式中,当数据是线性可分时,我们可以找到一条相对于所有其他直线都是最优的分类直线,这条直线就被称为间隔最大化超平面(Maximum Margin Hyperplane,MMH)。寻找最优分割线的过程就是一个最优化问题,此时SVM就被定义为通过最大化一定间隔来实现分类的一种线性分类器。

        当数据不是完全线性可分时,我们就需要引入松弛变量(Slack Variable)\xiξ。超过最大间隔(Margin)的样本点它们的\xiξ值将大于1。我们需要找到一个平衡点,让所有误分类点尽量多地分在同一侧,并且最大化间隔,同时降低\xiξ值。具体来说,我们需要找到一个平衡\xiξ值和分类准确率的点,在这个点上,我们既能够达到最大间隔,又不会牺牲太多的分类准确率。这样的分类器我们称为软间隔SVM。

        在经过优化后,最终SVM的目标函数可以表示为:

        目标函数的第一项表示最小化模长,这个代表了要寻找一个“干净”的分割线。如果不考虑约束条件,我们会找到能够将训练样本点完美分隔的超平面,但是这样的超平面在未来可能会得到较差的结果。第二项是异常点的正则化项,它表示决策面的复杂度。CC是一个超参数,用于在最小化第一项和第二项之间找到一个合适的平衡点。

        通过对目标函数进行拉格朗日乘子法(Lagrange Multiplier)的变换,我们可以获得SVM的对偶形式:

         其中,αi​是拉格朗日乘子,x⋅y表示向量x和y的内积,即x⋅y=∣∣x∣∣⋅∣∣y∣∣cos(θ),∣∣x∣∣表示向量x的模长,θ表示向量x和y的夹角。

        它与原始问题的解等价,并且通常在实践中使用对偶形式来解决超大规模的问题。求得α向量后,我们可以使用以下公式来预测测试数据的类别:

        其中,t为测试样本。

四、SVM的算法原理

        SVM的原理并不复杂,其主要思想是:如果两类数据可以用一个超平面有效地分割,那么SVM就寻找一个最大化分类间隔的超平面。这个分类间隔是指两个类之间的距离,也就是超平面两侧到最近数据点的距离之和。因此,SVM真正的目标是求得最大间隔的超平面(即MMH),以便最大程度地提高泛化性能。当数据不是完全线性可分时,SVM会引入松弛变量,从而得到一个平衡点,以降低误分类数据点的影响,这样的SVM就是软间隔SVM。同时,SVM可以通过使用核函数来处理非线性问题。

        SVM算法的主要特征包括以下几个方面:

        1. 高效

        SVM是一种高效的算法,其能够对高维空间中的数据进行分类工作。它的运算的复杂度与训练数据的点的数量有关,而与维度无关。

        2. 对样本大小不敏感

        SVM算法的采用与样本规模的大小无关,并且在小样本集中非常高效,这个算法著名的维度灾难(Curse of Dimensionality)只影响高维空间中样本数量过多的情况。

        3. 可以通过核函数处理非线性分类问题

        SVM算法通过引入核函数来处理非线性性分类问题,这种方法被称为非线性SVM(nonlinear SVMs)。

        4. 对边缘数据敏感

        SVM算法的预测依赖于少数的边缘数据点,这些点被称为支持向量(Support Vectors)。

五、SVM算法的功能

        SVM主要用于分类问题、回归问题和异常检测等领域。

        1. 分类问题

        SVM的核心思想是找到一个超平面来最大化分类间隔,SVM可以解决线性和非线性分类问题,在二元和多元分类问题上的表现优秀。

        2. 回归问题

        SVM同时也是一种基于统计学习理论的回归分析方法。它通过最小化预测误差和最大化分类间隔来处理回归问题。

        3. 异常检测

        在异常检测中,SVM可以发现一个在高维空间中的数据子集,该子集拥有异常成员。本质上,这是一个在多维标准(multivariate criterion)空间中寻找一个超平面的问题,这个问题可以被转化为一个带约束的优化问题。

六、示例代码

        下面我们将使用Python来展示一个简单的SVM分类器的实现,并对其进行简单的测试。

        首先,我们需要导入以下库:

from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import numpy as np

        1. 实现一个简单的线性SVM模型

        下面,我们将使用Python的SVM库,实现一个简单的线性SVM模型。在这个模型中,我们将使用鸢尾花数据集(Iris dataset)来进行分类。

# 加载数据集
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
 
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42)

# 创建模型
clf = svm.SVC(kernel='linear')
 
# 训练模型
clf.fit(X_train, y_train)
 
# 预测
y_pred = clf.predict(X_test)

# 计算准确率
acc = accuracy_score(y_test, y_pred)
print("Accuracy: ", acc)

结果:

Accuracy: 0.7555555555555555

        2. 实现一个带核函数的SVM模型

        下面,我们将使用Python来实现一个带有核函数的SVM模型。

# 加载数据集
X, y = datasets.make_circles(n_samples=300, factor=.3, noise=.05)

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                        test_size=0.3, random_state=42)
 
# 创建模型
clf = svm.SVC(kernel='rbf', gamma=0.7)
 
# 训练模型
clf.fit(X_train, y_train)
 
# 预测
y_pred = clf.predict(X_test)

# 计算准确率
acc = accuracy_score(y_test, y_pred)
print("Accuracy: ", acc)

结果:

Accuracy:  1.0

        这是一个非线性问题,但是我们通过使用径向基函数(Radial basis function)来找到了一个非常好的解。

七、总结

        SVM是一种非常有用的算法,它在分类和回归问题中都表现出色。SVM的主要思想是找到一个良好的决策边界,以便正确地将数据分类。 SVM使用支持向量来确定边界,这些支持向量是从训练数据中选择的。

        SVM算法可以用于二元分类和多类别分类问题,可以使用不同的核函数来解决非线性问题。有许多SVM变种,包括核SVM,线性SVM和非线性SVM。 SVM还可以处理大规模问题,具体方法是通过适当的技术简化问题。

        总之,SVM算法是机器学习中非常重要的算法之一,它通过优化一个目标函数,找到最佳的决策边界。 SVM算法可以用于许多不同的问题,在许多不同的领域被广泛应用,因此对它的研究和应用具有非常重要的价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python获取某乎热搜数据并保存成Excel

python获取知乎热搜数据 一、获取目标、准备工作二、开始编码三、总结 一、获取目标、准备工作 1、获取目标: 本次获取教程目标:某乎热搜 2、准备工作 环境python3.xrequestspandas requests跟pandas为本次教程所需的库,requests用于模拟h…

迟来的函数传参补充——传引用【引用调用】【c++】

文章目录 1、传引用1.1、特点1.2、使用1.2.1、一般引用1.2.2、常量引用 1.3、案例1.3.1、常见变量引用做函数参数1.3.2、结构体引用做函数参数 1、传引用 函数传参,几乎一直在用简单的值传递,或者传指针,前者生成一个源结构的副本&#xff0…

知识点滴 - 食物的寒热之分

昨晚多吃了写菠萝蜜,结果第二天就流鼻血了。以前吃晒干的龙眼,也流过鼻血。看来某些水果一次性吃太多,会有问题。 那就来研究研究水果的属性,识别哪些水果吃多了上火,哪些说过吃多了受寒。 中医认为,所有的…

sharding5.0.0分表分库

sharding官网参考 https://shardingsphere.apache.org/document/current/cn/overview/ https://shardingsphere.apache.org/document/legacy/4.x/document/cn/features/sharding/use-norms/pagination/ https://shardingsphere.apache.org/document/legacy/4.x/document/cn/d…

Hector SLAM Scan Matching 理解

Hector SLAM 参考https://www.cnblogs.com/cyberniklee/p/8484104.html 搞清楚几个点有助于对scan matching的理解 占用栅格地图中每个地图点包括点坐标、占用值最大为1,表示该栅格被占用的概率、以及占用值对坐标的梯度,由于地图点是离散的&#xff…

HashMap底层实现

首先来看一下put方法的源码&#xff0c;在HashMap中最重要的就是put方法的执行逻辑以及一些控制参数的意义比较重要。 【put方法】 问题1&#xff1a;如何计算数组位置&#xff1f; 答案&#xff1a; 1、首先在插入<K &#xff0c;V> 时&#xff0c;会先将其包装成一…

商城系统是如何分账的?-加速度shopfa

微信小程序凭借着其方便快捷&#xff0c;无需下载且依附于微信这个庞大的社交平台等特点&#xff0c;让无数的企业商家都为之痴迷&#xff0c;并都纷纷投入到了小程序的搭建工作&#xff0c;但你知道吗&#xff0c;通过小程序进行交易&#xff0c;资金的结算是十分复杂的&#…

使用单元测试框架unittest进行有效测试

一、介绍 在软件开发中&#xff0c;单元测试是一种测试方法&#xff0c;它用于检查单个软件组件&#xff08;例如函数或方法&#xff09;的正确性。Python 提供了一个内置的单元测试库&#xff0c;名为 unittest&#xff0c;可以用来编写测试代码&#xff0c;然后运行测试&…

基于Java图书管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

springboot+vue漫画网站(java项目源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的漫画网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&#…

Elasticsearch:实用 BM25 - 第 2 部分:BM25 算法及其变量

BM25算法 我将尽可能深入这里的数学以解释正在发生的事情&#xff0c;但这是我们查看 BM25 公式的结构以深入了解正在发生的事情的部分。 首先我们来看看公式&#xff0c;然后我将把每个组件分解成可以理解的部分&#xff1a; 我们可以看到一些常见的组件&#xff0c;如 qi、I…

第二期丨INTERSPEECH 2023 论文预讲会

INTERSPEECH 2023 论文预讲会是由CCF语音对话与听觉专委会、语音之家主办&#xff0c;旨在为学者们提供更多的交流机会&#xff0c;更方便、快捷地了解领域前沿。活动将邀请 INTERSPEECH 2023 录用论文的作者进行报告交流。 INTERSPEECH 2023 论文预讲会第二期邀请到华南理工大…

无线耳机什么牌子的好?质量好性价比高 ?八款蓝牙耳机分享

随着TWS技术在应用层面的日益完善&#xff0c;真无线蓝牙耳机就越来越受欢迎了&#xff0c;完全摒弃了线材的束缚&#xff0c;做到了真正的无线耳机&#xff0c;这简直是无法忍受耳机线的强迫症的福音&#xff0c;而且现在不仅是佩戴时会格外的舒适&#xff0c;随着无线技术的不…

【面试题必问】浏览器是如何实现生成HTTP消息的

我们经常会使用浏览器访问各种网站&#xff0c;获取各种信息&#xff0c;帮助解决工作生活中的问题。那你知道&#xff0c;浏览器是怎么帮助我们实现对web服务器的访问&#xff0c;并返回给我们想要的信息吗&#xff1f; 1. 浏览器生成HTTP消息 我们平时使用的浏览器有很多种&…

图解LeetCode——437. 路径总和 III

一、题目 给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff08;只能从父节点到…

AI智能视频技术在安防监控领域的场景应用

AI智能视频技术是一种基于人工智能、深度学习和计算机视觉等技术的视频处理技术。它可以通过对视频进行分析和识别&#xff0c;实现各种智能化应用&#xff0c;如视频监控、智能家居、自动驾驶等。 目前&#xff0c;AI智能视频技术已经实现了人脸识别、行为分析、智能跟踪、场…

测试用例excel转word(Office word篇)

场景 我们在项目中&#xff0c;默认情况下是用我们的Excel用例模版输出测试用例。但是有的项目中&#xff0c;会要求在Word版本的测试计划或者测试报告中&#xff0c;写明测试用例。而我们的测试用例&#xff0c;有的项目有上千条&#xff0c;这个时候如果从Excel往Word中复制…

【支付宝小程序】医保接入文档网址

【支付宝小程序】医保接入文档 自己注意事项&#xff1a; 授权 my.getAuthCode跳转与参数 处理 my.ap.navigateToAlipayPage联调 测试开发者加入 白名单

【前端播放器】修改前端参数,减少时延

目录 程序修改 海康 CM8 换上新的jessibuca-3 好像提高到了1S内 与2.8的旧版本比下 191-196-2.8三个对比 jessibuca-pro 延时测试 jessibuca-pro 300ms 超低延迟 wvp-webrtc wvp-webrtc vs vms webrtc > jessibuca-pro > jessibuca 总体 参考资料 程序修改 …

不要把异常当做业务逻辑,这性能可能你无法承受

一&#xff1a;背景 1. 讲故事 在项目中摸爬滚打几年&#xff0c;应该或多或少的见过有人把异常当做业务逻辑处理的情况(┬&#xff3f;┬)&#xff0c;比如说判断一个数字是否为整数,就想当然的用try catch包起来&#xff0c;再进行 int.Parse&#xff0c;如果抛异常就说明不…