AI算法之怎么利用Python实现支持向量机SVM算法
ztj100 2025-06-15 20:40 28 浏览 0 评论
摘要:支持向量机(Support Vector Machine, SVM)是一种经典的机器学习算法,主要用于分类问题。其核心思想是找到一个“最佳分界线”(在高维空间中是一个“超平面”),将不同类别的数据尽可能地区分开,并且让这条分界线距离最近的数据点尽可能远一些,从而提升模型的泛化能力,也就是在新数据上的表现。
这篇文章深入浅出地讲解了SVM的工作原理,包括它如何处理两种不同类型的数据:一种是很容易用直线分开的“线性可分”数据,另一种是不能直接用直线分开的“线性不可分”数据。对于后者,文章介绍了两个关键方法:软间隔(允许部分数据点被误判以获得更好的整体分类效果)和核函数(将数据映射到更高维空间,使其变得线性可分)。此外,文章还介绍了它在文本分类、生物特征、图像识别等多个实际场景中的应用。
为了帮助读者更好地掌握SVM的实际使用,文中提供了Python实现SVM分类的程序示例。通过程序可以学习如何使用scikit-learn库加载数据、训练SVM模型、进行预测、调参优化,以及如何使用可视化结果进行模型性能的评估等内容。详细内容请参考下文。
一、检验AI大模型环境
1.访问Linux系统
2.查看Python和PyTorch开发环境
二、SVM支持向量机算法
1.SVM算法的定义
说明:在现实生活中,经常会遇到这样一些问题,比如:
- 人脸识别:用SVM识别“是张三”和“非张三”的图片。
- 医学诊断:根据医院的检查结果划分“健康”和“患病”。
- 垃圾邮件过滤:分界线左边是垃圾邮件,右边是正常邮件。
上述问题的解决办法可以归类为“最优分界线”方法,支持向量机SVM算法正是一种“找最优分界线”的算法,目标是既把类别分开,又让分界线离最近的样本尽可能远,同时只依赖少数关键样本(支持向量)。
定义:SVM支持向量机算法是一种基于统计学习理论和结构风险最小化原则的监督学习算法,主要用于分类和回归任务。其核心思想是寻找一个最优超平面,使得不同类别样本之间的间隔最大化,从而提高模型的泛化能力。
2.SVM算法的核心特点
SVM支持向量机算法的核心特点是:通过最大化分类间隔找到“最优分界线”,仅依赖少量支持向量,并利用核技巧处理非线性问题,兼具鲁棒性和泛化能力。
3.SVM算法的工作流程
(1)数据准备
收集并整理好带有标签的数据,比如每个样本属于哪一类。
(2)选择核函数
根据数据的特点选择合适的核函数。如果数据本身就可以用直线分开,可以用线性核;如果数据分布复杂,可以用RBF等非线性核。
(3)训练模型
用训练数据训练SVM模型,模型会自动找到最优的最优分界线。
(4)预测新数据
用训练好的模型对新数据进行分类,判断它属于哪一类。
(5)模型评估
通过准确率、召回率等指标评估模型的表现。
三、SVM支持向量机算法的应用领域
说明:SVM支持向量机算法与现实生活关系非常紧密,在很多实际领域都有广泛应用,主要因为SVM算法的分类直接,分类效果好、泛化能力强。
下面将分别介绍SVM的常见应用领域:
1. 文本分类
说明:SVM算法常用于垃圾邮件识别、新闻分类、情感分析等任务。
举例:邮箱系统可以使用SVM算法判断一封邮件是“垃圾邮件”还是“正常邮件”,帮助用户自动过滤垃圾邮件。
2. 生物特征
说明:SVM算法也常用于基因分类、蛋白质结构预测、疾病诊断等。
举例:医生用SVM分析基因表达数据,判断某个病人是否患有某种癌症,辅助医学诊断。
3. 图像识别
说明:SVM算法还可以用于手写数字识别、人脸识别、物体分类等。
举例:在手写数字识别中,SVM可以根据图片像素特征,把图片分为“0~9”这10类,实现自动识别邮政编码。
4. 语音识别
说明:SVM算法还可以用于语音信号的特征分类,比如说话人识别、语音命令识别等。
举例:智能音箱用SVM算法区分不同用户的声音,实现个性化服务。
5. 异常检测
说明:SVM算法也能用于检测异常数据,比如网络入侵检测、设备故障预警等。
举例:网络安全系统用SVM分析流量数据,及时发现异常访问,防止黑客攻击。
四、SVM支持向量机算法的应用实例
说明:以下是一个使用“Iris鸢尾花数据集”应用SVM分类的Python实例,包含数据加载、模型训练、评估及可视化的完整流程。
1. 准备数据
说明:下面实例将使用本地/opt/IrisDataset的鸢尾花数据集。
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import pandas as pd
# 1. 加载本地鸢尾花数据集(假设为CSV格式)
data = pd.read_csv('/opt/IrisDataset/iris.csv') # 路径和文件名请根据实际情况调整
X = data.iloc[:, :-1].values # 特征
y = data.iloc[:, -1].values # 标签
# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
2. 训练评估
说明:下面程序代码有关事项说明如下
SVC是scikit-learn中用于分类的SVM类;
kernel参数可以选择不同的核函数,如'linear'、'poly'、'rbf'等;
C是惩罚系数,控制容错能力;
gamma是RBF核的参数,影响决策边界的形状。
(1)执行指令# vim SVM_Iris.py编写SVM训练评估程序
(2)执行指令# python3 SVM_Iris.py运行SVM训练评估程序
备注:运行上述程序输出“准确率:1.0”,这说明程序中的SVM算法在本地鸢尾花数据集的测试集上预测结果完全正确,所有测试样本都被正确分类了。通俗解释为,准确率为1.0,也就是100%,表示模型在测试集上的表现非常好,没有出现任何分类错误。这通常说明数据集本身比较规范、特征区分度高,或者模型参数设置得比较合适。
3. 参数调优
说明:SVM的性能很大程度上依赖于参数的选择。常见的调优方法有
交叉验证和网格搜索两种。交叉验证是指用不同的参数组合多次训练和验证,选择表现最好的参数。而网格搜索则使用了scikit-learn提供的GridSearchCV工具,自动遍历参数组合,找到最优参数。
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.1, 1, 10], 'gamma': [1, 0.1, 0.01], 'kernel': ['rbf']}
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2)
grid.fit(X_train, y_train)
print("最优参数:", grid.best_params_)
4.实现可视化
说明:对于二维数据,可以直观的画出SVM的分割线和支持向量。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
# 生成简单的二维数据
X = np.array([[2, 2], [1, 1], [2, 0], [0, 0], [1, 0], [0, 1]])
y = [1, 1, 1, 0, 0, 0]
clf = svm.SVC(kernel='linear')
clf.fit(X, y)
# 绘制分割线
w = clf.coef_[0]
b = clf.intercept_[0]
x_plot = np.linspace(-1, 3)
y_plot = -(w[0] * x_plot + b) / w[1]
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.plot(x_plot, y_plot, 'k-')
plt.title('SVM分割线示意图')
plt.show()
5.完整实例
说明:这里引入本地鸢尾花数据集,并使用SVM算法对数据进行分类,然后实现可视化识别。
(1)执行指令# vim SVM_Iris.py编写SVM算法程序
(2)执行指令# Python3 SVM_Iris.py运行SVM算法程序
实现可视化功能如下
备注:上面可视化图片中不同颜色的散点直观展示了SVM模型对不同类别样本的分类结果,观察模型在特征空间中的分类边界和准确性。
不同颜色的散点说明如下:
- 每种颜色代表SVM模型预测的一个类别(如setosa、versicolor、virginica)。
- 同一颜色的散点表示这些样本被模型预测为同一类。
- 颜色的具体类别对应关系可以通过图例(legend)查看,例如红色代表setosa,蓝色代表versicolor,黄色代表virginica(实际颜色以图例为准)。
- 散点的分布情况反映了模型在二维特征空间下的分类效果,颜色分区越明显,说明模型分类效果越好。
相关推荐
- Linux集群自动化监控系统Zabbix集群搭建到实战
-
自动化监控系统...
- systemd是什么如何使用_systemd/system
-
systemd是什么如何使用简介Systemd是一个在现代Linux发行版中广泛使用的系统和服务管理器。它负责启动系统并管理系统中运行的服务和进程。使用管理服务systemd可以用来启动、停止、...
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
-
Linux系统日常巡检脚本,巡检内容包含了,磁盘,...
- 7,MySQL管理员用户管理_mysql 管理员用户
-
一、首次设置密码1.初始化时设置(推荐)mysqld--initialize--user=mysql--datadir=/data/3306/data--basedir=/usr/local...
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
-
1.1数据库的核心概念在开始Python数据库编程之前,我们需要先理解几个核心概念。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它就像一个电子化的文件柜,能让我们高效...
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
-
设置WGCloud开机自动启动服务init.d目录下新建脚本在/etc/rc.d/init.d新建启动脚本wgcloudstart.sh,内容如下...
- linux系统启动流程和服务管理,带你进去系统的世界
-
Linux启动流程Rhel6启动过程:开机自检bios-->MBR引导-->GRUB菜单-->加载内核-->init进程初始化Rhel7启动过程:开机自检BIOS-->M...
- CentOS7系统如何修改主机名_centos更改主机名称
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文将讲解CentOS7系统如何修改主机名。...
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
-
在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
-
为什么需要配置开机自启?想象一下:电商服务器重启后,MySQL和Nginx没自动启动,整个网站瘫痪!这就是为什么开机自启是Linux运维的必备技能。自启服务能确保核心程序在系统启动时自动运行,避免人工...
- Kubernetes 高可用(HA)集群部署指南
-
Kubernetes高可用(HA)集群部署指南本指南涵盖从概念理解、架构选择,到kubeadm高可用部署、生产优化、监控备份和运维的全流程,适用于希望搭建稳定、生产级Kubernetes集群...
- Linux项目开发,你必须了解Systemd服务!
-
1.Systemd简介...
- Linux系统systemd服务管理工具使用技巧
-
简介:在Linux系统里,systemd就像是所有进程的“源头”,它可是系统中PID值为1的进程哟。systemd其实是一堆工具的组合,它的作用可不止是启动操作系统这么简单,像后台服务...
- Linux下NetworkManager和network的和平共处
-
简介我们在使用CentoOS系统时偶尔会遇到配置都正确但network启动不了的问题,这问题经常是由NetworkManager引起的,关闭NetworkManage并取消开机启动network就能正...
你 发表评论:
欢迎- 一周热门
-
-
MySQL中这14个小玩意,让人眼前一亮!
-
旗舰机新标杆 OPPO Find X2系列正式发布 售价5499元起
-
面试官:使用int类型做加减操作,是线程安全吗
-
C++编程知识:ToString()字符串转换你用正确了吗?
-
【Spring Boot】WebSocket 的 6 种集成方式
-
PyTorch 深度学习实战(26):多目标强化学习Multi-Objective RL
-
pytorch中的 scatter_()函数使用和详解
-
与 Java 17 相比,Java 21 究竟有多快?
-
基于TensorRT_LLM的大模型推理加速与OpenAI兼容服务优化
-
这一次,彻底搞懂Java并发包中的Atomic原子类
-
- 最近发表
-
- Linux集群自动化监控系统Zabbix集群搭建到实战
- systemd是什么如何使用_systemd/system
- Linux服务器日常巡检脚本分享_linux服务器监控脚本
- 7,MySQL管理员用户管理_mysql 管理员用户
- Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门
- Linux自定义开机自启动服务脚本_linux添加开机自启动脚本
- linux系统启动流程和服务管理,带你进去系统的世界
- CentOS7系统如何修改主机名_centos更改主机名称
- 前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令
- Linux开机自启服务完全指南:3步搞定系统服务管理器配置
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)