1. libsvm 支持的SVM模型
官网地址:LIBSVM – A Library for Support Vector Machines
libsvm 支持的 SVM 模型如下(C:classification,R:regression):
- C-SVC(C-support vector classification),
- nu-SVC(nu-support vector classification),
- one-class SVM(distribution estimation),
- epsilon-SVR(epsilon-support vector regression),
- nu-SVR(nu-support vector regression)
2. 一个简单demo
%% 加载数据到内存;
load heart_scale.mat
X = heart_scale_inst;
y = heart_scale_label;
N = size(X, 1);
%% 将数据集划分为训练集和测试集
idx = randperm(N); % 对全部样本的一次全排列;
prop = floor( .75*N);
train_X = X(1:prop, :) ;
test_X = X(prop+1:end, :);
train_y = y(1:prop, :);
test_y = y(prop+1:end, :);
%% 通过训练集进行训练
model = svmtrain(train_y, train_X, '-s 0 -t 2 -c 1.2 -g 2.8')
% 将训练好的模型作用在训练集,查看准确率情况
[predicted_labels, accuracy, decision_values] = svmpredict(train_y, train_X, model);
%% 在真实的测试集上进行测试
predicted_labels = svmpredict(test_y, test_X, model);
accuracy = sum(predicted_labels == test_y) / length(test_y)
- svmtrain 参数的意义:
- -s svm类型:SVM设置类型(默认0)
% 0 – C-SVC
% 1 –v-SVC
%2 – 一类SVM
%3 – e -SVR
% 4 – v-SVR - -t 核函数类型:核函数设置类型(默认2)
% 0 – 线性:u’v
% 1 – 多项式:(r*u’v + coef0)^degree
% 2 – RBF函数:exp(-r|u-v|^2)
% 3 –sigmoid:tanh(r*u’v + coef0) - -c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)
- -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)
- -s svm类型:SVM设置类型(默认0)
常见问题的解决
- load heart_scale 数据时的“ASCII 文件 heart_scale 的第 3 行中的列数必须与前面行中的列数相同”。