我经常通过对两个相同的法线进行分类来测试我的分类器(或者更准确地说:从相同的基础分布中抽取两个数据样本)或两个明显可分离的法线。然而,当使用非常简单的LibSVM代码和rbf内核时,即使在尝试对两个几乎相同的法线进行分类时,结果也是非常高的分类准确度:
clear all; close all; clc
gamma = 100;
% dummy data
a = 15;
b = 50;
x = zeros(200,2);
x(1:100,1) = a.*randn(100,1) + b;
x(101:200,1) = a.*randn(100,1) + b;
% labels
y(1:100,1) = 1;
y(101:200) = 2;
% Libsvm options
% -s 0 : classification
% -t 2 : RBF kernel
% -g : gamma in the RBF kernel
model = svmtrain(y, x, sprintf('-s 0 -t 2 -g %g', gamma));
% Display training accuracy
[predicted_label, accuracy, decision_values] = svmpredict(y, x, model);
为什么?使用Matlab的svmtrain,无论使用哪种内核,我都能获得机会级别的准确度(大约50%)。此外,LibSVM为我自己的数据集提供了截然不同的结果,即使我随机交换数据集的标签也具有非常高的精度。
由于