我的编程空间,编程开发者的网络收藏夹
学习永远不晚

LibSVM for Python 使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

LibSVM for Python 使用


libsvm的GitHub仓库

LibSVM是开源的SVM实现,支持C, C++, Java,Python , R 和 Matlab 等, 这里选择使用Python版本。

安装LibSVM

将LibSVM仓库的所有内容放入Python的包目录\Lib\site-packages或者工程目录中。

在libsvm根目录和python子目录下中分别新建名为__init__.py的空文件,这两个空文件将标识所在的目录为python包可以直接导入。

允许草民吐槽一下各种Blog里切换根目录的奇怪的解决方案:这个和这个

因为经常使用svm,所以草民将libsvm包放入\Lib\site-packages目录下。在Python交互环境或在任意脚本中都可以使用import libsvm.python来使用libsvm的python接口。

使用LibSVM

LibSVM的使用非常简单,只需调用有限的接口

示例1:

from libsvm.python.svmutil import *
from libsvm.python.svm import *
    
y, x = [1,-1], [{1:1, 2:1}, {1:-1,2:-1}]
prob  = svm_problem(y, x)
param = svm_parameter('-t 0 -c 4 -b 1')
model = svm_train(prob, param)
yt = [1]
xt = [{1:1, 2:1}]
p_label, p_acc, p_val = svm_predict(yt, xt, model)
print(p_label)

输出结果:

optimization finished, #iter = 1
nu = 0.062500
obj = -0.250000, rho = 0.000000
nSV = 2, nBSV = 0
Total nSV = 2
test:
Model supports probability estimates, but disabled in predicton.
Accuracy = 100% (1/1) (classification)
[1.0]

在SVM数据中下载train1.txt和test1.txt。

LibSVM可以在文件中读取训练数据,这样便于大规模数据的使用。

示例:

from libsvm.python.svmutil import *
from libsvm.python.svm import *

y, x = svm_read_problem('train1.txt')
yt, xt = svm_read_problem('test1.txt')
model = svm_train(y, x )
print('test:')
p_label, p_acc, p_val = svm_predict(yt[200:202], xt[200:202], model)
print(p_label)

可以看到输出:

optimization finished, #iter = 5371
nu = 0.606150
obj = -1061.528918, rho = -0.495266
nSV = 3053, nBSV = 722
Total nSV = 3053
test:
Accuracy = 40.809% (907/2225) (classification)

LibSVM接口

训练数据格式

libsvm的训练数据格式如下:

<label> <index1>:<value1> <index2>:<value2> ...

示例:

1 1:2.927699e+01 2:1.072510e+02 3:1.149632e-01 4:1.077885e+02

主要类型

  • svm_problem

保存定义SVM模型的训练数据

  • svm_parameter

存储训练SVM模型所需的各种参数

  • svm_model

完成训练的SVM模型

  • svm_node

模型中一个特征的值,只包含一个整数索引和一个浮点值属性。

主要接口:

-svm_problem(y, x)

由训练数据y,x创建svm_problem对象

  • svm_train()

svm_train有3个重载:

model = svm_train(y, x [, 'training_options'])
model = svm_train(prob [, 'training_options'])
model = svm_train(prob, param)

用于训练svm_model模型

  • `svm_parameter(cmd)

创建svm_parameter对象,参数为字符串。

示例:

param = svm_parameter('-t 0 -c 4 -b 1')
  • svm_predict()

调用语法:

p_labs, p_acc, p_vals = svm_predict(y, x, model [,'predicting_options'])

参数:

y 测试数据的标签

x 测试数据的输入向量

model为训练好的SVM模型。

返回值:

p_labs是存储预测标签的列表。

p_acc存储了预测的精确度,均值和回归的平方相关系数。

p_vals在指定参数'-b 1'时将返回判定系数(判定的可靠程度)。

这个函数不仅是测试用的接口,也是应用状态下进行分类的接口。比较奇葩的是需要输入测试标签y才能进行预测,因为y不影响预测结果可以用0向量代替。

  • svm_read_problem

读取LibSVM格式的训练数据:

y, x = svm_read_problem('data.txt')
  • svm_save_model

将训练好的svm_model存储到文件中:

svm_save_model('model_file', model)

model_file的内容:

svm_type c_svc
kernel_type linear
nr_class 2
total_sv 2
rho 0
label 1 -1
probA 0.693147
probB 2.3919e-16
nr_sv 1 1
SV
0.25 1:1 2:1 
-0.25 1:-1 2:-1 
  • svm_load_model

读取存储在文件中的svm_model:

 model = svm_load_model('model_file')

调整SVM参数

LibSVM在训练和预测过程中需要一系列参数来调整控制。

svm_train的参数:

  • -s SVM的类型(svm_type)

    • 0 -- C-SVC(默认)

      使用惩罚因子(Cost)的处理噪声的多分类器

    • 1 -- nu-SVC(多分类器)

      按照错误样本比例处理噪声的多分类器

    • 2 -- one-class SVM

      一类支持向量机,可参见"SVDD"的相关内容

    • 3 -- epsilon-SVR(回归)

      epsilon支持向量回归

    • 4 -- nu-SVR(回归)

  • -t 核函数类型(kernel_type)

    • 0 -- linear(线性核):

      u'*v

    • 1 -- polynomial(多项式核):

      (gamma*u'*v + coef0)^degree

    • 2 -- radial basis function(RBF,径向基核/高斯核):

      exp(-gamma*|u-v|^2)

    • 3 -- sigmoid(S型核):

      tanh(gamma*u'*v + coef0)

    • 4 -- precomputed kernel(预计算核):

      核矩阵存储在training_set_file

下面是调整SVM或核函数中参数的选项:

  • -d 调整核函数的degree参数,默认为3

  • -g 调整核函数的gamma参数,默认为1/num_features

  • -r 调整核函数的coef0参数,默认为0

  • -c 调整C-SVC, epsilon-SVR 和 nu-SVR中的Cost参数,默认为1

  • -n 调整nu-SVC, one-class SVM 和 nu-SVR中的错误率nu参数,默认为0.5

  • -p 调整epsilon-SVR的loss function中的epsilon参数,默认0.1

  • -m 调整内缓冲区大小,以MB为单位,默认100

  • -e 调整终止判据,默认0.001

  • -wi调整C-SVC中第i个特征的Cost参数

调整算法功能的选项:

  • -b 是否估算正确概率,取值0 - 1,默认为0

  • -h 是否使用收缩启发式算法(shrinking heuristics),取值0 - 1,默认为0

  • -v 交叉校验

  • -q 静默模式

LibSVM的Matlab接口用法类似,Matlab丰富的标准工具箱提供了各种方便。

Statistic Tools工具箱提供了svmtrain和svmclassify函数进行SVM分类。

traindata = [0 1; -1 0; 2 2; 3 3; -2 -1;-4.5 -4; 2 -1; -1 -3];
group = [1 1 -1 -1 1 1 -1 -1]';
testdata = [5 2;3 1;-4 -3];
svm_struct = svmtrain(traindata,group);    
Group = svmclassify(svm_struct,testdata);

svmtrain接受traindata和group两个参数,traindata以一行表示一个样本,group是与traindata中样本对应的分类结果,用1和-1表示。

svmtrain返回一个存储了训练好的svm所需的参数的结构体svm_struct。

svmclassify接受svm_struct和以一行表示一个样本的testdata,并以1和-1列向量的形式返回分类结果

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

LibSVM for Python 使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

LibSVM for Python 使用

libsvm的GitHub仓库LibSVM是开源的SVM实现,支持C, C++, Java,Python , R 和 Matlab 等, 这里选择使用Python版本。安装LibSVM将LibSVM仓库的所有内容放入Python的包目录\L
2023-01-31

Python for循环的使用(三)

Python for循环的使用(一)for循环的使用场景1.如果我们想要某件事情重复执行具体次数的时候可以使用for循环。 2.for循环主要用来遍历、循环、序列、集合、字典,文件、甚至是自定义类或函数。(二)for循环操作列表实例演
2023-01-31

python中for语句如何使用

在Python中,for语句用于循环迭代一个可迭代对象(如列表、元组、字符串等)中的元素。for循环的基本语法如下:```pythonfor 变量 in 可迭代对象:# 执行代码块```在每次循环迭代时,变量会依次被赋值为可迭代对象中的元素
2023-09-23

Python for 循环语句的使用

目录 Python for 循环语句通过序列索引迭代循环使用 else 语句 Python for 循环语句 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。 语法: for循环的语法格式如下:for iterat
2022-06-02

Docker-client for python是怎么使用的

本篇文章为大家展示了Docker-client for python是怎么使用的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Docker-client for python使用:客户端初始化的三种
2023-06-19

python中for x in range如何使用

这篇文章给大家介绍python中for x in range如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌
2023-06-15

Python-使用for循环遍历文件

open操作文件r:    以读方式打开,默认就是这个模式w:   以写方式打开a:    以追加模式打开r+:   以读写模式打开w+:  以读写模式打开a+:   以读写模式打开rb:    以二进制读模式打开wb:   以二进制写模式
2023-01-31

如何使用Python中的for循环

如何使用Python中的for循环Python是一种简单易用的编程语言,其中的for循环是非常常用的工具之一。通过使用for循环,我们可以循环遍历一系列的数据,进行有效的处理和操作,提高代码的效率。下面,我将通过具体的代码示例,介绍如何使用
2023-10-25

python for循环if-else使

mylist = [-1,0,1,2,3,4];a = [i*2 for i in mylist];print(a) #[-2, 0, 2, 4, 6, 8]a = [i*2 for i in mylist if i>0];print(a)
2023-01-31

python中append怎么在for循环使用

在Python中,可以通过使用append()方法将元素添加到列表中。在for循环中使用append()方法的一种常见方法是将循环变量的值添加到列表中。以下是一个使用append()方法在for循环中将元素添加到列表的示例:pythonmy
2023-10-18

Python中for后接else的语法使用

0、背景 今天看到了一个比较诡异的写法,for后直接跟了else语句,起初还以为是没有缩进好,查询后发现果然有这种语法,特此分享。之前写过c++和Java,在for后接else还是第一次见。 1、试验# eg1 import numpy a
2022-06-02

我所使用的Python扩展程序 for

ActivePython-3.1.3.5-win32-x86.msibzr-2.3.1.win32-py2.6.exeCherryPy-3.2.0-py2.win32.exedreampie-1.1.1-setup.exeGenshi-0.
2023-01-31

怎么在python中使用for…in循环

这期内容当中小编将会给大家带来有关怎么在python中使用for…in循环,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python
2023-06-14

Python全栈的for循环怎么使用

这篇文章主要介绍“Python全栈的for循环怎么使用”,在日常操作中,相信很多人在Python全栈的for循环怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python全栈的for循环怎么使用”的疑
2023-06-21

python中for循环语句如何使用

在Python中,for循环用于迭代一个可迭代对象(如列表、元组、字符串等)中的元素。语法结构:```for 变量 in 可迭代对象:# 循环体代码```示例:1. 遍历列表中的元素```fruits = ['apple', 'banana
2023-09-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录