【AI知识】有监督学习分类任务之支持向量机

news2025/3/1 13:41:45

1.支持向量机概念

支持向量机(Support Vector Machine, SVM) 是一种有监督学习算法,主要用于分类任务(也可用于回归任务,即支持向量回归,SVR)。SVM的核心思想是找到一个最优的超平面(hyperplane) 来将不同类别的数据分开,且最大化类别间边界(间隔),从而提高模型的泛化能力。

如,在二分类问题中,SVM的目标是找到一个最优的超平面(即决策边界),该平面能够将数据集中的正负类样本分开,下面都以二分类问题为例说明:

支持向量机的几个概念:

  • 超平面(Hyperplane) : 超平面将数据空间分割成两个部分。在二维空间中,超平面是一条直线;在三维空间中,超平面是一个平面;在高维空间中,超平面是一个维度比数据空间少1的超平面。对于一个二维空间中的分类问题,SVM的任务就是找到一个直线(超平面),将正负类样本分开。

  • 最大化间隔: SVM的关键思想是最大化分隔正负类的间隔。间隔是指从数据点到超平面的垂直距离。在SVM中,支持向量是距离决策边界最近的那些点,这些点决定了超平面的最优位置。假设我们的数据点有两个类别,+1 和 -1 类,我们希望找到一个超平面,使得这个平面把两类数据完全分开,并且两类数据到超平面的距离最大。

细节我有点看不懂了。。。。

SVM实例+可视化:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 创建线性可分数据集
def generate_linear_data():
    # 使用sklearn生成一个线性可分的数据集
    X, y = datasets.make_classification(n_samples=200, n_features=2, n_informative=2,
                                         n_redundant=0, n_clusters_per_class=1, class_sep=2)
    return X, y

# 创建非线性可分数据集
def generate_nonlinear_data():
    # 使用sklearn生成一个非线性可分的数据集
    # 它生成的是一个包含两个类别的数据集,其中样本数据分布在两个同心圆形状的区域内
    X, y = datasets.make_circles(n_samples=200, noise=0.1, factor=0.5)
    return X, y

# 绘制SVM的决策边界
def plot_decision_boundary(X, y, clf):
    h = 0.02  # 网格间距
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)

    plt.contourf(xx, yy, Z, alpha=0.3)
    plt.scatter(X[:, 0], X[:, 1], c=y, marker='o', edgecolors='k', s=50)
    plt.title("SVM Decision Boundary")
    plt.show()

# 训练并可视化SVM模型
def train_and_visualize(X, y, kernel_type='linear'):
    # 切分数据集为训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

    # 数据标准化
    scaler = StandardScaler()
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)

    # 初始化SVM分类器
    clf = SVC(kernel=kernel_type)
    
    # 训练SVM
    clf.fit(X_train, y_train)

    # 打印支持向量信息
    print(f"Number of support vectors: {len(clf.support_)}")

    # 可视化决策边界
    plot_decision_boundary(X_train, y_train, clf)

# 主函数
def main():
    # 1. 线性可分数据
    print("Training with linearly separable data...")
    X_linear, y_linear = generate_linear_data()
    train_and_visualize(X_linear, y_linear, kernel_type='linear')

    # 2. 非线性可分数据
    print("Training with non-linearly separable data...")
    X_nonlinear, y_nonlinear = generate_nonlinear_data()
    train_and_visualize(X_nonlinear, y_nonlinear, kernel_type='rbf')

if __name__ == "__main__":
    main()

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

MySQL有哪些高可用方案?

大家好,我是锋哥。今天分享关于【MySQL有哪些高可用方案?】面试题。希望对大家有帮助; MySQL有哪些高可用方案? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 高可用方案旨在确保数据库系统的高可靠性、低宕机时间、以及在硬件故障…

利用Docker分层构建优化镜像大小

合适docker镜像文件大小不仅影响容器启动效率,也影响资源占用效率。本文介绍如何利用分层方式构建docker镜像,采用多种方式避免镜像文件太大而影响性能。 Docker 镜像大小优化的重要性 资源利用效率 较小的镜像文件在存储和传输过程中占用更少的空间和带…

threejs——无人机概念切割效果

主要技术采用着色器的切割渲染,和之前写的风车可视化的文章不同,这次的切割效果是在着色器的基础上实现的,并新增了很多可调节的变量,兄弟们,走曲儿~ 线上演示地址,点击体验 源码下载地址,点击下载 正文 从图中大概可以看出以下信息,一个由线组成的无人机模型,一个由…

我的AI工具箱Tauri版-SpiderYtDlp油管视频多功能下载

本教程基于自研的AI工具箱Tauri版进行SpiderYtDlp油管视频多功能下载。 SpiderYtDlp油管视频多功能下载 是一款基于自研AI工具箱的全新解决方案,专为满足多场景需求的用户设计。工具集成了便捷的链接直接下载功能和强大的关键词模糊搜索下载功能,赋能创…

PyCharm如何导入库( 包 )

目录 1.在主界面中导库 2.用设置->项目安装库 2.1.使用右上方按钮 2.2.使用右下方Python解释器 3.使用左下角终端导库 1.在主界面中导库 在主界面输入导库后等待一会儿,会在那一行出现一个红色灯。 图1 红色灯 我们点击红色灯,会出现 图2 错误选…

Bananna Pi开源社区联合矽昌通信打造开源的低成本Wifi5路由器

香蕉派 BPI-Wifi5 路由器采用矽昌SF19A2890S2芯片方案设计。它是一款高性能无线路由器,适用于小微企业、家庭和其他网络环境。Banana Pi开源社区提供整体解决方案。所有代码开源,用户可以在上面自由开发自己的应用。 Banana Pi wifi5 路由器github代码: …

Spring Boot教程之二十五: 使用 Tomcat 部署项目

Spring Boot – 使用 Tomcat 部署项目 Spring Boot 是一个基于微服务的框架,在其中创建可用于生产的应用程序只需很少的时间。Spring Boot 建立在 Spring 之上,包含 Spring 的所有功能。如今,它正成为开发人员的最爱,因为它是一个…

scale index的计算

scale index定义 基本实现 需要注意,scale index的提出者分别构建了MATLAB和R语言的实现方式。 但是,需要注意,经过我向作者求证。 MATLAB编写的代码已经“过时了”,为了拥抱时代,作者构建了R语言包,名称为…

虚幻5描边轮廓材质

很多游戏内都有这种描边效果,挺实用也挺好看的,简单复刻一下 效果演示: Linethickness可以控制轮廓线条的粗细 这样连完,然后放到网格体细节的覆层材质上即可 可以自己更改粗细大小和颜色

【Java Nio Netty】基于TCP的简单Netty自定义协议实现(万字,全篇例子)

基于TCP的简单Netty自定义协议实现(万字,全篇例子) 前言 有一阵子没写博客了,最近在学习Netty写一个实时聊天软件,一个高性能异步事件驱动的网络应用框架,我们常用的SpringBoot一般基于Http协议&#xff0…

Ubuntu 20.04LTS 系统离线安装5.7.44mysql数据库

Ubuntu 20.04LTS 系统离线安装5.7.44mysql数据库 环境下载 MySQL 5.7.44 包安装标题检查服务是否启动成功遇到的问题登陆&修改密码&远程访问 环境 操作系统:Ubuntu 20.04.4 LTS 数据库:MySQL 5.7.34 内核版本:x86_64(amd…

后端-redis的使用

redis的服务端启动命令,打开redis的目录,输入cmd redis的客户端启动命令 设置redis密码 redis连接 指定ip地址的服务端,没设密码:redis-cli.exe -h localhost -p 6379 edis连接 指定ip地址的服务端,设置了密码:redis-cli.ex…

前端成长之路:CSS字体、文本属性和引入方式

本文主要介绍CSS的字体属性和文本属性,最后再介绍CSS在HTML中的引入方式。 CSS字体属性 CSS Fonts(字体)属性能用于定义字体系列属性,包括但不限于字体大小、粗细、字体样式等。 字体系列 在CSS中使用font-family属性定义文本…

基于windows环境使用nvm安装多版本nodejs

目录 前言 一、卸载node 二、nvm是什么? 三、nvm安装 1.官网下载 nvm 包 2. 安装nvm-setup.exe 3. 配置路径和下载镜像 4. 检查安装是否完成 四、 使用nvm安装node 五、修改npm默认镜像源为淘宝镜像 六、环境变量配置 1. 新建目录 2. 设置环境变量 七…

排序算法(2):选择排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 选择排序 选择排序每次从待排序序列中选出最小(或最大)的元素,将其放到序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素…

009-jvm-对象相关的概念

#案例: 对象的创建过程 初始化默认值 成员变量显示赋值 构造代码块的初始化 构造器中的初始化 jvm

【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.Verilog核心程序 4.开发板使用说明和如何移植不同的开发板 5.完整算法代码文件获得 1.算法仿真效果 本文是之前写的文章: 《基于FPGA的4FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR》 的…

20 go语言(golang) - gin框架安装及使用(一)

一、简介 Gin是一个用Go语言编写的高性能Web框架,专注于构建快速、可靠的HTTP服务。它以其速度和简洁性而闻名,非常适合用于开发RESTful API。 高性能:Gin使用了httprouter进行路由管理,这是一个轻量级且非常快速的HTTP请求路由器…

检查读取数据寄存器输出的多扇出

为使第二寄存器被 RAM 原语吸收,来自存储器阵列的数据输出位的扇出必须为 1 。这在下图中进行了说明。 检查地址 / 读取数据寄存器上的复位信号 不应复位存储器阵列。只有 RAM 的输出可以容许复位。复位必须是同步的,以便将输出寄存器推断到 RAM 基元…

rk3588-ubuntu22.04系统网关实现路由器功能:

rk3588-ubuntu22.04系统网关实现路由器功能: 场景需求描述: 需求背景: 场景一:通过网线eth0/(路由器wlan0)访问外网: 如果网关 和 设备所处的环境可以通过网线联网或者路由器联网,那么不需要将网关配置成…