Python 之 LIBSVM 使用小结(三)

  1. 准备数据:一种方法是通过svm_read_problem方法直接读取libsvm格式的文件,返回分类标签([])和数据([[]])。如:labels,
    datas =svm_read_problem(‘filename’) ,还有一种方法是直接python格式的,这种方法适用于在程序执行过程中动态产生的data,我要用到的就是这种,没必要把大量的数据都写入文件(这两天搞infominer算法挖掘序列数据模式并看预测效果是个苦力活呀)。python的libsvm处理数据也分为两种,一种是特征值连续的不用手动去表明各个属性值的index,即是说省掉了
    label index1:value1 index2:value2……中的index值,例如labels, datas = [1,-1], [[1,0,1], [-1,0,-1]],还有一种就是带index的,适合处理那些数据比较稀疏的,即好多特征值木有。labels, datas = [{1:1, 3:1}, {1:-1,3:-1}]
  2. 通过训练集training得到模型:用到svm_train方法,传入labels,datas必要的参数,返回model。也有两三种方案,一是直接调用model =svm_train(labels,data,
    ‘-h 0′),将必要的参数’-h 0’传入(这个参数-h shrinking 默认为1,我开始跑的时候时间太久了,程序提示我better设置0,说是可以跑faster)。另外的一/两种是先labels和data作为一个整体prob传入,整体构成通过svm_problem(labels, datas)得到,然后再调用svm_train(prob, param)训练得到model,这里的param可以直接以’-h 0’字符串的形式,也可以通过param
    = svm_parameter(‘-c 4 -b 1′)得到,因此说这是第二或者三种方案。通过调用此方法,在svmutil内部会将部分信息直接打印到控制台,跟前面说的用windows命令行train时的信息一样,效果可以看这个图片
  3. 利用model进行预测:这里的model可以是上一步返回的model,或者从外部文件载入的model。预测的方法是svm_predict(testClassfier,testSeqVector,model),参数分别是测试集的实际labels,测试数据特征向量,训练模型,当然还有一个可选的参数就是predict的是否需要评估概率的参数-b
    0 or 1,默认为0,还说对于一类的SVM(可能用于检测outlier吧),只能用默认的0。例如p_label, p_acc, p_val = svm_predict(y, x, m, ‘-b 1′),这里返回了3个值,分别是预测的label列表([]),准确率p_acc(三元组())用于分类的准确率,回归的mean-squared error和squared correlation coefficient,具体的我还得补充下统计学相关知识,p_val的值是概率估计值(如果传入了参数-b
    1),否则就决策值([[]]),注意返回的其中每一个元素是一个包含k*(k-1)/2个float的数组[],k代表label的类别,其中每一个float就是预测属于哪一类的概率(其下标顺序与传入的labels数组一样)。官方里还介绍了ACC, MSE, SCC = svmutil.evaluations(true_val, predict_val)这个方法,说是计算准确率啊啥啥的(跟前面提到的svm_predict返回结果的第二个值的三元组不一样哦),猜测是用于回归的吧,我就没研究过了。注意这里的predict是个一维数组[],不能利用上面svm_predict产生的结果第三个值。
  4. 源码示例
import numpy
import os
#os.chdir(‘C:\Program Files\libsvm-3.16\python’)
os.chdir("F:\\wfpdm\\20150727_1010\\libsvm\\libsvm-3.12\\python")
import sys
sys.path.append('F:\\wfpdm\\20150727_1010\\libsvm\\libsvm-3.12\\python')
from svmutil import *

#y, x = svm_read_problem('../heart_scale')
#m = svm_train(y[:200], x[:200], '-c 10 -t 0 -p 10')
#p_label, p_acc, p_val = svm_predict(y[200:], x[200:], m)

Data_Set = []
Data_Lab = []
for k in range(5):
    arr = numpy.random.random([30,45])
    lab = [k]*30
    for i in numpy.arange(0,30):
        j = i%3
        arr[i,k*9+j*3:k*9+j*3+3] = arr[i,k*9+j*3:k*9+j*3+3]+100
    print arr.shape
    Data_Set.append(arr)
    Data_Lab.append(lab)
train = Data_Set[0].tolist()
m = svm_train(Data_Lab[0], Data_Set[0].tolist(), '-c 10 -t 0 -p 10')
p_label, p_acc, p_val = svm_predict(Data_Lab[0], Data_Set[0].tolist(), m)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-02 06:58:48

Python 之 LIBSVM 使用小结(三)的相关文章

Python 之 LIBSVM 使用小结(二)

网上许多libsvm的python教程中经常会有这样的例子,但是运行会出现 ImportError: No module named svmutil 的报错. import os import sys os.chdir('C:\libsvm-3.17\python') from svmutil import * y, x = svm_read_problem('../lkagain.txt') m = svm_train(y[:275], x[:275], '-c 5') y, x = svm_

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

Python自然语言处理工具小结

Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 1 Python 的几个自然语言处理工具 NLTK:NLTK 在用 Python 处理自然语言的工具中处于领先的地位.它提供了 WordNet 这种方便处理词汇资源的借口,还有分类.分词.除茎.标注.语法分析.语义推理等类库. Pattern:Pattern 的自然语言处理工具有词性标注工具(Part-Of-Speech Tagger),N元搜索(n-gram search),情感分析(sentiment a

Python爬取网页的三种方法

# Python爬取网页的三种方法之一:  使用urllib或者urllib2模块的getparam方法 import urllib fopen1 = urllib.urlopen('http://www.baidu.com').info() fopen2 = urllib2.urlopen('http://www.sina.com').info() print fopen1.getparam('charset') print fopen2.getparam('charset') #----有些

Python小爬虫-自动下载三亿文库文档

新手学python,写了一个抓取网页后自动下载文档的脚本,和大家分享. 首先我们打开三亿文库下载栏目的网址,比如专业资料(IT/计算机/互联网)http://3y.uu456.com/bl-197?od=1&pn=0,可以观察到,链接中pn=后面的数字就是对应的页码,所以一会我们会用iurl = 'http://3y.uu456.com/bl-197?od=1&pn=',后面加上页码来抓取网页. 一般网页会用1,2,3...不过机智的三亿文库用0,25,50...来表示,所以我们在拼接ur

进击的Python【第六章】:Python的高级应用(三)面向对象编程

Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法.对象指的是类的实例. 已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用. 此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它

[XPath/Python] XPath 与 lxml (三)XPath 坐标轴

本章我们将沿用上一章的 XML 示例文档. XPath 坐标轴 坐标轴用于定义当对当前节点的节点集合. 坐标轴名称 含义 ancestor 选取当前节点的所有先辈元素及根节点. ancestor-or-self 选取当前节点的所有先辈以及当前节点本身. attibute 选取当前节点的所有属性. child 选取当前节点的所有子元素. descendant 选取当前节点的所有后代元素. descendant-or-self 选取当前节点的所有后代元素以及当前节点本身. following 选取文

javascript 学习小结 (三) jQuery封装ajax尝试 by FungLeo

javascript 学习小结 (三) jQuery封装ajax尝试 by FungLeo 前言 在JS学习中,对于原生的很多东西我理解得并不透彻.但是使用jQuery来操作DOM,基本上还是非常熟练的.但是对于AJAX数据交互的处理,我不是很理解. 近期团队交给我一个后端全接口提供给我的项目.我要利用这些接口来自己组织前端代码.为了学习,我决定不使用VUE或者其他的前端框架来做.而是只使用jQuery框架,数据的部分全部使用拼接字符串的形式实现. 获取数据,显示数据,提交数据. 在这个项目中(

win10环境下python版libsvm的安装

1.前言 由于毕业设计需要用到libsvm,所以最近专心于配置libsvm,曾经尝试过在matlab中安装,但是没有成功.最终在Python环境中完成安装. 2.LIBSVM介绍 LIBSVM 是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个操作简单.易于使用.快速有效的 SVM 软件包.可以解决分类问题(包括 C-SVC.n-SVC ).回归问题(包括 e-SVR.n-SVR )以及分布估计(one-class-SVM)等问题,提供了线性.多项式.径向基和 S 形函数四种常用的