一、LIBSVM训练函数使用如下:
1
|
model = svmtrain(trainlabel,traindata,
'-s 0 -t 2 -c 1.2 -g 2.8'
)
|
trainlabel:训练样本标签
traindata:训练样本数据集,行向量为样本值
1、参数-s,表示SVM类型,默认值为0,可选类型有:
0 -- C- SVC
1 -- nu - SVC
2 -- one-class-SVM
3 -- e - SVR
4 -- nu-SVR
2、参数-t,表示核函数类型,默认为2,可选核函数有:
0 -- 线性核函数: K(u,v)=u'*v
1 -- 多项式核函数: K(u,v)=(gamma*u'*v + coef0)^d
2 -- RBF核函数: K(u,v)=exp(-gamma*||u-v||^2)
3 -- sigmoid核函数: K(u,v)=tanh(gamma*u'*v + coef0)
4 -- 自定义核函数
u、v为数据集中的两个样本
核函数对应参数:
线性核函数,没有专门需要设置的参数
多项式核函数,有三个参数。-d用来设置多项式核函数的最高此项次数,也就是公式中的d,默认值是3 。-g用来设置核函数中的gamma参数设置,也就是公式中的gamma,默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,默认值是0
RBF核函数,有一个参数。-g用来设置核函数中的gamma参数设置,默认值是1/k(k是类别数)。
sigmoid核函数,有两个参数。-g用来设置核函数中的gamma参数设置,默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,默认值是0。
3、参数-c cost,表示惩罚系数,设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1。
4、参数-wi weight,对各类样本的惩罚系数C加权,默认值为1。
5、参数-v n,n折交叉验证模式。
二、自定义核函数
使用-t 4参数时,可以使用自定义核函数,根据自定义核函数求出核矩阵,自定义核函数使用方法如下:比如线性核函数 是 K(u,v)=u'*v,设训练集是train_data,设训练集有150个样本 , 测试集是test_data,设测试集有120个样本,则
训练集的核矩阵: ktrain = train_data*train_data'
测试集的核矩阵: ktest = test_data*train_data'
想要使用-t 4参数还需要把样本的序列号放在核矩阵前面 ,形成一个新的矩阵:
% 使用线性核函数 K(u,v) = (u' * v)
1
2
3
4
5
6
|
Ktrain = train_data * train_data'; %求训练集核矩阵
Ktrain = [(1:150)',ktrain]; %样本的序列号放在核矩阵前面
model = svmtrain(train_label, Ktrain,
'-t 4'
); % 输入 Ktrain
Ktest = test_data*train_data'; %求测试集核矩阵
Ktest = [(1:120)', Ktest]; %样本的序列号放在核矩阵前面
[predict_label, accuracy, P1] = svmpredict(test_label,Ktest,model); % 输入Ktest
|
三、混合核函数
多项式核函数有良好的全局性能,具有很强的外推能力,并且多项式的次数越低,其外推能力越强。而Gauss径向基核函数则是局部性强,其内推能力随着参数的减小而减弱。通过把两类核函数结合起来,发挥它们各自的优点,得到学习能力和推广性都很强,兼具良好的外推和内推能力的核函数,利用多项式核函数和径向基核函数构建混合核函数分类模型,表达式为:
式中:Kpoly为多项式核函数;Krbf为径向基核函数;λ∈(0,1)。当λ较大时,混合核函数的性能表现得优良一些。
本文转自 stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1854927