SVM的使用


libsvm 有很多种用法, 这篇指南只打算讲简单的部分.
svmscale扫描数据. 因为原始数据可能范围过大或过小, svmscale 可以先将数据重新 scale (縮放) 到适当范围使训练与预测速度更快。文件格式文件格式要先交代一下. 
你可以参考 libsvm 里面附的 "heart_scale":
  这是SVM 的输入文件格式.
[label] [index1]:[value1] [index2]:[value2] ...[label] [index1]:[value1] [index2]:[value2] ...
一行一条记录数据,如:+1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1
label或说是class, 就是你要分类的种类,通常是一些整数。index是有順序的索引,通常是连续的整数。value就是用来 train 的数据,通常是一堆实数。
每一行都是如上的結构, 意思就是: 我有一排数据, 分別是 value1, value2, .... value, (而且它们的順序已由 index 分別指定),这排数据的分类結果就是label。

举例来说,以前面点分区的例子来说,我们不是每个点都有 X 跟 Y 的坐标吗?所以它就有两种属性。假定我有两个点: (0,3) 跟 (5,8) 分別在 label(class) 1 跟 2 ,那就会写成
1 1:0 2:3
2 1:5 2:8
同理,空间中的三維坐标就等于有三组属性。这种文件格式最大的好处就是可以使用稀疏矩阵(sparse matrix), 或说有些 数据的属性可以有缺失。
运行libsvm下来解释一下libsvm 的程序怎么用。 你可以先拿 libsvm 附的heart_scale来做输入,底下也以它为例:看到这里你应该也了解,使用 SVM 的流程大概就是:1. 准备数据并做成指定格式 
(有必要时需 svmscale)

2. 用svmtrain 来训练成 model
对新的输入,使用 svmpredic来预测新数据的类别.
svmtrain 的语法大致就是:
svmtrain [options] training_set_file [model_file]
training_set_file 就是之前的格式,而 model_file 如果不给就会 叫[training_set_file].model。 options 可以先不要给。下列程序执行結果会产生 heart_scale.model 文件:(螢幕输出不是很重要,沒有错誤就好了)
./svmtrain heart_scaleoptimization finished, #iter = 219nu = 0.431030obj = -100.877286, rho = 0.424632 nSV = 132, nBSV = 107Total nSV = 132
svmpredict 的语法是 :
svmpredict   test_file   model_file   output_filetest_file

它的格式跟 svmtrain 的输入,也就是training_set_file 是一样的, 不过每行最前面的 label 可以省略 (因为预测就是要预测那个 label)。但如果 test_file 有 label 的值的话, predict 完会順便拿 predict 出来的值跟 test_file 里面写的值去做比对,这代表: test_file写的label是真正的分类結果,拿来跟我们预测的結果比对就可以知道预测的效果。
所以,我们可以拿原 training set 当做 test_file再丟给 svmpredict 去预测(因为格式一样),看看正确率有多高,方便后面调参数。
其它参数就很好理解了: model_file就是 svmtrain 出来的文件, output_file是存输出結果的文件案。输出的格式很简单,每行一个 label,对应到你的 test_file 里面的各行。下列程序执行結果会产生 heart_scale.out:
./svm-predict heart_scale heart_scale.model heart_scale.out
Accuracy = 86.6667% (234/270) (classification)Mean squared error = 0.533333 (regression)Squared correlation coefficient = 0.532639(regression)

我们把原输入丟回去 predict,第一行的 Accuracy 就是預测的正确率了。如果输入沒有label 的话,那就是真的预测了。看到这里,基本上你应该已经可以利用svm 来作事了:你只要写程序输出正确格式的数据,交给 svm 去 train,后来再predict 并读入結果即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值