本文共 4285 字,大约阅读时间需要 14 分钟。
我的环境 python 3.64 64bit
(非 python 64版本 这里 不完全适应)
1、直接到官网下载 .zip包 然后放到你喜欢的目录 并解压
2、压缩后有个 windows 文件夹 里面第一个 就是 libsvm.dll 的动态链接库 ,把他复制放到 C:\Windows\System32下面
(因为我的是64bit的python 动态链接库也是64bit的 所以我可以直接用, 如果是32位的话 需要 重新编译一个新的.dll文件 放到上面的那个路径下)
3、在Pycharm的使用
因为没有添加路径给pycharm,此时pycharm不能识别 所以需要到setting -> Project interpreter -> 齿轮 -> Show All -> Show paths for the selected interpreter(右侧图标最下面一个) - > 添加libsvm下面的python 路径 (如: G:\libsvm\libsvm-3.23\python)
注意 后来发现上面的那种并没有实际添加到sys.path 下面有两种可行的方法:
(1)手动添加搜索路径
import os,syspath = "G:\libsvm\libsvm-3.23\python"sys.path.append(path)
(2)
到libsvm把 python包复制到当前任意一个搜索路径下 例如G:\virtualenv_home\py3\lib\site-packages 下面 然后
from python.svmutil import * 导入 即可
至此 安装已经完成
到官网 找到download 然后 注意在页面 选择 file文件下面 点进去 找到 .exe 文件 就可以 一键式安装了
(1)到Libsvm的 tools文件夹下 找到grid 用编辑器打开 或者 右键 用python自带的 IDLE 打开 会看到 如下界面,
第一个是对非win32,其实是非windows而言(因为我win64用第二个也正常),看到else下面2个路径,第一个不用管(前提你没有改变原本libsvm的相对路径结构),修改第二个为 你下载的 gnuplot.exe 路径(在 bin目录下)
python 如果加入全局path了的话 可以直接 在cmd 下面 python grid.py ../heart_scale (第一个参数为运行的文件, 第二个参数为 数据文件 以相对路径给出) 这样 就会看到cmd中 飞速 的出现数据,并且同时gnuplot汇出漂亮的图,并在最后给出选出的参数。
分别是 C,gamma, 正确率
最后会发现在tools下面多出来 xxx.out ,xxx.png 就是刚才运行的结果。
(1)首先和刚才一样修改 gnuplot路径,然后就可以执行了
python easy.py ../heart_scale ../heart_test (第一个为原始数据,第二个为测试数据)
会发现 tools 中多出了好几个文件。。。
分为svmutil、svm.两个接口 其中svmutil为高层接口,svm.py为底层接口
svm.py主要运用了四个数据结构svm_node, svm_problem, svm_parameter和svm_model。
svmutil中主要包含了以下几个函数:
svm_problem() : read_problem
svm_train() : train an SVM model svm_predict() : predict testing data svm_read_problem() : read the data from a LIBSVM-format file. svm_load_model() : load a LIBSVM model. svm_save_model() : save model to a file. evaluations() : evaluate prediction results.一、里面有两个关于读取problem的
(1)svm_problem()
y, x = [1,-1], [{0:1, 1:2, 2:-2}, {0:2, 1:-2, 2:2}]
prob = svm_problem(y, x)
(2)svm_read_problem()
y, x = svm_read_problem('../heart_scale')
可见两种区别:前者 读取 问题的标签,特征 存储在prob里面自动转换为libsvm可以接收的数据格式(但是需要index连续,请参照libsvm数据集的格式),
后者 直接从libsvm格式数据读取数据返回标签、特征
其中:l 为训练数据数量,y是存储标签的数组,x存储训练数据(指针的指针)
struct svm_problem { int l; double *y; struct svm_node **x; };二、svm_train()
Usage: svm-train [options] training_set_file [model_file] options: -s svm_type : set type of SVM (default 0) 0 -- C-SVC (multi-class classification) 1 -- nu-SVC (multi-class classification) 2 -- one-class SVM 3 -- epsilon-SVR (regression) 4 -- nu-SVR (regression) -t kernel_type : set type of kernel function (default 2) 0 -- linear: u'*v 1 -- polynomial: (gamma*u'*v + coef0)^degree 2 -- radial basis function: exp(-gamma*|u-v|^2) 3 -- sigmoid: tanh(gamma*u'*v + coef0) 4 -- precomputed kernel (kernel values in training_set_file) -d degree : set degree in kernel function (default 3) -g gamma : set gamma in kernel function (default 1/num_features) -r coef0 : set coef0 in kernel function (default 0) -c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1) -n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5) -p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1) -m cachesize : set cache memory size in MB (default 100) -e epsilon : set tolerance of termination criterion (default 0.001) -h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1) -b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0) -wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1) -v n: n-fold cross validation mode -q : quiet mode (no outputs)
这是 svm_train()的可选参数,其中比较常用几个是
-s 分类回归选择
-t 核函数类型
-c 惩罚系数
-g 核函数里面的一个参数
(1)直接传 libsvm格式的 label,feature, parameter
m = svm_train(y[:200], x[:200], '-c 4')
(2) 整体传参
prob = svm_problem(y, x)
param = svm_parameter('-t 0 -c 4 -b 1')
m = svm_train(prob, param)
m 是一个 ctype 类型指针 指向svm_model
三、svm_predict(y ,x, m)
p_label, p_acc, p_val = svm_predict(y[200:], x[200:], m)
nu 核函数类型参数,
obj:目标函数最小值,
rho:偏置项,
nSV:支持向量
nBSV 边界上的支持向量 alpha(i) = C
Total nSv 总的支持向量数(多分类里面)
四、保存与加载模型
svm_save_model('heart_scale.model', m) 保存在heart_scale.model里面
m = svm_load_model('heart_scale.model') 从heart_scale.model 加载
五、对预测结果进行评估
ACC, MSE, SCC = evaluations(y, p_label)