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

支持向量机

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ssm666社区流浪动物救助领养系统的设计与开发

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一 、设计说明 1.1 课题…

Window下编写的sh文件在Linux/Docker中无法使用

Window下编写的sh文件在Linux/Docker中无法使用 一、sh文件目的1.1 初始状态1.2 目的 二、过程与异常2.1 首先获取标准ubuntu20.04 - 正常2.2 启动ubuntu20.04容器 - 正常2.3 执行windows下写的preInstall文件 - 报错 三、检查和处理3.1 评估异常3.2 处理异常3.3 调整后运行测试…

笔记本hp6930p安装Android-x86补记

在上一篇日记中(笔记本hp6930p安装Android-x86避坑日记-CSDN博客)提到hp6930p安装Android-x86-9.0,无法正常启动,本文对此再做尝试,原因是:Android-x86-9.0-rc2不支持无线网卡,需要在BIOS中关闭…

前端学习第六天-css浮动和定位

达标要求 了解浮动的意义 掌握浮动的样式属性 熟练应用清除浮动 熟练掌握定位的三种方式 能够说出网页布局的不同方式的意义 1. 浮动(float) 1.1 CSS 布局的三种机制 网页布局的核心——就是用 CSS 来摆放盒子。CSS 提供了 3 种机制来设置盒子的摆放位置,分…

【推荐算法系列十七】:GBDT+LR 排序算法

排序算法经典中的经典 参考 推荐系统之GBDTLR 极客时间 手把手带你搭建推荐系统 课程 逻辑回归(LR)模型 逻辑回归(LR,Logistic Regression)是一种传统机器学习分类模型,也是一种比较重要的非线性回归模型&#xff…

0.8秒一张图40hx矿卡stable diffusion webui 高质极速出图组合(24.3.3)

新消息是。经过三个月的等待,SD Webui (automatic1111)终于推出了新版本1.8.0,本次版本最大的更新,可能就是pytorch更新到2.1.2, 不过还是晚了pytorch 2.2.2版。 不过这版的一些更新,在forget分支上早就实现了,所以。…

快递批量查询高手:轻松管理物流信息,提升工作效率

快递批量查询高手:轻松管理物流信息,提升工作效率着 电商市场的不断壮大,物流行业的发展也日新月异。在如此繁忙的物流环境中,如何高效地管理物流信息成为了一个重要的课题。而在这个背景下,一款名为“快递批量查询高…

Linux网络编程——网络基础

Linux网络编程——网络基础 1. 网络结构模式1.1 C/S 结构1.2 B/S 结构 2. MAC 地址3. IP地址3.1 简介3.2 IP 地址编址方式 4. 端口4.1 简介4.2 端口类型 5. 网络模型5.1 OSI 七层参考模型5.2 TCP/IP 四层模型 6. 协议6.1 简介6.2 常见协议6.3 UDP 协议6.4 TCP 协议6.5 IP 协议6…

时产20吨成套饲料生产线设备;一键式操作省时省力

时产20吨成套饲料生产线设备采用钢架结构,确保了设备的稳定性和耐用性。这种结构不仅提供了强大的支撑力,还使得设备在长时间运行过程中能够保持稳定的性能。 该生产线设备由多个关键部分组成,包括原料预处理系统、粉碎系统、混合系统、制粒…

k8s-prometheus监控部署 22

新建项目仓库并上传部署prometheus所需的镜像 开始部署 修改svc访问方式为LoadBalancer 查看用户名和密码 访问grafana监控页面 http://192.168.182.103/​​​​​​ 修改可视化模板 官方监控模板:https://grafana.com/grafana/dashboards 访问prometheus监控页面…

vue2结合electron开发跨平台应用(桌面端应用)

1.确定nodejs和electron的版本号 确定nodejs和electron的版本号及其重要,因为electron的开发版本需要指定的nodejs版本支持。 本文安装测试使用的是: 1.node18.19.0 2.npm10.2.3 3.vue-cli5.0.8 4.electron29.0.0 2.创建vue2项目 vue create elctron29.0.0_no…

【MySQL】:约束全解析

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. 约束概述二. 约束演示三. 外键约束3.1 介绍3.2 语法3.3 删除/更新行为 &…

2024最新EasyRecovery数据恢复软件的优点介绍

EasyRecovery数据恢复软件的优点主要包括: 强大的恢复能力:EasyRecovery采用先进的深度扫描技术,能够恢复因误删除、格式化、分区丢失或损坏等多种原因丢失的数据。它支持从各种存储设备中恢复数据,包括硬盘、U盘、SD卡等。广泛的…

MyBatisPlus(SpringBoot版)的分页插件

目录 一、前置工作: 1.整体项目目录结构 2.创建普通javamaven项目。 3.导入依赖,改造成springboot项目 4.配置启动类 5.创建service接口及其实现类 6.创建接口Mapper 7.配置数据源 8.创建数据库表 二、使用MP(mybatisplus)的分页插件 二、使…

上限和下限之间的随机值

实验结果; 上限和下限之间的随机值 第一步:新建项目 第二步:找到相应的部件 第三步:实验结果验证

【C++】STL学习之旅——初识STL,认识string类

string类 1 STL 简介2 STL怎么学习3 STL缺陷4 string4.1 初识 string4.2 初步使用构造函数成员函数 5 小试牛刀Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!! 1 STL 简介 …

【深度学习笔记】计算机视觉——目标检测和边界框

目标检测和边界框 前面的章节(例如 sec_alexnet— sec_googlenet)介绍了各种图像分类模型。 在图像分类任务中,我们假设图像中只有一个主要物体对象,我们只关注如何识别其类别。 然而,很多时候图像里有多个我们感兴趣…

故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab) 模型描述 XGBoost通过集成多个决策树来建立一个强大的预测模型。它采用了一种特殊的梯度提升技术,称为极限梯度提升(Extreme Gradient Boosting),以提高模型的性能和鲁棒性。 极限梯度…

Pygame教程01:初识pygame游戏模块

Pygame是一个用于创建基本的2D游戏和图形应用程序。它提供了一套丰富的工具,让开发者能够轻松地创建游戏和其他图形应用程序。Pygame 支持许多功能,包括图像和声音处理、事件处理、碰撞检测、字体渲染等。 Pygame 是在 SDL(Simple DirectMed…

进制的转化

#include <bits/stdc.h> using namespace std; typedef long long ll;int main(){char ch[]{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F};int n, m; // 记录进制的数cin >> n; // 原数的进制string str;cin >> str;string ans;vector<int> st(str.size()); // 存…