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

机器学习——支持向量机(SVM)

在这里插入图片描述

1.线性支持向量机

1.1数学模型

在这里插入图片描述
机器学习最终都是求解目标函数的最优问题;
一般都是讲问题转化为最小值来求解。

数学模型获得是一个不等式约束的最小化问题,求解时可通过构建拉格朗日函数求解。

1.2 拉格朗日函数及对偶问题求解

在这里插入图片描述

1.3 SMO算法求解

SMO算法:参考:https://zhuanlan.zhihu.com/p/29212107
KKT条件:参考:https://zhuanlan.zhihu.com/p/556832103

2.带松弛因子的SVM——软间隔

在这里插入图片描述

3.非线性支持向量机

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

4.Python代码

4.1 SVM常见的几种模型

1.SVC,(分类问题)
2.SVR,(回归问题)
3.LinearSVC
4.LinearSVR
5…其他等等

4.1数据集介绍

在这里插入图片描述
Iris.data中有5个属性,包括4个预测属性(萼片长度、萼片宽度、花瓣长度、花瓣宽度)和1个类别属性(Iris-setosa、Iris-versicolor、Iris-virginica三种类别)。首先,需要将第五列类别信息转换为数字,再选择输入数据和标签。

from sklearn import datasets #导入数据集模块
from sklearn.model_selection import train_test_split #数据集划分
from sklearn import svm  #导入SVM支持向量机
from sklearn.metrics import classification_report   #用于显示主要分类指标的文本报告
import sklearn.metrics as sm #生成混淆矩阵的库
import seaborn as sn  #混淆矩阵可视化的库
import matplotlib.pyplot as plt #画图
#--------------------------------1.加载数据集---------------------------------#
iris = datasets.load_iris()#加载鸢尾花数据集
print(iris)
X = iris.data #输入特征
Y = iris.target #标签(输出特征)
print(X)
print('----------------')
print(Y)
print('----------------')
print('鸢尾花输入特征的维度是{}'.format(X.shape))
print('鸢尾花标签的维度是{}'.format(Y.shape))

#--------------------------------2.划分数据集---------------------------------#
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=45) # 数据划分
#--------------------------------3.模型训练---------------------------------#
clas = svm.SVC()#选择分类器
clas.fit(X_train,Y_train)#训练
#--------------------------------4.模型预测---------------------------------#
Y_pre=clas.predict(X_test)#预测测试集

#--------------------------------5.性能评估---------------------------------#
m = sm.confusion_matrix(Y_test, Y_pre) #生成混淆矩阵
print('混淆矩阵为:', m, sep='\n')
ax = sn.heatmap(m,annot=True,fmt='.20g')
ax.set_title('confusion matrix')
ax.set_xlabel('predict')
ax.set_ylabel('true')
plt.show() #混淆矩阵可视化
print("测试集准确率:%s"%clas.score(X_test,Y_test))   #输出测试集准确度
print("分析报告:",classification_report(Y_test,Y_pre))#生成分类报告

参考:https://blog.csdn.net/weixin_45450828/article/details/133923250?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-133923250-blog-132173815.235%5Ev38%5Epc_relevant_sort_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-133923250-blog-132173815.235%5Ev38%5Epc_relevant_sort_base1&utm_relevant_index=5


http://www.kler.cn/a/156826.html

相关文章:

  • Go语言 实现将中文转化为拼音
  • Mysql数据库里的SSH连接
  • 学习记录:js算法(九十二):克隆图
  • 今日 AI 简报 | 开源 RAG 文本分块库、AI代理自动化软件开发框架、多模态统一生成框架、在线图像背景移除等
  • 【Webpack实用指南】如何拆分CSS资源(2)
  • MySql结合element-plus pagination的分页查询
  • 支持PDF文档开发处理,Aspose.PDF升级至最新23.11,一起来看
  • 【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】
  • YOLOv5结合BiFPN,如何替换YOLOv5的Neck实现更强的检测能力?
  • 开启全新消费革命——消费增值,让每一笔消费变成财富!
  • CVE-2016-2510CVE-2017-5586 BeanShell漏洞
  • 网络层之IP数据报格式、数据报分片、IPv4、子网划分和子网掩码
  • 【ACM独立出版、确定的ISBN号】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)
  • git 提交文件过大 解决办法
  • 【C++】赋值运算符重载
  • Java中线程池相关的七个参数
  • 22、为什么是卷积?
  • 二叉树题目:二叉树的完全性检验
  • 浅谈安科瑞无线测温设备在挪威某项目的应用
  • Jupiter notebook使用
  • 力扣3题 无重复字符的最长子串 双指针(滑动窗口)
  • python监控显卡显存
  • 基于yolov8-道路裂缝检测
  • zsh配置自定义快捷命令
  • 深度学习记录--初识向量化
  • 【C++ regex】C++正则表达式