Matlab SVM库函数的使用(libsvm)

在上篇文章中,对于SVM的原理,Matlab中libSVM的时候介绍的都非常的详细。

这篇文章是上篇文章中包含的一个很小很简单的部分。目的是方便以后我自己的查阅~~    ^_^

在以后使用libsvm的时候,不想再细细查阅SVM的理论,libSVM非常详细的使用,只是想要很快的对libsvm上手,用它来很快的做开发,那么这篇文章的目的就在这里。

在matlab中输入svmtrain,确定,给出了详细的说明。

>> svmtrain
Usage: model = svmtrain(training_label_vector, training_instance_matrix, ‘libsvm_options’);
libsvm_options:
-s svm_type : set type of SVM (default 0)
0 — C-SVC
1 — nu-SVC
2 — one-class SVM
3 — epsilon-SVR
4 — nu-SVR
-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_instance_matrix)
-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)

ans =

[]

>> model = svmtrain(training_label_vector, training_instance_matrix, ‘libsvm_options’);

svmtrain有三个参数,一个返回值。

返回的就是由训练得到的,在预测的时候将要用到的svm模型。

三个参数:

1. training_label_vector : 训练的标签向量,也就是一系列的-1,1组成的向量,-1表示训练集中该行放的负例的特征向量,

1表示在训练集中该行存放的是正例的特征向量。     向量是 m*1 维度 ( 假设训练集中一共有m个训练样本  )

2. training_instance_matrix : 训练集的样本的特征向量组成的特征矩阵。m*n维度。 m表示训练集中一共有m个样本。

n表示每一个样本使用一个n维的特征向量来表示。所以,在该特征向量矩阵中,每一行就表示一个样本的特征向量。

training_instance_matrix的顺序应该是和training_label_vector严格的保持一致的。

3. libsvm_options :  这是对建立的svm模型的一些参数的设置的选项。

也可以不写该参数而采用默认值。但是为了分类预测准确的目的一般还是需要填写这个选项的,并且根据对这个选项的调节来实现“svm参数调优”

常用到的参数有:
-s svm_type : set type of SVM (default 0)
0 -- C-SVC
1 -- nu-SVC
2 -- one-class SVM
3 -- epsilon-SVR
4 -- nu-SVR
-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_instance_matrix)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)

-v n : n-fold cross validation mode
其中-s用来选定svm的类别,是用作分类器,还是做回归等,  用作分类器的话就设置 -s 0 或者省略,默认为-s 0

-t 用来设置svm的核函数,

-t 0 表示选用线性核函数

-t 1 表示选用多项式核函数

-t 2 表示选用径向基(高斯)核函数

-t  3 表示选用sigmoid核函数

-t 4 表示选用自定义核函数。 这个时候可以自己定义核函数,并且把核函数计算出来的核矩阵传入svmtrain,svmpredict中来进行训练和预测.

-d 用来设置多项式核函数的幂次。 由svmtrain的help文档中,我们就可以很轻易的看出,degree这个变量只有在-t 1多项式核函数的函数式中才出现,故而只有在-t 1 选用多项式核函数的时候-d 这个选项才有意义。 因为多项式核函数也是比较常用的核函数,故而-d选项还是比较常常用到,-d 3表示多项式核函数的幂次为3

-g 用来设置在 多项式函数、径向基核函数、sigmoid核函数中的gammar系数。 默认这个值选用1.

-v 用来设置在交叉验证的时候,fold的次数。

 

具体每一个参数设置为多少合适,往往需要经过参数选优过程之后才会知道。参数选优过程的本质,其实就是试一试啦~~哈哈。就是试一试这个参数正确率多少,变一下,把参数设置成那样,正确率是多少,然后选择一套正确率最高的参数。这样。呵呵。

 

而预测过程使用函数:svmpredict

直接在matlab中输入svmpredict 确定,给出了非常详细易懂的说明:

>> svmpredict
Usage: [predicted_label, accuracy, decision_values/prob_estimates] = svmpredict(testing_label_vector, testing_instance_matrix, model, 'libsvm_options')
Parameters:
model: SVM model structure from svmtrain.
libsvm_options:
-b probability_estimates: whether to predict probability estimates, 0 or 1 (default 0); one-class SVM not supported yet
Returns:
predicted_label: SVM prediction output vector.
accuracy: a vector with accuracy, mean squared error, squared correlation coefficient.
prob_estimates: If selected, probability estimate vector.

ans =

[]

>>

先说svmpredict的四个参数:testing_label_vector,testing_instance_matrix,model,’libsvm_options’

通常使用前三个参数就可以了。这篇文章为了快速入手而写,所以只介绍一下前三个参数,至于第四个参数的使用,查看matlab的help就可以知道了。

1.testing_label_vector,这个参数用于在预测的时候同时得到准确的预测正确率。 如果需要预测的测试集是事先就知道分类结果的,这种情况下往往是用来评测算法的性能或者评测分类器的性能的时候,这时候,这个序列中是对应于第二个参数testing_instance_matrix对应的分类label(-1,1的序列)。 如果不是用于评测算法或者分类器的性能,而是用于实际的预测的场合,那么这个参数的赋值是什么都无所谓的,但是行数应该和第二个参数testing_instance_matrix保持一致。

2.testing_instance_matrix:测试样本矩阵。其实就是测试样本的特征向量组成的矩阵。m*n维。表示m个样本,每一个样本表示成一个n维矩阵。矩阵的每一行表示的就是一个样本的特征向量。

3.model:进行预测时使用的svm model。这个model无疑是使用前面的函数svmtrain得到的。

svmpredict有三个返回值:

[predicted_label, accuracy, decision_values/prob_estimates]

1.predicted_label :返回一个-1,1的序列,该序列的行数与输入参数testing_instance_matrix的行数相同,每一行为1或者-1.表示的svm预测的改行对应的样本的分类结果,属于正类1,或者负类-1.

2.accuracy: 当输入的第一个参数testing_label_vector是先验的测试样本的正确分类的时候,这个返回值accuracy就是svm在这次预测中的正确率。

3.decision_values:我们知道svm分类过程本质是一个函数取优的过程,效果就是使得两个类别距离分类平面之间的margin最大化。

svm本质是优化问题

那么这个 decision_values 是一个m*1的向量,也就是行数与输入的测试样本数目相同。每一行的值对应的也就是这个测试样本在上边的这个优化函数中的目标函数的值了。从Predicted_label我们得到了每一个测试样本的分类结果(其实分类依据就是这个目标函数的值咯…),但是只有predict_labels我们不知道那个测试样本判别的有把握,哪些判别的不大有把握,也就是置信度的问题。 decision_values就给出了置信度。【应该decision_values和优化函数的目标函数不完全相同,希望读者能够斧正,并留言讨论。谢谢】

“Matlab SVM库函数的使用(libsvm)”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注