Python支持向量机(SVM)实例

2023-05-16

SVM(Support Vector Machine)指的是支持向量机,是常见的一种判别方法。在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别、分类以及回归分析。

Matlab中有林智仁编写的libsvm工具包可以很好地进行进行SVM训练。Python中我们有sklearn工具包来进行机器学习算法训练,Scikit-Learn库已经实现了所有基本机器学习的算法。

以下内容参考自https://www.cnblogs.com/luyaoblog/p/6775342.html的博客,并将原文中Python2的代码更新为Python3的代码。
更多python及机器学习内容请访问omegaxyz.com
下面以以Iris兰花数据集为例子:

由于从UCI数据库中下载的Iris原始数据集的样子是这样的,前四列为特征列,第五列为类别列,分别有三种类别Iris-setosa, Iris-versicolor, Iris-virginica。
这里写图片描述
需要使用numpy对其进行分割操作。

数据集下载地址:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/

下载iris.data即可。

Python3代码:

from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import colors
from sklearn.model_selection import train_test_split


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


path = 'C:\\Users\\dell\\desktop\\iris.data'  # 数据文件路径
data = np.loadtxt(path, dtype=float, delimiter=',', converters={4: iris_type})

x, y = np.split(data, (4,), axis=1)
x = x[:, :2]
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.6)

# clf = svm.SVC(C=0.1, kernel='linear', decision_function_shape='ovr')
clf = svm.SVC(C=0.8, kernel='rbf', gamma=20, decision_function_shape='ovr')
clf.fit(x_train, y_train.ravel())

print(clf.score(x_train, y_train))  # 精度
y_hat = clf.predict(x_train)

print(clf.score(x_test, y_test))
y_hat2 = clf.predict(x_test)

x1_min, x1_max = x[:, 0].min(), x[:, 0].max()  # 第0列的范围
x2_min, x2_max = x[:, 1].min(), x[:, 1].max()  # 第1列的范围
x1, x2 = np.mgrid[x1_min:x1_max:200j, x2_min:x2_max:200j]  # 生成网格采样点
grid_test = np.stack((x1.flat, x2.flat), axis=1)  # 测试点

mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False

cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])

grid_hat = clf.predict(grid_test)  # 预测分类值
grid_hat = grid_hat.reshape(x1.shape)  # 使之与输入的形状相同

alpha = 0.5
plt.pcolormesh(x1, x2, grid_hat, cmap=cm_light)  # 预测值的显示
plt.plot(x[:, 0], x[:, 1], 'o', alpha=alpha, color='blue', markeredgecolor='k')
plt.scatter(x_test[:, 0], x_test[:, 1], s=120, facecolors='none', zorder=10)  # 圈中测试集样本
plt.xlabel(u'花萼长度', fontsize=13)
plt.ylabel(u'花萼宽度', fontsize=13)
plt.xlim(x1_min, x1_max)
plt.ylim(x2_min, x2_max)
plt.title(u'SVM分类', fontsize=15)
plt.show()
  1. split(数据,分割位置,轴=1(水平分割) or 0(垂直分割))。

  2. x = x[:, :2]是为方便后期画图更直观,故只取了前两列特征值向量训练。

  3. sklearn.model_selection.train_test_split随机划分训练集与测试集。train_test_split(train_data,train_target,test_size=数字, random_state=0)

参数解释:

train_data:所要划分的样本特征集

train_target:所要划分的样本结果

test_size:样本占比,如果是整数的话就是样本的数量

random_state:是随机数的种子。

随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。

kernel=’linear’时,为线性核,C越大分类效果越好,但有可能会过拟合(defaul C=1)。
kernel=’rbf’时(default),为高斯核,gamma值越小,分类界面越连续;gamma值越大,分类界面越“散”,分类效果越好,但有可能会过拟合。

线性分类结果:
这里写图片描述
rbf核函数分类结果:
这里写图片描述
更多python及机器学习内容请访问omegaxyz.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python支持向量机(SVM)实例 的相关文章

  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • 在Python中不断寻找用户输入

    我将如何编写一个始终寻找用户输入的 Python 程序 我想我希望有一个等于输入的变量 然后根据该变量的等于值会发生不同的情况 因此 如果变量是 w 那么它将执行某个命令并继续执行 直到收到另一个输入 例如 d 然后会发生不同的情况 但直到
  • UnicodeDecodeError:“utf-8”编解码器无法解码位置 14 中的字节 0xb9:起始字节无效

    我正在使用 Django REST 进行文件上传测试 Python3 6 2Django1 11djangorest框架 3 6 4Excel OSX 15 38 170902 操作系统 10 12 6 过去使用普通照片文件可以成功完成此操
  • 测试交互式Python程序

    我想知道python的哪些测试工具支持交互式程序的测试 例如 我有一个由以下人员启动的应用程序 python dummy program py gt gt Hi whats your name Joseph 我想要仪器Joseph所以我可以
  • Pygame 让精灵按照给定的旋转行走

    很久以前我做了一个Scratch脚本 我想用Pygame将其转换为Python 有很多示例显示图像的旋转 但我想知道如何更改精灵的旋转以使其沿给定方向移动 而不更改图像 这是我的暂存代码 这是我的 Pygame 精灵类 class Star
  • Visual Studio Code:如何使用参数调试 Python 脚本

    我正在使用 Visual Studio Code 来调试 Python 脚本 下列的本指南 https code visualstudio com docs python debugging 我在中设置了参数launch json file
  • Pandas 在列级别连接数据帧时添加键

    根据 Pandas 0 19 2 文档 我可以提供keys参数来创建结果多索引 DataFrame 一个例子 来自 pandas 文档 是 result pd concat frames keys x y z 我将如何连接数据框以便我可以在
  • Seaborn regplot 中点和线的不同颜色

    中列出的所有示例西伯恩的regplot文档 https seaborn pydata org generated seaborn regplot html点和回归线显示相同的颜色 改变color争论改变了两者 如何为点设置与线不同的颜色 你
  • 如何使用 ipywidgets 创建动态依赖下拉菜单?

    我创建了一个带有两个下拉菜单的表单 我的目标是使一个下拉列表依赖于另一个下拉列表 这张图说明了我的目标和目前的情况 https i stack imgur com o9k5G png 下面的示例代码可以在 Google Colab 或 Ju
  • 如何在每次运行 python 程序时添加新列

    我希望我的表的第一列作为卷号 第二列作为名称 每当我运行 python 程序时 我想在表中添加一列日期 在这个新列中 我想填充从 user list 获得的列表将包含值 P A P P 等 如何处理 我尝试首先通过 alter 命令添加一列
  • 多个列表和大小的所有可能排列

    在 python 中使用以下命令很容易计算简单的排列itertools permutations https docs python org 3 library itertools html itertools permutations 你
  • Python 中使用 globals() 的原因?

    Python 中有 globals 函数的原因是什么 它只返回全局变量的字典 这些变量已经是全局的 所以它们可以在任何地方使用 我只是出于好奇而问 试图学习Python def F global x x 1 def G print glob
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例
  • 如何在python中访问矩阵每个元素的相邻单元格?

    这里 如果两个单元共享边界 则它们被认为是相邻的 例如 A 5 6 4 2 1 3 7 9 8 这里 索引 0 0 的相邻元素位于索引 0 1 和 1 0 处 索引 1 1 的相邻元素位于索引 0 1 1 0 2 1 处 和 1 2 假设你
  • 如何在自定义 django 命令中抽象出命令代码

    我正在我的应用程序下编写自定义 django 命令management commands目录 目前我在该目录中有 6 个不同的文件 每个文件都有不同的命令来解决独特的需求 然而 有一些实用程序是它们所共有的 抽象出这些公共代码的最佳方法是什
  • 列表中的“u”是什么意思?

    这是我第一次遇到这种情况 刚刚打印了一个列表 每个元素似乎都有一个u在它前面 即 u hello u hi u hey 它是什么意思 为什么列表的每个元素前面都会有这个 由于我不知道这种情况有多常见 如果您想了解我是如何遇到它的 我会很乐意
  • Django INSTALLED_APPS 的命名约定是如何工作的?

    该网站上的教程创建了一个名为 polls 的应用程序 它使用 django 1 9 所以在 INSTALLED APPS 中它是 polls apps PollsConfig 我正在观看一个教程 他将应用程序命名为新闻通讯 并且在 INST
  • 如何输入可变的默认参数

    Python 中处理可变默认参数的方法是将它们设置为无 https stackoverflow com a 366430 5049813 例如 def foo bar None bar if bar is None else bar ret
  • 给定一个字符串,如何删除所有重复的连续字母?

    如何从字符串中删除两个连续的字母 例如 a str hii thherre 应该成为 hi there 我尝试这样做 a str join sorted set a str key a str index 但是 我得到 hi ter 是的
  • 如何从Python枚举类中获取所有值?

    我正在使用 Enum4 库创建一个枚举类 如下所示 class Color Enum RED 1 BLUE 2 我要打印 1 2 作为某处的列表 我怎样才能实现这个目标 您可以执行以下操作 e value for e in Color

随机推荐

  • Python实现24点游戏

    欢迎访问我的网站 xff1a omegaxyz com 24点游戏是指随机选取4张扑克牌 xff08 不包括大小王 xff09 xff0c 然后通过四则运算来构造表达式 xff0c 如果表达式的值恰好等于24就赢一次 下面的代码定义了一个函
  • C++构造函数与析构函数

    构造函数 xff0c 就是用来初始化变量的 xff0c 它是用系统自动调用的 xff0c 要是没有写构造函数的话 xff0c 系统会为之生成一个默认的构造函数 xff0c 它的调用就是在声明变量的时候系统就自动地隐式调用 C 43 43 语
  • 胶水语言概述(以Python为例)

    什么是胶水语言 xff1f 胶水语言 xff08 是用来连接软件组件的程序设计语言 xff0c 通常是指脚本语言 胶水语言 xff08 glue language xff09 是用来连接软件组件的程序设计语言 xff08 通常是脚本语言 x
  • 软件工程师与码农的区别

    先说个题外话 xff0c 首先拥有这两种称呼的人都不是修电脑装软件的 本人认为计算机组装与维护 xff08 修电脑 xff0c 装软件 xff0c 装系统 xff0c office xff0c 基本C语言操作 xff09 是一个任何办公室白
  • html输入框输入限制

    JS判断只能是数字和小数点 1 文本框只能输入数字代码 小数点也不能输入 lt input nkeyup 61 34 this value 61 this value replace D g 39 39 34 onafterpaste 61
  • C++运算符重载详解

    更多内容访问omegaxyz com 为什么要对运算符进行重载 C 43 43 预定义中的运算符的操作对象只局限于基本的内置数据类型 xff0c 但是对于我们自定义的类型 xff08 类 xff09 是没有办法操作的 但是大多时候我们需要对
  • 合作协同进化算法概述(Cooperative Coevolution)

    合作协同进化 xff08 Cooperative Coevolution xff09 是求解大规模优化算法一个有效的方法 将大规模问题分解为一组组较小的子问题 而合作协同进化的关键是分解策略 分解策略的分类 随机分解 xff1a 随机选择基
  • C/C++移位运算符

    在一般的C语言教学中 xff0c 移位运算符很多情况下讲师直接跳过 xff0c 更多的会在汇编语言中系统得讲述 然而 xff0c 熟练掌握 高级语言中的移位很大程度上可以展现一个人的代码功底并且能提高编程效率 更多内容访问omegaxyz
  • 差分分组合作协同进化MATLAB代码

    合作协同进化已经引入协同进化算法 xff0c 目的是通过分而治之的范式解决日益复杂的优化问题 理论上 xff0c 协同改 变子成分的想法是十分适合解决大规模优化问题的 然而在实践中 xff0c 没有关于问题的先验知识 xff0c 问题应如何
  • 蒙提霍尔问题(三门问题,概率论)C语言验证

    三门问题 亦称为蒙提霍尔问题 xff0c 出自美国的电视游戏节目Let s Make a Deal 问题的名字来自该节目的主持人蒙提 霍尔 xff08 Monty Hall xff09 问题是这样的 xff1a 参赛者面前有三扇关闭着的门
  • 变邻域搜索算法(Variable Neighborhood Search,VNS)

    先说一下局部搜索 xff1a 更多内容访问omegaxyz com 局部搜索是解决最优化问题的一种启发式算法 对于某些计算起来非常复杂的最优化问题 xff0c 比如各种NP完全问题 xff0c 要找到最优解需要的时间随问题规模呈指数增长 x
  • 汇编程序16位带符号变量计算

    用16位指令编写完整的程序 xff0c 并上机测试 xff0c 计算W 61 xff08 x 43 y xff09 z 其中所有变量均为16位带符号变量 更多内容访问omegaxyz com 注意伪指令的使用 data segment sp
  • 16位伪指令汇编程序查看内存

    实验内容 用16位指令编写完整程序 xff0c 实现下列数据定义语句和相关指令 xff0c 在debug下查看内存数据的定义情况 xff0c 单步跟踪查看各寄存器的值 题目 xff1a ORG 0 ARRAY LABEL BYTE DA1
  • C++对类或结构体进行指定规则排序

    STL中就自带了排序函数sortsort 对给定区间所有元素进行排序 使用 include sort即可使用 xff0c 语法描述为 xff1a sort begin end cmp xff0c 表示一个范围 其中cmp是自己指定的比较规则
  • Html与JS正则表达式测试代码

    正则表达式 xff0c 又称规则表达式 xff08 英语 xff1a Regular Expression xff0c 在代码中常简写为regex regexp或RE xff09 xff0c 计算机科学的一个概念 正则表通常被用来检索 替换
  • sata2.0和sata3.0的区别

    sata是指电脑主板上的硬盘接口 xff0c 3 0是2 0的升级版本 xff0c 发布于2009年 xff0c 所以2010年之前的电脑主板基本都只提供sata2 0接口 xff0c 如果你不知道自己的电脑是sata2 0还是sata3
  • NLTK在python中文字所表达的情感预测

    NLTK是python环境下NLP工具包 xff0c 包含了丰富的文本处理和文本挖掘API 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向 自然语言工具箱 xff08 NLTK xff0c Natural Language To
  • Python实现Windows电脑定时关机

    定时关机 xff0c 功能 xff1a windows下 xff0c 用户按照一定格式输入关机时间 xff0c 系统到指定时间自动关闭 思路 xff1a 从用户输入获取指定时间 分别以时分秒减去当前时间 最终计算得到当前时间距离指定 时间还
  • Python利用结巴模块统计《水浒传》词频

    中文分词是中文文本处理的一个基础性工作 xff0c 结巴分词利用进行中文分词 其基本实现原理有三点 xff1a 基于Trie树结构实现高效的词图扫描 xff0c 生成句子中汉字所有可能成词情况所构成的有向无环图 xff08 DAG 采用了动
  • Python支持向量机(SVM)实例

    SVM Support Vector Machine 指的是支持向量机 xff0c 是常见的一种判别方法 在机器学习领域 xff0c 是一个有监督的学习模型 xff0c 通常用来进行模式识别 分类以及回归分析 Matlab中有林智仁编写的l