Python | 使用SVM支持向量机进行鸢尾花分类
运行环境
Python: 3.7.1
库: sklearn (Python的机器学习工具箱)
目的:
根据鸢尾花的四个特征,对三种鸢尾花进行分类
数据(共150行,这里截取前6行,完整数据以及代码的下载链接见文末):
方法:调用内部SVM库进行鸢尾花分类
| 特征1 | 特征2 | 特征3 | 特征4 | 鸢尾花类型 |
|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
| 4.9 | 3 | 1.4 | 0.2 | Iris-setosa |
| 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
| 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
| 5 | 3.6 | 1.4 | 0.2 | Iris-setosa |
| 5.4 | 3.9 | 1.7 | 0.4 | Iris-setosa |
代码如下:
from sklearn.model_selection import train_test_split
from sklearn import svm
data_Set = []
data_Set_x = []
data_Set_y = []
#打开数据集,字符串前加r表示raw string,防止路径字符串中存在的反斜杠带来的转义
data_file = open(r"D:\\Coding\\Py\\Machine-Learning\\SVM_OLD\\Data_SVM.csv")
#拆分数据集,取前四列为x,第五列为y
for line in data_file.readlines():
lineArr = line.strip().split(',')
data_Set.append(lineArr)
data_Set_x.append(lineArr[0:4])
data_Set_y.append(lineArr[4])
#按照7:3的比例分割训练集和测试集
data_train_x, data_test_x = train_test_split(data_Set_x,
test_size=0.3,
random_state=55)
data_train_y, data_test_y = train_test_split(data_Set_y,
test_size=0.3,
random_state=55)
"""
分别利用四种核函数进行训练,这些核函数都可以设置参数,例如
decision_function_shape='ovr'时,为one v rest,即一个类别与其他类别进行划分,
decision_function_shape='ovo'时,为one v one,即将类别两两之间进行划分,用二分类的方法模拟多分类的结果。
不设置的话会使用默认参数设置
"""
#使用linear线性核函数,C越大分类效果越好,但是可能过拟合
clf1 = svm.SVC(C=1, kernel='linear',
decision_function_shape='ovr').fit(data_train_x, data_train_y)
#使用rbf径向基核函数,gamma值越小,分类界面越连续;gamma值越大,分类界面越“散”,分类效果越好,但有可能会过拟合。
clf2 = svm.SVC(C=1, kernel='rbf', gamma=1).fit(data_train_x, data_train_y)
#使用poly多项式核函数
clf3 = svm.SVC(kernel='poly').fit(data_train_x, data_train_y)
#使用sigmoid神经元激活核函数
clf4 = svm.SVC(kernel='sigmoid').fit(data_train_x, data_train_y)
#打印使用不同核函数进行分类时,训练集和测试集分类的准确率
print("linear线性核函数-训练集:", clf1.score(data_train_x, data_train_y))
print("linear线性核函数-测试集:", clf1.score(data_test_x, data_test_y))
print("rbf径向基核函数-训练集:", clf2.score(data_train_x, data_train_y))
print("rbf径向基函数-测试集:", clf2.score(data_test_x, data_test_y))
print("poly多项式核函数-训练集:", clf3.score(data_train_x, data_train_y))
print("poly多项式核函数-测试集:", clf3.score(data_test_x, data_test_y))
print("sigmoid神经元激活核函数-训练集:", clf4.score(data_train_x, data_train_y))
print("sigmoid神经元激活核函数-测试集:", clf4.score(data_test_x, data_test_y))
# 使用decision_function()可以查看决策函数
print(clf1.decision_function(data_train_x))
# 使用predict()可以查看预测结果
print(clf1.predict(data_train_x))
运行结果:
- 分类准确率
linear线性核函数-训练集: 1.0
linear线性核函数-测试集: 0.9555555555555556
rbf径向基核函数-训练集: 0.9904761904761905
rbf径向基函数-测试集: 0.9555555555555556
poly多项式核函数-训练集: 1.0
poly多项式核函数-测试集: 0.9333333333333333
sigmoid神经元激活核函数-训练集: 0.34285714285714286
sigmoid神经元激活核函数-测试集: 0.3111111111111111
- 决策函数(仅截取部分,每一列的值代表到各类别的举例)
[[-0.18006398 1.06550708 2.1145569 ]
[-0.2266221 1.07558987 2.15103223]
[-0.16806693 1.08720057 2.08086637]
[ 2.07795355 1.29285195 -0.3708055 ]
[-0.18840558 1.05553666 2.13286892]
[-0.20384 1.10258546 2.10125453]
- 分类结果(仅截取部分)
['Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-setosa'
'Iris-virginica' 'Iris-virginica' 'Iris-setosa' 'Iris-versicolor'
'Iris-virginica' 'Iris-versicolor' 'Iris-setosa' 'Iris-setosa'
代码以及数据集下载:
链接:https://pan.baidu.com/s/1iZo472Ynvav0mQK3VvpJFQ
提取码:ovri
参考文章:
Python | 使用SVM支持向量机进行鸢尾花分类的更多相关文章
- Python实现SVM(支持向量机)
Python实现SVM(支持向量机) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=>end ...
- python机器学习——SVM支持向量机
背景与原理: 支持向量机是一种用来解决分类问题的算法,其原理大致可理解为:对于所有$n$维的数据点,我们希望能够找到一个$n$维的直线(平面,超平面),使得在这个超平面一侧的点属于同一类,另一侧的点属 ...
- 机器学习之路: python k近邻分类器 KNeighborsClassifier 鸢尾花分类预测
使用python语言 学习k近邻分类器的api 欢迎来到我的git查看源代码: https://github.com/linyi0604/MachineLearning from sklearn.da ...
- python构建bp神经网络_鸢尾花分类(一个隐藏层)__2.代码实现
IDE:jupyter 数据集请查看:鸢尾花数据集 测试效果预览 成功率96.7% 代码已上传到码云
- python构建bp神经网络_鸢尾花分类(一个隐藏层)__1.数据集
IDE:jupyter 目前我知道的数据集来源有两个,一个是csv数据集文件另一个是从sklearn.datasets导入 1.1 csv格式的数据集(下载地址已上传到博客园----数据集.rar) ...
- pytorch解决鸢尾花分类
半年前用numpy写了个鸢尾花分类200行..每一步计算都是手写的 python构建bp神经网络_鸢尾花分类 现在用pytorch简单写一遍,pytorch语法解释请看上一篇pytorch搭建简单网 ...
- [Python]基于K-Nearest Neighbors[K-NN]算法的鸢尾花分类问题解决方案
看了原理,总觉得需要用具体问题实现一下机器学习算法的模型,才算学习深刻.而写此博文的目的是,网上关于K-NN解决此问题的博文很多,但大都是调用Python高级库实现,尤其不利于初级学习者本人对模型的理 ...
- python机器学习之支持向量机SVM
支持向量机SVM(Support Vector Machine) 关注公众号"轻松学编程"了解更多. [关键词]支持向量,最大几何间隔,拉格朗日乘子法 一.支持向量机的原理 Sup ...
- SVM 支持向量机算法-实战篇
公号:码农充电站pro 主页:https://codeshellme.github.io 上一篇介绍了 SVM 的原理和一些基本概念,本篇来介绍如何用 SVM 处理实际问题. 1,SVM 的实现 SV ...
- 动手造轮子自己实现人工智能神经网络(ANN),解决鸢尾花分类问题Golang1.18实现
人工智能神经网络( Artificial Neural Network,又称为ANN)是一种由人工神经元组成的网络结构,神经网络结构是所有机器学习的基本结构,换句话说,无论是深度学习还是强化学习都是基 ...
随机推荐
- 企业ERP和泛微OA集成场景分析
轻易云数据集成平台(qeasy.cloud)为企业ERP和泛微OA系统提供了强大的互通解决方案,特别在销售.采购和库存领域的单据审批场景中表现出色.这些场景涉及到多个业务单据的创建和审批,以下是一些具 ...
- 【外包杯】【报错】微信小程序 “[app.json 文件内容错误]app.json:未找到[“pages”][0]对应 pages/xx/xx.wxml(或其他)文件” 报错 的简单解决方案(已解决)
问题的解决方案 删除components目录下的uni-link文件夹
- 基于python的Linux服务器资源监控
介绍 项目地址: https://github.com/leeyoshinari/performance_monitor 已完成如下功能 1.监控整个服务器的CPU使用率.io wait.内存使用.磁 ...
- redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
大家如果对使用netty搞这些http请求什么的感兴趣的,可以参观我自己创建的这个项目. nanshaws/nettyWeb: 复习一下netty,并打算做一个web项目出来 (github.com) ...
- CoreFlex框架发布 `0.1.1`
CoreFlex框架发布 0.1.1 框架描述 CoreFlex是一个支持.NET 6,.NET 7,.NET 8的快速开发框架,也提供MasaFramework相关框架的集成提供更多功能模块, 集成 ...
- [ABC274F] Fishing
Problem Statement On a number line, there are $N$ fish swimming. Fish $i$, which has a weight of $W_ ...
- MybatisPlus属性自动填充
阿里巴巴开发规范,对于每一张表都因该有id(主键),createTime(创建时间),updateTime(修改时间)这三个字段 主键ID我们可以使用自增,或者雪花算法 创建时间修改时间我们可以使用数 ...
- 【Python】【ChatGPT】本地部署ChatGPT学习记录
学习一下GPT项目的相关使用和部署 一.GPT4ALL模型 Github:https://github.com/nomic-ai/gpt4all GPT4ALL项目部署简易,但是在运行体验上一般,并且 ...
- Kafka干货之「零拷贝」
一.背景 周所周知,Kafka是一个非常成熟的消息产品,开源社区也已经经历了多年的不断迭代,特性列表更是能装下好几马车,比如:幂等消息.事务支持.多副本高可用.ACL.Auto Rebalance.H ...
- Github 星标 8K+ 这款国人开源的 Redis 可视化管理工具,真香...
做程序员就少不了与一些工具打交道,比如:监控工具.管理工具等,有些工具是命令行界面,有些工具是可视化界面,反正都是可以能够满足日常使用的功能需求. 对于redis管理工具来说,也有不少可能的产品,比如 ...