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

支持向量机

  • 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.mzph.cn/news/717671.shtml

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

相关文章

什么是支持向量机(Support vector machine)和其原理

作为机器学习的基础算法,SVM被反复提及,西瓜书、wiki都能查到详细介绍,但是总是觉得还差那么点,于是决定自己总结一下。 一、什么是SVM? 1、解决什么问题? SVM,最原始的版本是用于最简单的线…

总结 HashTable, HashMap, ConcurrentHashMap 之间的区别

1.多线程环境使用哈希表 HashMap 不行,线程不安全 更靠谱的,Hashtable,在关键方法上加了synchronized 后来标准库又引入了一个更好的解决方案;ConcurrentHashMap 2.HashMap 首先HashMap本身线程不安全其次HashMap的key值可以为空(当key为空时,哈希会…

【Java数据结构】——五道算法题让你灵活运用Map和Set

目录 一.只出现一次的数字 二.宝石与石头 三.旧键盘 四.给定一个数组,统计每个元素出现的次数 五.前K个高频单词 一.只出现一次的数字 136. 只出现一次的数字 - 力扣(LeetCode) 算法原理:我们将nums中每个元素都存入到set中…

ASUS华硕天选5笔记本电脑FX607JV原装出厂Win11系统下载

ASUS TUF Gaming F16 FX607JV天选五原厂Windows11系统 适用型号: FX607JU、FX607JI、FX607JV、 FX607JIR、FX607JVR、FX607JUR 下载链接:https://pan.baidu.com/s/1l963wqxT0q1Idr98ACzynQ?pwd0d46 提取码:0d46 原厂系统自带所有驱动、…

python自动化学习--3.8python操作EXCEL文件python日志收集处理

1、Excel文件处理 安装 openpxl 第三方库 openpxl 模块三大组件: 1、工作簿 (包含多个sheet工作表) 2、工作表 (某个数据包含在某个工作表) 3、单元格 1、创建excel工作簿 import openpyxl"""Excel表格的创建…

GotoXy控制台光标的位置更新

光标控制解释 控制台的光标更新方法, 用于控制数据输出位置 void gotoXY(int x, int y)//新函数:更新光标 {COORD c;c.X x;c.Y y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c); }代码解释 这段代码定义了一个名为 gotoXY 的函数,…

【Spring Boot】实现全局异常处理

1.定义基础异常接口类 /*** description: 服务接口类* author: MrVK* date: 2021/4/19 21:39*/ public interface BaseErrorInfoInterface {/*** 错误码* return*/String getResultCode();/*** 错误描述* return*/String getResultMsg(); } 2.定义错误处理枚举类 /*** desc…

小伙伴询问AI该怎么学习?本人的一点总结,以思维导图呈现

如有需要思维导图的在后台请留邮箱,相关知识结构目录 部分导图

nn.Linear() 使用提醒

原本以为它是和nn.Conv2d()一样,就看第二个维度的数值,今天才知道,它是只看最后一个维度的数值!!! 例子1 Descripttion: Result: Author: Philo Date: 2024-02-27 14:33:50 LastEditors: Philo LastEditT…

如何使用“Ubuntu 20.04桌面版,安装MariaDB数据库“?win10系统?

1、更新软件包 sudo apt update 2、 安装MariaDB服务器和客户端 sudo apt install mariadb-server mariadb-client 3、 查看MeriaDB是否运行 service mysql status :q"退回命令行状态 4、 设置MariaDB root用户的密码 sudo mysql_secure_installation 5、 MariaD…

斐波那契数列模型----三步问题

面试题 08.01. 三步问题 - 力扣(LeetCode) 1、状态表示: 题目要求:上到n阶台阶,有多少种方法。那么n逐渐简化,上1阶台阶有多少种方法;上2阶台阶有多少种方法……直到上n阶台阶有多少种方法。 …

代码随想录第45天|● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

文章目录 ● 70. 爬楼梯 (进阶)思路:- 排列 先value后weight代码: ● 322. 零钱兑换思路:代码 ● 279.完全平方数思路:代码 ● 70. 爬楼梯 (进阶) 思路:- 排列 先value后…

如何提升计算机性能

04 穿越功耗墙,我们该从哪些方面提升“性能”? 上一讲,在讲 CPU 的性能时,我们提到了这样一个公式: 程序的 CPU 执行时间 指令数CPIClock Cycle Time 这么来看,如果要提升计算机的性能,我们可以…

基于ZYNQ的PCIE高速数据采集卡的设计(一)

作为信息处理的第一步,数据采集的作用越来越重要。目前,数据采集已经在航 空、民用、军事、医疗等领域得到广泛应用。随着相关技术的不断发展,信号频率越 来高,带宽越来越大,使得数据采集技术逐渐向高速大数据的方向…

幻兽帕鲁专用服务器搭建之Linux部署配置教程

大家好我是飞飞,上一期我分享了Windows系统的幻兽帕鲁服务器搭建教程。因为幻兽帕鲁这游戏对服务器的配置有一定的要求,很多小伙伴就寻思用Linux系统搭建占用会不会小一点?有计算机基础的小伙伴都知道Linux系统和Windows系统相比,…

【Linux】实时查看服务器信息

查看服务器CPU使用率 使用命令mpstat 1。这里的1表示每隔1秒更新一次CPU使用率。如果系统未安装mpstat,可以通过安装sysstat包来获取它。 在基于Debian的系统(如Ubuntu)上,使用命令: sudo apt-get update sudo apt-…

考研复试类比社团招新,无所谓“公平”,导师选谁都是他的权力

这篇文章是抖音和b站上上传的同名视频的原文稿件,感兴趣的csdn用户可以关注我的抖音和b站账号(GeekPower极客力量)。同时这篇文章也为视频观众提供方便,可以更加冷静地分析和思考。文章同时在知乎发表。 我考研一战的时候计算机考…

【详识JAVA语言】面向对象程序三大特性之一:封装

封装的概念 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节。 比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通…

管理系统提升:列表页构成要素,拒绝千篇一律

大家伙,我是大千UI工场,专注UI知识案例分享和接单,本期带来B端系统列表页的分享,欢迎大家关注、互动交流。 一、什么是列表页 管理系统列表页是指管理系统中用于展示和管理数据的页面,通常以表格或列表的形式呈现。列…

23端口登录的Telnet命令+传输协议FTP命令

一、23端口登录的Telnet命令 Telnet是传输控制协议/互联网协议(TCP/IP)网络(如Internet)的登录和仿真程序,主要用于Internet会话。基本功能是允许用户登录进入远程主机程序。 常用的Telnet命令 Telnet命令的格式为&…