一、libsvm的安装
二、基本介绍
- 例子代码
from libsvm.python.svmutil import *
y, x = [1,-1], [{1:1, 2:1}, {1:-1,2:-1}] # 输入的数据
options = '-t 0 -c 4 -b 1' # 训练参数设置
model = svm_train(y,x,options) # 进行训练
yt = [1]
xt = [{1:1, 2:1}]
p_label, p_acc, p_val = svm_predict(yt, xt, model) # 使用得到的模型进行预测
print(p_label)
- 例子说明
y: 输入的数据样本对应的标签
x: 输入的样本的属性值,其中每一个样本的格式是一个字典类型,键值对中键是一个索引值,值是对应的数据属性值
options: 训练的一些参数设置,主要有以下的一些设置
-s SVM的类型(svm_type)
0 -- C-SVC(默认) 使用惩罚因子(Cost)的处理噪声的多分类器
1 -- nu-SVC(多分类器) 按照错误样本比例处理噪声的多分类器
2 -- one-class SVM 一类支持向量机,可参见"SVDD"的相关内容
3 -- epsilon-SVR(回归) epsilon支持向量回归 (也就是使用 E-不敏感损失函数进行回归)
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(就是优化问题中的那个C)
-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 静默模式
三、构建数据集并获得决策模型
- 手工部署数据集,解压刚刚下载的压缩包,进入windows文件夹,打开svmtoy.exe文件
- 在打开的exe点击点类似左边的图一般,弄好了之后点击save保存在txt文件里,最好弄两份,一份用来训练,一份用来检测准确度- 文件的格式如下图,第一类时分类,后面的冒号前面的1,2指的是特征
- 先导入包
from libsvm.svmutil import *
from libsvm.svm import *
import scipy.spatial
- 这里读取数据,svm_read_problem函数的作用是读取刚刚生成的文件并返回合适的格式便于训练
#根据文件路径直接返回要使用的数据格式
label,data= svm_read_problem('..\\source\\iris.txt')#训练数据
p_label,p_data=svm_read_problem('..\\source\\predict.txt')#预测数据
- 设置训练参数
para ='-t 1 -c 4 -b 1'
'''
-t
0为线性核
1为多项式核
2为高斯核(默认)
'''
- 训练并将模型保存在文件里,同时测试准确度
#多项式核
model=svm_train(label,data,para)
svm_save_model('..\\source\\multi.txt',model)
acc=svm_predict(p_label,p_data,model)
- 文件里的内容
- 高斯核也是一样,不过将para的里面-t 对应的值改为2
para ='-t 2 -c 4 -b 1'
'''
-t
0为线性核
1为多项式核
2为高斯核(默认)
'''
- 训练并保存模型进文件中
model=svm_train(label,data,para)
svm_save_model('..\\source\\gaosi.txt',model)
acc=svm_predict(p_label,p_data,model)
- 文件内容,备注与刚刚的一样,这份就不写了
四、总结
- libsvm的使用与sklearn里的svm使用一样方便,libsvm对于模型的描述相较于sklearn来说更全面一点,不过使用libsvm需要注意数据的格式