机器学习支持向量机(SVM)算法

news2024/12/14 3:04:35

一、引言

在当今数据驱动的时代,机器学习算法在各个领域发挥着至关重要的作用。支持向量机(Support Vector Machine,SVM)作为一种强大的监督学习算法,以其在分类和回归任务中的卓越性能而备受瞩目。SVM 具有良好的泛化能力,能够在小样本数据上取得出色的效果,并且对于高维数据和非线性问题也有有效的解决方案。本文将深入探讨支持向量机算法的原理,并结合实际案例展示其在不同领域的应用。

二、支持向量机的基本原理

线性可分问题

  • 对于一个二分类问题,如果存在一个超平面能够将不同类别的样本完全分开,那么这个问题就是线性可分的。例如,在二维空间中,一条直线可以将两类点分开;在三维空间中,一个平面可以将两类点分开。
  • 设样本集为 ,其中 是样本的特征向量, 是样本的类别标签。如果存在一个超平面 ,使得对于所有的正例样本 ,有 ;对于所有的负例样本 ,有 ,那么这个超平面就可以将两类样本完全分开。

最大间隔超平面

  • SVM 的目标是找到一个最优的超平面,使得两类样本之间的间隔最大。间隔是指超平面与最近的样本点之间的距离,而最大间隔超平面就是具有最大间隔的超平面。
  • 对于一个给定的超平面 ,样本点 到超平面的距离可以通过公式 计算。其中, 表示向量 的范数。
  • 对于线性可分的二分类问题,正例样本和负例样本到超平面的距离之和为 ,这个值被称为间隔。SVM 的目标就是找到一个超平面,使得间隔最大。
  • 可以通过求解以下优化问题来找到最大间隔超平面:

对偶问题

  • 引入拉格朗日乘子 ,构建拉格朗日函数:
  • 根据拉格朗日对偶性,原问题的对偶问题为:

核函数

  • 对于非线性问题,无法直接找到一个线性超平面将样本分开。此时,可以通过引入核函数将低维空间中的样本映射到高维空间,使得在高维空间中样本变得线性可分。
  • 设原始空间中的样本点 和 ,核函数 满足 ,其中 是将样本点 映射到高维空间的函数。
  • 在高维空间中,SVM 的优化问题可以表示为:

三、支持向量机的实战应用

数据准备

  • 首先,我们需要准备用于训练和测试的数据集。可以从公开的数据集中获取,也可以自己收集和整理数据。
  • 对于分类问题,数据集通常包含多个特征和一个类别标签。例如,在鸢尾花数据集(Iris dataset)中,每个样本有四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),类别标签有三种(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。
  • 在进行训练之前,需要对数据进行预处理,如数据清洗、特征选择、特征缩放等。
  • 数据清洗:去除数据中的噪声和异常值,确保数据的质量。
  • 特征选择:选择对分类任务有重要影响的特征,减少特征维度,提高算法的效率和性能。
  • 特征缩放:将特征值缩放到相同的范围,避免某些特征对算法的影响过大。常用的特征缩放方法有标准化(Standardization)和归一化(Normalization)。

模型训练

  • 使用 Python 中的 scikit-learn 库可以方便地实现支持向量机算法。
  • 首先,导入所需的库和模块:
from sklearn import svm

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score

import numpy as np
  • 然后,加载数据集并进行预处理:
# 加载数据集

data = np.loadtxt('data.csv', delimiter=',')

X = data[:, :-1]

y = data[:, -1]

# 特征缩放

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

X = scaler.fit_transform(X)

# 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • 接下来,创建支持向量机模型并进行训练:
# 创建支持向量机模型

clf = svm.SVC(kernel='linear', C=1.0)

# 训练模型

clf.fit(X_train, y_train)
  • 在创建模型时,可以选择不同的核函数和参数。例如,这里选择线性核函数,并设置参数 。参数 是惩罚参数,控制着模型的复杂度和对误分类样本的惩罚程度。较大的 值会使模型更加复杂,对误分类样本的惩罚更重,但可能会导致过拟合;较小的 值会使模型更加简单,对误分类样本的惩罚较轻,但可能会导致欠拟合。

模型评估

  • 训练完成后,我们可以使用测试集对模型进行评估。
  • 预测测试集的结果:
y_pred = clf.predict(X_test)
  • 计算模型的准确率:
accuracy = accuracy_score(y_test, y_pred)

print('Accuracy:', accuracy)
  • 除了准确率,还可以使用其他指标如精确率、召回率、F1 值等对模型进行评估。
  • 精确率(Precision):表示预测为正例的样本中真正的正例所占的比例。
  • 召回率(Recall):表示真正的正例被预测为正例的比例。
  • F1 值:是精确率和召回率的调和平均数,综合考虑了精确率和召回率的平衡。
  • 可以使用 scikit-learn 库中的 classification_report 函数来输出精确率、召回率和 F1 值等指标:
from sklearn.metrics import classification_report

print(classification_report(y_test, y_pred))

参数调优

  • SVM 的性能受到核函数和参数的影响,因此需要进行参数调优以获得最佳的性能。
  • 可以使用网格搜索、随机搜索等方法进行参数调优。
  • 网格搜索(Grid Search):在给定的参数范围内,对所有可能的参数组合进行穷举搜索,找到最佳的参数组合。
  • 随机搜索(Random Search):在给定的参数范围内,随机选择一些参数组合进行搜索,找到最佳的参数组合。
  • 例如,使用网格搜索进行参数调优:
from sklearn.model_selection import GridSearchCV

# 定义参数范围

param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf', 'poly'], 'degree': [2, 3], 'gamma': [0.1, 1, 10]}

# 创建支持向量机模型

clf = svm.SVC()

# 进行网格搜索

grid_search = GridSearchCV(clf, param_grid, cv=5)

grid_search.fit(X_train, y_train)

# 输出最佳参数

print('Best parameters:', grid_search.best_params_)

print('Best score:', grid_search.best_score_)
  • 这里定义了参数范围,包括惩罚参数 、核函数类型、多项式核函数的次数和高斯核函数的参数 。然后使用网格搜索在参数范围内寻找最佳的参数组合。网格搜索使用交叉验证(Cross Validation)来评估不同参数组合的性能,这里设置交叉验证的次数为 5。

应用案例

  • 支持向量机可以应用于各种领域,如图像识别、文本分类、生物信息学等。
  • 例如,在图像识别中,可以使用 SVM 对图像进行分类,识别不同的物体或场景。可以将图像的像素值作为特征向量,使用 SVM 进行分类。
  • 在文本分类中,可以将文本表示为向量,然后使用 SVM 对文本进行分类,如新闻分类、情感分析等。可以使用词袋模型(Bag of Words)或 TF-IDF 等方法将文本表示为向量。
  • 在生物信息学中,可以使用 SVM 对蛋白质结构进行预测、对基因表达数据进行分类等。可以将蛋白质的氨基酸序列或基因表达数据作为特征向量,使用 SVM 进行分类或回归。

四、总结

支持向量机是一种强大的机器学习算法,具有出色的分类和回归能力。本文深入探讨了支持向量机算法的原理,包括线性可分问题、最大间隔超平面、对偶问题和核函数。通过一个实战案例展示了支持向量机在数据准备、模型训练、模型评估和参数调优方面的应用。最后,介绍了支持向量机的应用领域,并给出了一些应用案例。希望本文能够帮助读者更好地理解和应用支持向量机算法。

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

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

相关文章

【热力学与工程流体力学】流体静力学实验,雷诺实验,沿程阻力实验,丘里流量计流量系数测定,局部阻力系数的测定,稳态平板法测定材料的导热系数λ

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

Ubuntu18安装后基本配置操作

1. 关掉自动更新 不关掉自动更新,会将你的ubuntu系统更新到更高版本,一些配置就不能用了,所以要关掉自动更新。在“软件和更新”中将“自动检查更新”设置为从不。 2. ubuntu换国内源 参考链接换源 按照这个换源这个换源好使 ,…

Faiss 要点整理

Faiss能干什么 使用glove.6b.txt在字典中找到近义词,基本步骤包括加载数据、构建索引、进行相似性搜索 import numpy as np import faiss# 加载 GloVe 词向量 def load_glove_embeddings(file_path):embeddings {}with open(file_path, r, encodingutf-8) as f:fo…

得物使用AutoMQ构建海量数据处理的新一代可观测性架构

引言 得物作为全球领先的潮流网购社区,日益增长的用户和数据带来了巨大的技术挑战。当前,得物的可观测性平台每天生成数PB级Trace数据和数万亿条Span记录,要求平台具备高效的实时处理能力和低成本的数据存储解决方案。 传统的存算一体架构将…

硬件成本5元-USB串口采集电表数据完整方案-ThingsPanel快速入门

ThingsPanel开源物联网平台支持广泛的协议,灵活自由,本文介绍ThingsPanel通过串口来采集电表数据,简单易行,成本低廉,适合入门者学习试验,也适合一些特定的应用场景做数据采集。 适用场景: 降低…

数据库同步中间件DBSyncer安装配置及使用

1、介绍 DBSyncer(英[dbsɪŋkɜː],美[dbsɪŋkɜː 简称dbs)是一款开源的数据同步中间件,提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务&#xf…

ragflow连ollama时出现的Bug

ragflow和ollama连接后,已经添加了两个模型但是ragflow仍然一直warn:Please add both embedding model and LLM in Settings > Model providers firstly.这里可能是我一开始拉取的镜像容器太小,容不下当前添加的模型,导…

python 下载 b站视频 和音频

video_bvid: import os import requests import json import re from bs4 import BeautifulSoup import subprocess # from detail_video import video_bvid# video_bvid 是一个从外部得到的单个视频ID video_bvid BV1cx421Q7veclass BilibiliVideoAudio:def __in…

时间敏感网络与工业通信的融合:光路科技电力专用交换机和TSN工业交换机亮相EP电力展

12月7日,第三十一届中国国际电力设备及技术展览会(EP Shanghai 2024)暨上海国际储能技术应用展览会在上海新国际博览中心圆满落幕。本届展会以“数字能源赋能新质生产力”为主题,系统地呈现了电力设备行业在技术融合、转型升级及上…

如何将CSDN的文章保存为PDF?

目录 1、打开CSDN文章2、按F12或者鼠标右键选择检查并进入控制台3、在控制台输入以下代码4、然后回车(Enter)如果纵向显示不全就横向 1、打开CSDN文章 2、按F12或者鼠标右键选择检查并进入控制台 3、在控制台输入以下代码 (function(){ $("#side&q…

android AIDL ipc binder转换

一. 概述 众所周知AIDL并不是所有的数据类型都可以传输。 可以传输的类型包括: 1.原生类型 2.String 3. CharSequence 4. List 5.Map 6. Binder 7. Parcelable 容器类 parcelable传输的时候会分解成成员,数组item的方式,传输完成后再进行…

JCR一区牛顿-拉夫逊优化算法+分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测

JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测 目录 JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.中科院…

解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

文章目录 解决:IDEA中Autowired自动注入MyBatis Mapper报红警告的几种解决方法问题描述:解决办法:1.将Autowired注解改成Resource2.给Autowired(required false)设置属性3.给Mapper层加注解Mapper/Repository4.改变写法,用RequiredArgsConst…

C语言-详细解答-重组字符串并16进制转10进制

1.题目要求 2.代码实现 #include <stdio.h> #include <ctype.h> #include <string.h>int hexToDec(char hex[]) {int len strlen(hex);int base 1;int dec 0;for (int i len - 1; i > 0; i--) {if (isdigit(hex[i])) {dec (hex[i] - 0) * base;} e…

sheng的学习笔记-AI-注意力模型(Attention Model)

Ai目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 先看下这两个文章&#xff1a; 序列模型&#xff1a;sheng的学习笔记-AI-序列模型&#xff08;Sequence Models&#xff09;&#xff0c;RNN,GRU,LSTM_音乐识别是一对多吗-CSDN博客 机器翻译 sheng的学习笔记-AI-自然语…

Arduino: Arduino IDE安装

目录 1.1 Arduino软件下载与安装 1.2 esp32_arduino的开发库安装 1.3 手动安装板支持包 1.1 Arduino软件下载与安装 Arduino官网下载地址&#xff1a;https://www.arduino.cc/en/software。 1.2 esp32_arduino的开发库安装 接下来安装esp32_arduino的开发库。 1.2.1 在线安…

在Ubuntu 22.04上搭建Kubernetes集群

Kubernetes 简介 什么是 Kubernetes&#xff1f; Kubernetes&#xff08;常简称为 K8s&#xff09;是一个强大的开源平台&#xff0c;用于管理容器化应用程序的部署、扩展和运行。它最初由 Google 设计并捐赠给 Cloud Native Computing Foundation&#xff08;CNCF&#xff0…

【ubuntu】将Chroma配置为LINUX服务

Chroma是一个轻量级向量数据库。既然是数据库&#xff0c;那么我希望它是能够长时间运行。最直接的方式是配置为service服务。 可惜官方没有去提供配置为服务的办法&#xff0c;而鄙人对docker又不是特别感冒。所以自己研究了下chroma配置为服务的方式。 系统&#xff1a;ubu…

【CSS in Depth 2 精译_071】11.4 思考字体颜色的对比效果 + 11.5 本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 11.2.2.1 RGB…

PHP:连接Grid++Report模板,实现循环打印

实现效果 模板 代码 cycle.php <html xmlns"http://www.w3.org/1999/xhtml"><head><title>Web报表(B/S报表)演示 - 不用报表插件展现报表而是直接输出</title><meta http-equiv"Content-Type" content"text/html; chars…