【机器学习】有监督学习算法之:支持向量机

news2024/9/27 5:57:09

支持向量机

  • 1、引言
  • 2、决策树
    • 2.1 定义
    • 2.2 原理
    • 2.3 实现方式
    • 2.4 算法公式
    • 2.5 代码示例
  • 3、总结

1、引言

小屌丝:鱼哥,泡澡啊。
小鱼:不去
小屌丝:… 此话当真?
小鱼:此话不假
小屌丝:到底去还是不去?
小鱼:我昨天刚泡完澡,今天还去?
小屌丝:… 你竟然自己去?
小鱼:没有啊
在这里插入图片描述

小屌丝:… 我不信,我不听,反正你昨天去泡澡没带我。
小鱼:…那待会咱俩再去呗
小屌丝: 这还差不多。嘿嘿~ ~
小鱼:那等我一会
小屌丝:干啥啊这又?
小鱼:当然是在忙喽。
小屌丝:…

2、决策树

2.1 定义

支持向量机(Support Vector Machine,简称SVM)是一种分类算法,它试图找到一个超平面来分隔两个类别的数据点,使得两侧的间隔(margin)最大。

当数据点在高维空间中不是线性可分时,SVM通过使用核函数(kernel function)将原始数据映射到更高维的特征空间,使得数据在新的空间中线性可分。

2.2 原理

SVM的基本原理涉及到高维空间中的数据点和一个决策边界(也称为超平面)。它的目标是找到一个超平面,使得不同类别的数据点距离它最远,这个距离称为“间隔”。

工作原理如下:

  • 数据转换:首先,SVM将数据点映射到高维空间,这样它们可以更容易地被一个超平面分开。

  • 超平面选择:然后,SVM尝试找到一个超平面,使得不同类别的支持向量离它最远。这个超平面的方程可以表示为:,其中是超平面的法向量,是偏置。

  • 间隔最大化:SVM的目标是最大化支持向量到超平面的距离,这个距离称为“间隔”。间隔的计算公式是:。

  • 分类:最后,SVM使用这个超平面来进行分类。对于新的数据点,它会根据这个超平面的位置来决定它属于哪个类别。

2.3 实现方式

SVM的实现方式主要包括:

  • 线性可分SVM:当数据集线性可分时,可以直接使用线性SVM进行分类。

  • 线性SVM(软间隔):当数据集近似线性可分时,引入松弛变量和惩罚参数,允许部分样本被错分。

  • 非线性SVM:当数据集非线性可分时,使用核函数将原始数据映射到更高维的特征空间,然后在新的空间中寻找最优超平面。

2.4 算法公式

SVM的公式可能看起来有点吓人,但我们可以用简单的例子来解释它们。

  • 数据点的映射

    • 假设我们在二维空间中有数据点 ((x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n))。
    • 我们可以将它们映射到三维空间,通过增加一个额外的维度 (z),得到新的数据点 ((x_1, y_1, z_1), (x_2, y_2, z_2), \ldots, (x_n, y_n, z_n))。
    • 这个映射可以通过一个函数 (f) 来实现,例如 (z = f(x, y))。
  • 超平面选择

    • 在三维空间中,我们的超平面方程可以表示为:[ w_1x + w_2y + w_3z + b = 0 ]。这里的(w_1, w_2, w_3) 是超平面的法向量的分量,(b) 是偏置项。这个超平面将数据点分隔成两个类别。
  • 间隔最大化

    • 在SVM中,间隔是指数据点到超平面的最短距离。对于任意数据点 ((x, y, z)) 和超平面 (w_1x + w_2y + w_3z + b = 0),其到超平面的距离 (d) 可以计算为:

      [ d = \frac{|w_1x + w_2y + w_3z + b|}{\sqrt{w_1^2 + w_2^2 + w_3^2}} ]

    • 间隔最大化就是要找到这样的超平面,使得所有数据点到这个超平面的距离中的最小值最大。

  • 分类

    • 对于新的数据点 ((x_{\text{new}}, y_{\text{new}}, z_{\text{new}})),我们可以将其映射到三维空间,然后计算它到超平面的距离 (d_{\text{new}})。
    • 根据 (d_{\text{new}}) 的正负以及超平面的位置(由法向量的方向决定),我们可以判断这个数据点属于哪一个类别。

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-02-21
# @Author : Carl_DJ

'''
实现功能:
    用于生成线性可分的数据集并可视化SVM的分界线

'''
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC

# 生成线性可分的数据集
X, y = datasets.make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=42)

# 创建SVM分类器并拟合数据
clf = SVC(kernel='linear', C=1000)
clf.fit(X, y)

# 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, marker='o', edgecolors='k')

# 绘制决策边界
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# 创建网格来评估模型
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

# 绘制决策边界
ax.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('SVM Decision Boundary')
plt.show()


在这里插入图片描述

3、总结

支持向量机是一种强大的分类算法,它通过寻找最优超平面来实现分类,并且具有优秀的泛化能力。
SVM对于高维数据的处理效果尤为出色,并且可以通过核函数来处理非线性问题。
然而,SVM的计算复杂度相对较高,尤其是当样本数量很大时,训练过程可能会比较慢。
在实际应用中,需要根据具体问题和数据集特点来选择合适的算法和参数。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 多个名企认证讲师等
  • 认证金牌面试官
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习机器学习领域的知识。

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

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

相关文章

奔跑吧,前端er!前端五大方向技能罗列,webGL、AI、桌面、游戏

经常看到头条上前端们争论各种框架的优劣,然后相互争吵不休,其实技术也好,框架也好,都是服务于项目需求的,争论的铁子们都站在自己的项目角度来品评工具,肯定是公说公有理婆说婆有理啦。 技术和框架是中性的…

ArrayBlockingQueue 数组阻塞队列 源码阅读

1. 概述 数组阻塞队列 有界的阻塞数组, 容量一旦创建, 无法修改阻塞队列, 队列满的时候, 往队列put数据会被阻塞, 队列空, 取数据也会被阻塞并发安全 2. 数据结构 /** 存储队列元素的数组 */ /** 存储队列元素的数组 */ final Object[] items;/** 队首位置,下一…

【王道操作系统】ch1计算机系统概述-06虚拟机

文章目录 【王道操作系统】ch1计算机系统概述-06虚拟机01传统计算机02虚拟机的基本概念(1)第一类虚拟机管理程序(2) 第二类虚拟机管理程序(3) 两类虚拟机管理程序的对比 【王道操作系统】ch1计算机系统概述…

【Linux系统化学习】线程概念

目录 线程的概念 线程的引出 什么是线程 理解线程比进程更加的轻量化 线程的优点 现成的缺点 线程异常 线程用途 Linux进程VS线程 线程的简单现象 线程的概念 有关操作系统的书籍或者课本都会这样描述线程: 线程是比进程轻量化的一种执行流线程是进程内部…

[SWPUCTF 2021 新生赛]babyrce

先打开环境 分析代码,要给COOKIE赋值admin1 使用hackbar赋值 打开rasalghul.php 分析代码,使用GET传参url,如果url里没有/ /,则赋值给ip,然后通过shell_exec函数得到flag,否则,返回nonono。他…

备战蓝桥杯————递归反转单链表

当要求只反转单链表中的一部分时,递归实现确实具有一定的挑战性,但也是可行的。下面我将介绍一种递归实现的方法来反转单链表中的一部分。 一、反转链表 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示…

详解Win 7重置电脑操作步骤

文章目录 介绍Win 7 重置系统的方法:1.按下键盘上的Windows键和R键,打开运行窗口,输入sysprep 点击回车确定。2.之后就会出现如下界面,在这个新打开的窗口中双击 sysprep 程序3.选择【进入系统全新体验(00BE) 】&#…

C++ sort排序

sort函数接受两个迭代器作为参数&#xff0c;分别表示要排序的范围的起始和结束位置。 请注意&#xff0c;sort函数默认使用小于运算符&#xff08;<&#xff09;来比较元素的顺序&#xff0c;默认从小到大排。 在这里&#xff0c;使用str.begin()和str.end()来表示整个字符…

【MDVRP多站点物流配送车辆路径规划问题(带容量限制)】基于遗传算法GA求解

课题名称&#xff1a;基于遗传算法求解带容量限制的多站点的物流配送路径问题MDVRP 版本时间&#xff1a;2023-03-12 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型描述&#xff1a; 15个城市中&#xff0c;其中北京&#xff0c;长沙和杭州三座…

springboot241基于SpringBoot+Vue的电商应用系统的设计与实现

基于SpringBootVue的电商应用系统的设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本电商应用系统就是在这样的大环境下诞生&#xff0c;其可以…

构建 ESLint 内存泄露检测插件入门:提升代码质量与防范运行时风险

前言 本文目的是介绍如何创建开发一个自定义规则 ESLint 插件。利用其能力,检测一些代码中可能存在的内存泄露并及时进行提示,避免潜在的后期影响。 本文实现其中一部分功能–检测事件监听器的使用是否存在内存泄露为例来演示基本的 ESLint 自定义规则插件开发的过程。用以…

排序算法——快速排序的非递归写法

快速排序的非递归 我们写快速排序的时候&#xff0c;通常用的递归的方法实现快速排序&#xff0c;那么有没有非递归的方法实现快速排序呢&#xff1f;肯定是有的。思想还是一样的&#xff0c;不过非递归是看似是非递归其实还是递归。 思路解释 快速排序的非递归使用的是栈这…

性能优越!|多策略改进的长鼻浣熊优化算法MSCOA(MATLAB)

文章来源于我的个人公众号&#xff1a;KAU的云实验台&#xff0c;主要更新智能优化算法的原理、应用、改进 ​函数测试(部分)&#xff1a; 仅运行MSCOA: 所有元启发式算法的共同点在于&#xff0c;其搜索过程可分为勘探和开发两个阶段。勘探阶段指算法对全局空间的搜索能力&…

kafka消费者重平衡是什么?怎么避免?

消费者重平衡是指主题下的分区怎么分配给消费者的过程。下面这个图可以看出该过程&#xff1a;原来有2个消费者&#xff0c;3个分区&#xff0c;其中一个消费者肯定就的处理2个分区了。那么当新加入消费者时&#xff0c;则每个消费者就只处理一个分区了。处理这个分区过程的叫协…

PyTorch-卷积神经网络

卷积神经网络 基本结构 首先解释一下什么是卷积&#xff0c;这个卷积当然不是数学上的卷积&#xff0c;这里的卷积其实表示的是一个三维的权重&#xff0c;这么解释起来可能不太理解&#xff0c;我们先看看卷积网络的基本结构。 通过上面的图我们清楚地了解到卷积网络和一般网…

CUDA学习笔记01:vs2019环境配置

为了在window11 vs2019下使用CUDA编程&#xff0c;配置了一下环境&#xff0c;但是我电脑一开始自带CUDA&#xff0c;然后再安装的vs2019&#xff0c;这样安装顺序上是不对的&#xff0c;vs2019找不到CUDA配置项&#xff0c;网上找了很多办法貌似都不好使而且很复杂。 那么最快…

2024东南大学553复试真题及笔记

2023年真题知识点 引用指针 题目为 传递一个指针的引用做修改&#xff0c;输出指针指向的结果&#xff0c;但是指针被修改&#xff0c;结果就不一样了。 static 静态变量 类里面的静态成员变量&#xff0c;很简单的题目 for循环 看循环的内容输出字符串 try try catch捕…

SandBox中的JavaAgent技术

8.1 JavaAgent Java Agent 是一种强大的技术&#xff0c;在运行时动态修改已加载类的字节码&#xff0c;为应用程序注入额外的功能和行为。 JDK 1.5 支持静态 Instrumentation&#xff0c;基本的思路是在 JVM 启动的时候添加一个代理&#xff08;javaagent&#xff09;&#…

【创作回顾】17个月峥嵘创作史

#里程碑专区#、#创作者纪念日# 还记得 2022 年 10 月 05 日&#xff0c;我在CSDN撰写了第 1 篇博客——《关于测试工程师瓶颈和突围的一个思考》&#xff0c;也是我在全网发布的第一篇技术文章。 回想当时&#xff0c;这一篇的诞生过程并不轻松&#xff0c;不像是一篇网络文章…

科技赋能,MTW400A为农村饮水安全打通“最后一公里”

日前&#xff0c;山东省政府纵深推进国家省级水网先导区建设&#xff0c;持续深化“水网”行动&#xff0c;着力构筑水安全保障网、水民生服务网、水生态保护网&#xff0c;建设水美乡村示范带、内河航运示范带、文旅融合示范带、绿色发展示范带&#xff0c;推动形成“三网四带…