添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
睿智的柿子  ·  Transactions with ...·  1 年前    · 
潇洒的葡萄  ·  Java开发利器Guava ...·  1 年前    · 


一个lisvm包的安装,网上教程太多,众说纷纭,在此做一个简单的总结

LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的一套支持向量机的库,这套库运算速度还是挺快的,可以很方便的对数据做分类或回归。由于libSVM程序小,运用灵活,输入参数少,并且是开源的,易于扩展,因此成为目前国内应用最多的SVM的库。

下载安装libsvm包

第一种方式

whl文件下载(下载对应python版本的)
https://www.lfd.uci.edu/~gohlke/pythonlibs/#libsvm

打开cmd,安装(对应路径和文件名)

pip install libsvm‑3.22‑cp37‑cp37m‑win_amd64.whl

有人说:
安装成功后,会在python目录下的一个库文件夹site-packages下找到新生成的libsvm.dll,一样将其放置到C:\windows\system32目录

测试

from svmutil import *
from 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)

运行没错的话应该就安装成功了

第二种方式

1.下载
网站:http://www.csie.ntu.edu.tw/~cjlin/libsvm/oldfiles/。这个网站也可以下载,推荐给大家看。http://www.csie.ntu.edu.tw/~cjlin/libsvm/

python mss库介绍 python svm库_python


2.添加动态链接文件(.dll文件)

在下载的libsvm文件夹中,有一个文件夹叫做windows,里面有一个动态链接文件libsvm.dll,这个文件默认是32位系统格式的,如果你的Python是32位的话,则可以直接用这个dll文件,将在拷贝到C:\Windows\System32下即可。

如果你的系统是64位的,则需要重新编译64位的dll文件。假设你已经安装了VS,以安装了VS2015为例,你可以在win10的全部应用中的VS目录下找到 VS2015 x64 本机工具命令提示符,这个小黑框,然后用cd命令进入到你下载的libsvm的文件中,输入以下指令:

nmake -f Makefile.win clean all

便会自动调用指令生成64位的dll,生成后,拷贝到C:\Windows\System32目录下。因为Python版本的svm需要调用很多c语言实现的接口,所以必须添加这个动态链接文件,否则运行会出错。

如果本机上没有安装VS,可使用第一种方法生成的libsvm.dll将其放置到C:\windows\system32即可

3.导入模块

如果libsvm需要经常使用,可以将libsvm包添加到Python的默认lib中,也就是放到Python安装路径下的Lib文件夹下的site-packages文件夹中。然后再libsvm文件夹中添加 _init_.py (init前后都是双下划线)文件,在libsvm中的Python文件夹中也添加 _init_.py 文件。Python包,也就是能够导入的文件夹包中,必须包含 _init_.py ,否则无法实现导入。
这样在导入:

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

也可以不添加到Python默认路径中,直接

import sys
sys.path.append("libsvm/python")
import svm 
import svmutil

这样也是可以的,但建议前面那种

在运行时发现还是出错,说svmutil中找不到模块svm。这是因为在svmutil.py模块中有两个导入语句:

from svm import *
from svm import __all__ as svm_all

这两个导入语句中,默认svm已经是在系统路径中,但是实际上不是,如果我们 已经将libsvm添加到Python默认路径中,则直接将上面的改为:

from libsvm.python.svm import *
from libsvm.python.svm import __all__ as svm_all

这样就可以正确找到svm.py模块了。

第三种方式

将zip 放到一个特定的位置,我直接放到D盘目录底下了。其他地方也可以

python mss库介绍 python svm库_Python_02


测试一下LibSVM是否可用了,打开Python IDE,输入以下代码:

python mss库介绍 python svm库_python_03

能够看到84%的准确度。
##训练数据

假设训练数据集文件路径为:G:\train.txt
预测数据集文件路径为:G:\predict.txt
则使用svm方法为:
第一步,加载文件数据到序列或元组,让svm接口能够使用
其中label是类别,value是特征值

train_label, train_value = svm_read_problem("G:\\train.txt")         #训练数据集
predict_label, predict_value = svm_read_problem("G:\\predict.txt")   #预测数

训练模型

model = svm_train(train_label,train_value)

用模型预测数据类别
结构返回为,预测类别集合,准确率,

p_label, p_acc, p_val = svm_predict(predict_label, predict_value, model)
print(p_acc)#打印预测结果

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

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

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


LibSVM简单说明

下载.zip格式的版本,解压后可以看到,主要有5个文件夹和一些c++源码文件。

Java——主要是应用于java平台;

Python——是用来参数优选的工具,稍后介绍;

svm-toy——一个可视化的工具,用来展示训练数据和分类界面,里面是源码,其编译后的程序在windows文件夹下;

tools——主要包含四个python文件,用来数据集抽样(subset),参数优选(grid),集成测试(easy),数据检查(checkdata);

windows——包含libSVM四个exe程序包,我们所用的库就是他们,里面还有个heart_scale,是一个样本文件,可以用记事本打开,用来测试用的。

其他.h和.cpp文件都是程序的源码,可以编译出相应的.exe文件。其中,最重要的是svm.h和svm.cpp文件,svm-predict.c、svm-scale.c和svm-train.c(还有一个svm-toy.c在svm-toy文件夹中)都是调用的这个文件中的接口函数,编译后就是windows下相应的四个exe程序。另外,里面的 README 跟 FAQ也是很好的文件,对于初学者如果E文过得去,可以看一下。

下面以svm-train为例,简单的介绍下,怎么编译:(这步很简单,也没必要,对于仅仅使用libsvm库的人来说,windows下的4个exe包已经足够了,之所以加这步,是为了那些做深入研究的人,可以按照自己的思路改变一下svm.cpp,然后编译验证)

我用的是VC 6.0,新建一个控制台(win32 console application)程序,程序名叫svm-train(这个可以随意),点击OK后,选择empty。

进入程序框架后,里面什么都没有,然后找到你的程序目录,把svm-train.c、svm.h和svm.cpp拷贝过去(.c文件是c语言的,要是你习惯了c++,你尽可以改成.cpp),然后把这3个文件添加到工程,编译。。。如果没错误,到debug下面看看,是不是有个svm-train.exe。其实windows下的svm-train.exe就是这样编译出来的。

哈哈,怎么样是不是很简单。但是,这样的程序直接运行没意义,他要在dos下运行,接收参数才行。下面开始我们的libsvm的体验之旅。

第一次体验LibSvm

1.把LibSVM包解压到相应的目录(因为我只需要里面windows文件夹中的东东,我们也可以只把windows文件夹拷到相应的目录),比如D:/libsvm。

2.在电脑“开始”的“运行”中输入cmd,进入DOS环境。定位到d:/ libsvm下,具体命令如下:

d: (回车)
cd /libsvm/windows (回车)
(上面第一行是先定位到盘符d,第二行cd是定位到相应盘符下的目录)

3.进行libsvm训练,输入命令:(这里要注意文件的名字,2.89以前版本都是svmtrain.exe)

svm-train heart_scale train.model

heart_scale**——**是目录下的已经存在的样本文件,要换成自己的文件,只需改成自己的文件名就可以了

train.model**——**是创建的结果文件,保存了训练后的结果

可以看到结果:

*
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
      Total nSV = 132

其中,#iter为迭代次数,nu是你选择的核函数类型的参数,obj为SVM文件转换为的二次规划求解得到的最小值,rho为判决函数的偏置项 b ,nSV为标准支持向量个数(0<a[i]<c),nBSV为边界上的支持向量个数(a[i]=c),Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)。

在目录下,还可以看到产生了一个train.model文件,可以用记事本打开,记录了训练后的结果。

svm_type c_svc//所选择的svm类型,默认为c_svc

kernel_type rbf//训练采用的核函数类型,此处为RBF核

gamma 0.0769231//RBF核的参数γ

nr_class 2//类别数,此处为两分类问题

total_sv 132//支持向量总个数

rho 0.424462//判决函数的偏置项b

label 1 -1//原始文件中的类别标识

nr_sv 64 68//每个类的支持向量机的个数

SV//以下为各个类的权系数及相应的支持向量

1 1:0.166667 2:1 3:-0.333333 … 10:-0.903226 11:-1 12:-1 13:1

0.5104832128985164 1:0.125 2:1 3:0.333333 … 10:-0.806452 12:-0.333333 13:0.5

…………

-1 1:-0.375 2:1 3:-0.333333…. 10:-1 11:-1 12:-1 13:1

-1 1:0.166667 2:1 3:1 …. 10:-0.870968 12:-1 13:0.5

到现在,第一次体验libsvm到这就基本结束了,其他的两个(svm-predict、svm-scale)的使用过程类似

参考: https://baijiahao.baidu.com/s?id=1580049402237436090&wfr=spider&for=pc