当前位置: 首页 > news >正文

闭着眼学机器学习——支持向量机分类

引言:
在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。


1. 算法介绍

支持向量机(Support Vector Machine, SVM) 是一种强大的监督学习算法,广泛应用于分类和回归问题。SVM的主要目标是找到一个最优的超平面,将不同类别的数据点分开,同时最大化类别之间的间隔。

SVM的主要特点包括:

  • 高效处理高维数据
  • 通过核技巧处理非线性问题
  • 泛化能力强
  • 对异常点具有鲁棒性

2. 算法原理

2.1 线性可分情况

对于线性可分的数据,SVM试图找到一个最优的超平面,使得:

  1. 正确分类所有训练样本
  2. 最大化分类间隔(即支持向量到超平面的距离)

数学表达式如下:

最大化: 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} w2
约束条件: y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , n y_i(w^Tx_i + b) \geq 1, i=1,2,...,n yi(wTxi+b)1,i=1,2,...,n

其中, w w w是超平面的法向量, b b b是偏置项, x i x_i xi是输入样本, y i y_i yi是类别标签。

2.2 非线性情况

对于非线性可分的数据,SVM使用核技巧将原始特征空间映射到高维空间,在高维空间中寻找线性分类边界。常用的核函数包括:

  • 多项式核: K ( x i , x j ) = ( x i T x j + c ) d K(x_i, x_j) = (x_i^T x_j + c)^d K(xi,xj)=(xiTxj+c)d
  • 高斯核(RBF): K ( x i , x j ) = e x p ( − γ ∣ ∣ x i − x j ∣ ∣ 2 ) K(x_i, x_j) = exp(-\gamma ||x_i - x_j||^2) K(xi,xj)=exp(γxixj2)
  • Sigmoid核: K ( x i , x j ) = t a n h ( a x i T x j + r ) K(x_i, x_j) = tanh(ax_i^T x_j + r) K(xi,xj)=tanh(axiTxj+r)

3. 案例分析: 鸢尾花分类

我们将使用著名的鸢尾花(Iris)数据集来演示SVM的应用。

我们使用了鸢尾花数据集中的花瓣长度和宽度作为特征,训练一个SVM分类器来区分三种不同的鸢尾花品种。我们使用RBF核函数,并通过可视化展示SVM的决策边界。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, auc
from sklearn.preprocessing import label_binarize
from itertools import cycle# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 加载数据
iris = datasets.load_iris()
X = iris.data[:, [0, 1]]  # 只使用花瓣长度和宽度
y = iris.target# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建SVM分类器
svm_classifier = svm.SVC(kernel='rbf', C=1.0, gamma='scale', probability=True)# 训练模型
svm_classifier.fit(X_train, y_train)# 预测
y_pred = svm_classifier.predict(X_test)# 计算准确率
accuracy = np.mean(y_pred == y_test)
print(f"准确率: {accuracy:.2f}")# 可视化决策边界
def plot_decision_boundary(X, y, model, ax=None):if ax is None:ax = plt.gca()x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, 0.02),np.arange(x2_min, x2_max, 0.02))Z = model.predict(np.c_[xx1.ravel(), xx2.ravel()])Z = Z.reshape(xx1.shape)ax.contourf(xx1, xx2, Z, alpha=0.4)ax.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)ax.set_xlabel('花瓣长度')ax.set_ylabel('花瓣宽度')return axplt.figure(figsize=(10, 8))
plot_decision_boundary(X, y, svm_classifier)
plt.title('SVM分类结果 - 鸢尾花数据集')
plt.show()

运行代码得到分类的准确率为0.8。
绘制分类结果如下:


接下来绘制分类的ROC曲线:

# 绘制ROC曲线
y_test_bin = label_binarize(y_test, classes=[0, 1, 2])
y_score = svm_classifier.predict_proba(X_test)fpr = dict()
tpr = dict()
roc_auc = dict()
n_classes = 3for i in range(n_classes):fpr[i], tpr[i], _ = roc_curve(y_test_bin[:, i], y_score[:, i])roc_auc[i] = auc(fpr[i], tpr[i])plt.figure(figsize=(10, 8))
colors = cycle(['blue', 'red', 'green'])
for i, color in zip(range(n_classes), colors):plt.plot(fpr[i], tpr[i], color=color, lw=2,label='ROC曲线 (类别 {0}) (AUC = {1:0.2f})'''.format(i, roc_auc[i]))plt.plot([0, 1], [0, 1], 'k--', lw=2)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('假正例率')
plt.ylabel('真正例率')
plt.title('多类别ROC曲线')
plt.legend(loc="lower right")
plt.show()

通过这个案例,我们可以看到SVM在多类别分类问题上的应用,以及它处理非线性决策边界的能力。SVM成功地将三种鸢尾花品种分开,并在测试集上取得了较高的准确率。

4. 总结

支持向量机是一种强大而灵活的机器学习算法,特别适合处理复杂的分类问题。通过核技巧,SVM可以有效地处理高维数据和非线性问题。然而,SVM也有一些局限性,如对大规模数据集的训练时间较长,以及核函数的选择和参数调优可能比较复杂。因此,在使用SVM时,需要根据具体问题和数据特点来权衡其优缺点。

相关文章:

闭着眼学机器学习——支持向量机分类

引言: 在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。 1. 算法介绍 支持向量机(Support Vector Mach…...

今日指数项目day8实战权限管理器(上)

3.权限管理器 3.1 权限列表展示功能 1)原型效果 2)接口说明 功能描述: 查询所有权限集合 服务路径: /api/permissions 服务方法:Get 请求参数:无响应数据格式: {"code": 1,"data":…...

《机器学习与数据挖掘综合实践》实训课程教学解决方案

一、引言 随着信息技术的飞速发展,人工智能已成为推动社会进步的重要力量。作为人工智能的核心技术之一,机器学习与数据挖掘在各行各业的应用日益广泛。本方案旨在通过系统的理论教学、丰富的实践案例和先进的实训平台,帮助学生掌握机器学习…...

linux中软连接和硬链接的区别

定义与概念 硬链接(Hard Link):硬链接是文件系统中的一个概念,它直接指向文件系统中的物理数据块。可以把硬链接看作是原始文件的一个别名,它们共享相同的inode(索引节点)编号。在Linux文件系统…...

#Swift 对比 Static 在Swift 和 OC中的用法

在 Objective-C 和 Swift 中,static 关键字都用于定义类型级别的成员,但它们的用法和行为在两个语言中有所不同。让我们来详细对比一下 Objective-C 和 Swift 中 static 的使用方式和特性。 1. Objective-C 中的 static 在 Objective-C 中,…...

yakit使用教程(三,端口探测和指纹扫描)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言: 前文链接:yakit下载安装教程。 1.端口扫描的作用。 对目标端口进行扫描可以知道目标服务器开启了什么服务,以便于针对其所存在的服务展开…...

一维数组的引用

#define SIZE 5 int main(void) { int i 0; int arr[SIZE] { 86,85,85,896,45 };//同理五个数据只是偶然&#xff0c;可能会更多 //输入 for (i 0;i < SIZE;i) { printf("请输入你的第%d个值&#xff1a;",i1); scanf_s(&…...

Vue3 watch 监视属性

作用&#xff1a;监视数据的变化&#xff08;和Vue2中的watch作用一致&#xff09;特点&#xff1a;Vue3中的watch只能监视以下四种数据&#xff1a; ref定义的数据。reactive定义的数据。函数返回一个值&#xff08;getter函数&#xff09;。一个包含上述内容的数组。 我们在V…...

大数据-158 Apache Kylin 安装配置详解 集群模式启动

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

PHP商会招商项目系统一站式服务助力企业腾飞

商会招商项目系统——一站式服务&#xff0c;助力企业腾飞 &#x1f680;&#x1f4bc; &#x1f680; 开篇&#xff1a;企业成长的加速器&#xff0c;商会招商项目系统来袭 在竞争激烈的市场环境中&#xff0c;企业如何快速找到适合自己的发展路径&#xff0c;实现腾飞&…...

pnpm 和 npm

pnpm 和 npm 是 JavaScript 生态系统中常用的包管理工具&#xff0c;它们各自有不同的特性和优缺点。下面是这两者的详细比较&#xff1a; 1. 基本概念 npm (Node Package Manager)&#xff1a; 是 Node.js 的默认包管理器&#xff0c;提供安装、更新、卸载 JavaScript 包的功…...

笔试算法总结

文章目录 题目1题目2题目3题目4 题目1 使用 StringBuilder 模拟栈的行为&#xff0c;通过判断相邻2个字符是否相同&#xff0c;如果相同就进行删除 public class Main {public static String fun(String s) {if (s null || s.length() < 1) return s;StringBuilder builde…...

mybatisPlus对于pgSQL中UUID和UUID[]类型的交互

在PGSQL中&#xff0c;有的类型是UUID和UUID[]这种类型&#xff0c;在mybatis和这些类型交互的时候需要手动设置类型处理器才可以&#xff0c;这里记录一下类型处理器的设置 /*** UUID类型处理器*/ public class UUIDTypeHandler extends BaseTypeHandler<UUID> {/*** 获…...

vue3 高德地图标注(飞线,呼吸点)效果

装下这两个 npm 忘了具体命令了&#xff0c;百度一下就行 “loca”: “^1.0.1”, “amap/amap-jsapi-loader”: “^1.0.1”, <template><div id"map" style"width: 100%;height: 100%;"></div> </template><script setup> …...

程序员成长秘籍:是迈向管理巅峰,还是深耕技术架构?

专业在线打字练习平台-巧手打字通&#xff0c;只输出有价值的知识。 一 管理和架构 做技术的同学一般有两条职业发展路径&#xff0c;横向的管理路线和纵向的技术路线。管理路线对应的是管理岗&#xff0c;讲究的是排兵布阵&#xff0c;通过各种资源的优化配置发挥价值。技术路…...

xargs的参数及常用命令

1. xargs 命令简介 xargs 是一个非常有用的工具&#xff0c;它用于从标准输入&#xff08;stdin&#xff09;构建和执行命令行。xargs 可以将标准输入中以空格或换行符分隔的数据&#xff0c;转化为命令的参数传递给其他命令。 使用场景&#xff1a; 当某些命令不支持使用管…...

FLASK 数据库建立以及部署和表的创建

首先安装flask-sqlalchemy db SQLAlchemy(app) 一 Mmeber、User模型类的创建 # coding: utf-8 from app import db, appclass Member(db.Model):__tablename__ memberid db.Column(db.Integer, primary_keyTrue)membername db.Column(db.String(100), uniqueTrue, index…...

微信小程序的面试题

简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(), wx.navigateBack(), wx.reLaunch() 区别 &#xff1f; wx.navigateTo() : 保留当前页面&#xff0c;跳转到应用内的某个页面。但是不能跳到 tabbar 页面 wx.redirectTo() : 关闭当前页面&#xff0c;跳转到应用内的…...

udp c语言实现组播的例子

一、组播与广播的区别 1、组播地址和广播地址是不同的概念 组播地址&#xff1a;用于将数据包发送到一组特定的接收者&#xff0c;只有加入该组播地址的设备才能接收数据。它提高了网络效率&#xff0c;因为发送者只需发送一份数据。 广播地址&#xff1a;用于将数据包发送到…...

ffmpeg面向对象——AVInputFormat与URLProtocol啥关系

《ffmpeg面向对象-rtsp拉流相关对象》和《ffmpeg面向对象——拉流协议匹配机制探索》探索过了输入格式匹配和底层协议匹配&#xff0c;且ffmpeg拉流是先是匹配输入格式——抽象为AVInputFormat类&#xff0c;然后再匹配url协议类——抽象为URLProtocol类。 它们是啥关系&#…...

TransPrompt:结构化提示词工程,提升LLM应用开发效率

1. 项目概述&#xff1a;当提示词工程遇上结构化工具最近在折腾大语言模型应用开发的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;如何高效、稳定地管理那些越来越复杂、越来越长的提示词&#xff08;Prompt&#xff09;。直接写在代码里&#xff1f;改起来麻烦&…...

dotAI:将AI能力环境化,打造可配置的智能开发工作流

1. 项目概述&#xff1a;当AI成为你的“数字管家”最近在GitHub上看到一个挺有意思的项目&#xff0c;叫udecode/dotai。乍一看这个标题&#xff0c;你可能和我最初的反应一样&#xff0c;有点摸不着头脑。dotai&#xff1f;是“点AI”的意思吗&#xff1f;它和.env文件那种“点…...

Midjourney极简艺术风格实战手册(2024V6.2最新适配版):含17个已验证失效词黑名单与8组高通过率--sref权重组合

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney极简艺术风格的核心定义与美学边界 极简艺术风格在 Midjourney 中并非单纯减少元素&#xff0c;而是通过语义压缩、形式提纯与负空间策略构建高度凝练的视觉语言。其核心在于以最少的视觉单元…...

gifuct-js:高性能JavaScript GIF解码器的架构设计与性能优化策略

gifuct-js&#xff1a;高性能JavaScript GIF解码器的架构设计与性能优化策略 【免费下载链接】gifuct-js Fastest javascript .GIF decoder/parser 项目地址: https://gitcode.com/gh_mirrors/gi/gifuct-js gifuct-js是一个专注于高效GIF文件解析与解码的JavaScript库&a…...

支持 SSML 标签,让配音精准控制语调与重音

&#x1f3af; 支持 SSML 标签&#xff0c;让配音精准控制语调与重音在文字转语音&#xff08;TTS&#xff09;应用中&#xff0c;机械感的读音往往缺乏情感。 顶伯文字转语音工具全面支持 SSML&#xff08;语音合成标记语言&#xff09; 标签&#xff0c;让您通过简单标记精准…...

使用taotoken聚合api后模型响应延迟的实际体感观察

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用taotoken聚合api后模型响应延迟的实际体感观察 作为一名日常需要调用多种大模型API的开发者&#xff0c;将多个供应商的API接入…...

量子计算优化Benders分解:减少量子比特与提升收敛效率

1. 量子辅助Benders分解框架概述混合整数线性规划(MILP)在供应链管理、金融优化和资源调度等领域有着广泛应用。传统Benders分解算法通过将原问题拆分为处理整数变量的主问题(MP)和处理连续变量的子问题(SP)进行迭代求解。然而&#xff0c;随着问题规模扩大&#xff0c;主问题的…...

Workerman-todpole 部署实战:Linux/Windows 环境配置与优化技巧 [特殊字符]

Workerman-todpole 部署实战&#xff1a;Linux/Windows 环境配置与优化技巧 &#x1f680; 【免费下载链接】workerman-todpole HTML5WebSocketPHP(Workerman) , rumpetroll server writen using php 项目地址: https://gitcode.com/gh_mirrors/wo/workerman-todpole Wo…...

盘点那些能让性能翻倍的C++现代特性

在C开发中&#xff0c;“性能”是压倒一切的核心诉求之一。虽然编译器在不断变聪明&#xff0c;但有些底层优化仍需开发者通过选用正确的语言特性来触发。今天这篇文章&#xff0c;我们就来盘点几个能给代码带来质跃式性能提升的 C 现代特性&#xff0c;并附带直观的代码示例。…...

H3C HCL模拟器实战:IS-IS单区域基础配置与排错指南

1. 实验目标与网络环境准备如果你正在学习网络路由协议&#xff0c;特别是运营商级网络常用的IS-IS&#xff0c;那么通过模拟器进行实操是绕不开的一步。这次我用H3C的HCL模拟器&#xff0c;带大家走一遍IS-IS单区域的基本配置。这个实验的目标很明确&#xff1a;不是让你死记硬…...