SVC分类经典Iris数据集

2023-10-27

今天做了一个用SVC分类经典Iris数据集的训练。
在数据预处理上出了点奇怪的岔子,对原始数据中的string转到float这步一直不成功,转换函数没错,用的是load.txt里面的converters,一直报错。但是被我机智(愚蠢)地手动处理完了,在csv文件里面用excel编辑直接手动批量转换,再导出txt。
其他步骤基本上按部就班。

import numpy as np
import pandas as pd
import sklearn.model_selection as sm
from sklearn.svm import SVC
import matplotlib as mpl


def iris_type(s):
    it = {b'Iris-setosa': 0, b'Iris-versicolor': 1, b'Iris-virginica': 2}
    return it[s]


path = '/Users/zj/Desktop/Iris数据集/iris3.txt'
data = np.loadtxt(path, dtype=float, delimiter=',')
# 用np.loadtxt('路径', dtype=数据类型, delimiter='分隔符')导入数据
print(data)

x, y = np.split(data, (4,), axis=1)
# 用np.split(数据集,(分割位置,),axis=1(水平分割)或者0(垂直分割))
print(x, y)
x_train, x_test, y_train, y_test = sm.train_test_split(x, y, random_state=1, train_size=0.6)
# 格式:x_train, x_test, y_train, y_test(四个顺序不能变) = sklearn,model_selection.train_test_split(x训练特征数据集,y训练结果数据集,random_state=随机种子,train_size=训练集占比)

clf = SVC(C=0.1, kernel='linear', decision_function_shape='ovr')
# clf = SVC(C=0.1, kernel='rbf', decision_function_shape='ovr')
# 用clf=SVC()做训练器,C越大训练越精确但是容易overfit,kernel=''就是训练的核函数,默认rbf高斯核,linear为线性核,decision_function_shape='ovo或ovr',ovo就是one vs one,一对一分类,ovr就是one vs other,一对多分类
clf.fit(x_train, y_train)
# 训练器.fit(训练特征数据集,训练结果数据集)

print('在训练集上的精度:', clf.score(x_train,y_train))
# clf.score(测试集,目标结果)得到用clf在测试集上分类得到的结果和目标结果相比的精度,这里得到的是用训练集训练出来的clf在训练集上的精度
y_hat = clf.predict(x_train)
# 用clf.predict(训练集)得到clf在该训练集上的分类结果,一般用y_hat表示
print(clf.score(x_train, y_hat))
# clf在x_train上分类出来的结果就是y_hat,目标结果也是y_hat所以精度当然是百分百
print('测试集上的精度', clf.score(x_test,y_test))

结果如下:

在这里插入图片描述

下面对结果绘图

用法见代码中备注,很详细:

x1_min, x1_max = x[:, 0].min(), x[:, 0].max()
# 这里指的是x1取x数据库里面第0列的数据(也就是第一个属性值),用x[:,0].min()取第0列数据里面的最小值,:冒号放在行的位置的意思就是取所有行
x2_min, x2_max = x[:, 1].min(), x[:, 1].max()
x1, x2 = np.mgrid[x1_min:x1_max:200j, x2_min:x2_max:200j]
# np.mgrid的用法见另一篇博客,这里相当于在x1的min和max之间分了200份,x2也是,分别表示两个二维坐标
# np.mgrid和np.linspace、np.meshgrid很像,以后了解

grid_test = np.stack((x1.flat, x2.flat), axis=1)
# np.stack(arras,axis=)将x1和x2推在一起得到二维坐标集
grid_hat = clf.predict(grid_test)
# 将grid_test坐标集(属性值)输入到clf中分类,得到输出y(花类别)
grid_hat = grid_hat.reshape(x1.shape)
# array1.reshape(array2.shape)将array1转化成array2的shape,便于画图

cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
# 预先设定好颜色,做色卡,色卡=mpl.colors.ListedColormap(['颜色1','颜色2'...])

plt.pcolormesh(x1, x2, grid_hat, cmap=cm_light)
# plt.pcolormesh(x1,x2,分类结果, cmap=颜色)用于自动画分色块分类图,x1和x2分别为横纵坐标为分类依据(但是该函数本身不具有分类功能),自动用cmap给的颜色给图像(x1-x2)依据分类结果分色块。

plt.scatter(x[:, 0], x[:, 1], c=y, edgecolors='k', s=50, cmap=cm_dark)
plt.xlabel(u'length', fontsize=13)
plt.ylabel(u'width', fontsize=13)
plt.xlim(x1_min, x1_max)
# 设定坐标轴区间范围,plt.xlim(始值,终值)
plt.ylim(x2_min, x2_max)
plt.title(u'iris SVM', fontsize=15)
# 常规plt画点图将数据点画出来
plt.show()

结果如下:
在这里插入图片描述

其中用到了np.grid和np.stack函数,我特意查了一下用法见另一篇博客:https://blog.csdn.net/weixin_46813313/article/details/113117583

总结:

  • 用plt.pcolormesh画色块分类图很实用。
  • 用np.grid和np.stack做坐标集几乎是所有数据绘图必备,原理要理解:
    1. 取出数据集各属性的max和min
    2. 在各属性max和min里面取样,grid,注意同shape
    3. 将各属性取得的样本值stack起来形成坐标(input)
    4. 将坐标带入clf,得到output
    5. 将output reshap成和属性一样, 作为另一个维
    6. 将input的各属性作为轴(横、纵),设置坐标轴范围,xlim和ylim
    7. 依据output绘图,用pcolormesh自动分类
    8. 再把样本点(input坐标)画上去
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVC分类经典Iris数据集 的相关文章

  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • servlet完整生命周期图

  • python 最小二乘平面拟合

    import numpy as np import matplotlib pyplot as plt from mpl toolkits mplot3d import Axes3D import math 从txt文档读取点 def rea
  • IGBT工作原理,解析IGBT工作原理及作用

    一 IGBT是什么 IGBT Insulated Gate Bipolar Transistor 绝缘栅双极型晶体管 是由BJT 双极型三极管 和MOS 绝缘栅型场效应管 组成的复合全控型电压驱动式功率半导体器件 兼有MOSFET的高输入阻
  • 学习Go语言中的文件操作函数并实现文件的压缩加密上传功能

    学习Go语言中的文件操作函数并实现文件的压缩加密上传功能 近年来 随着互联网的发展和数据的爆炸增长 文件的传输和存储变得越来越重要 在处理大量文件时 很多开发者可能会面临文件压缩 加密和上传的需求 而Go语言作为一门功能强大且高效的编程语言
  • 【转载】《IT经理世界》:腾讯的瓶颈

    腾讯网科技中心总监程苓峰曾在 IT经理世界 上发表过一篇文章 腾讯的瓶颈 通过与分析师对话的形式 分析了腾讯当前所面临发展瓶颈 并表示 在领先业务上 腾讯擅长的微创新没问题 但在一个新业务上面对领先对手 就需要革命式创新 微创新不管用 全文
  • Java基于百度API的图片文字识别

    使用之前需要获取对应的项目API KEY SECRET KEY 这些参数在使用API的时候必须用到 用于生成access token 如何获取这些参数 在百度开发者中心申请一个 通用文字识别 项目 然后就可以获取到这些参数 十分钟快速教程
  • gradle构建 程序包com.sun.image.codec.jpeg不存在,解决方法

    Gradle构建错误 程序包com sun image codec jpeg不存在 D Projects EclipseProjects JavaDog sample y2018 date0912 批量下载 DpiUtil java 12
  • 面试官:HashMap 为什么选用红黑树这种数据结构优化链表?

    文章目录 前言 自平衡二叉查找树 Self Balancing Binary Search Tree AVL 红黑树 R B Tree AVL与红黑树异同 应用场景 前言 关于HashMap的详解文章请移步 深度剖析HashMap一篇文章就
  • Linux--shell--3--()、(())、[]、[[]]、{}

    一 小括号 圆括号 1 单小括号 命令组 括号中的命令将会新开一个子shell顺序执行 所以括号中的变量不能够被脚本余下的部分使用 括号中多个命令之间用分号隔开 最后一个命令可以没有分号 各命令和括号之间不必有空格 命令替换 等同于cmd
  • 二级索引查询注意事项(2)--单表访问方法(三十七)

    前面说了explain参数的type代表访问数据库的方法 如果用主键和唯一二级索引 测试最快的const方法 若用普通索引 则是ref 还有ref or null range是代表区间查询 若用index则代表查询联合索引的非最左边索引 最
  • 3D建模Cocos Creator3D:发射器模块(ShapeModule)

    推荐 将 NSDT场景编辑器 加入你的3D工具链 3D工具集 NSDT简石数字孪生 发射器模块 ShapeModule 公有属性 属性 作用 position 相对于挂载节点的位置 rotation 相对于挂载节点的旋转 scale 相对于
  • 软件测试银行金融项目如何测?看看资深测试老鸟的总结,一篇足够...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • iOS GitHub上排名前 100 的 Objective-C 项目简介

    主要对当前 GitHub 排名前 100 的项目做一个简单的简介 方便初学者快速了解到当前 Objective C 在 GitHub 的情况 GitHub 地址 https github com Aufree trip to iOS blo
  • 关于Unity创建项目时进度栏一直不动的问题

    关于Unity创建项目时进度栏一直不动的问题 近日在使用UNity过程中 创建一个新项目时 一直在转圈圈 是魔力转圈圈 一时半解不知是何原因 因为没有任何的提示 没有找到报错 关闭UNity Hub后 再次重启仍然会有这个问题出现 看了看项
  • Flink1.16 on Yarn hadoop3.1.1 提交任务失败解决

    一 背景 项目基于华为 mrs 平台 hadoop3 1 1 想升级 flink client 客户端从 1 11 0 到 1 16 0 1 11 0 已经用了两年了 flink 已经发布到了1 17 增加了很多新特性 速度和稳定性都会更好
  • 二叉链表实现二叉树

    1 题目描述 编写一个二叉链表类 试写出求二叉树结点数目和二叉树叶子节点的数目 只要写二叉链表的前序输入 先序中序后序输出 求节点数目和求叶子节点数目的方法 2 设计思路 二叉树一般多采用二叉链表 binary linked list 存储
  • 【101】西门子S7-200说明介绍

    一 西门子S7 200概述 SIMATIC S7 200 Micro 自成一体 结构紧凑 性能良好 功能强大 多种通讯方案 并且具有操作简便的硬件和软件 当然还有更多特点 SIMATIC S7 200 Micro PLC具有统一的模块化设计
  • 程序员提高代码能力的方法看这一篇就够了

    程序员的代码能力其实不应该仅仅局限于代码本身 而是围绕写出好代码所需的综合能力 你可以从以下几个能力维度谈谈如何提高代码能力 一 计算机基础知识 作为程序员 需要具备以下计算机基础知识 1 数据结构和算法 这是编写高效代码的基础 程序员需要
  • NMOS和PMOS使用总结

    MOS管应用电压的极性和我们普通的晶体三极管相同 N沟道的类似NPN晶体三极管 漏极D接正极 源极S接负极 栅极G正电压时导电沟道建立 N沟道MOS管开始工作 同样P道的类似PNP晶体三极管 漏极D接负极 源极S接正极 栅极G负电压时 导电
  • SVC分类经典Iris数据集

    今天做了一个用SVC分类经典Iris数据集的训练 在数据预处理上出了点奇怪的岔子 对原始数据中的string转到float这步一直不成功 转换函数没错 用的是load txt里面的converters 一直报错 但是被我机智 愚蠢 地手动处