Постройте результат 10-кратной перекрестной проверки в SVM «один против всех» (с использованием LibSVM)

Я хочу отобразить результат libsvmtrain_ova по этой ссылке: 10-кратная перекрестная проверка в SVM "один против всех" (с использованием LibSVM)

, я использовал этот код в libsvmtrain_ova, но я думаю, что он не работает должным образом.

hold off
figure();
for j=1:numLabels
   w = models{j}.SVs' * models {j}.sv_coef;
   b = -models{j}.rho;
   c1 = find(double(labels==1) == 1);
   c2= find(double(labels==2) == 1);
   c3=find(double(labels==3) == 1);
   plot(X(c1,1), X(c1,2), 'ko', 'MarkerFaceColor', 'b'); hold on;
   plot(X(c2,1), X(c2,2), 'ko', 'MarkerFaceColor', 'g');hold on;
   plot(X(c3,1), X(c3,2), 'ko', 'MarkerFaceColor', 'r')
   % Plot the decision boundary
   plot_x = linspace(min(X(:,1)), max(X(:,1)), 30);
   plot_y = (-1/w(2))*(w(1)*plot_x + b);
   plot(plot_x, plot_y, 'k-', 'LineWidth', 2)
end
title(sprintf('SVM Linear Classifier with C = %g', 1), 'FontSize', 12)

person Maryam Bagheri    schedule 29.12.2012    source источник
comment
Можете ли вы рассказать нам об ошибке, которую вы получаете?   -  person Zahra Ezati    schedule 29.12.2012
comment
нанесенные опорные векторы очень низкие, и я думаю, что результат не распознается в правильной схеме, вы тестировали этот код?   -  person Maryam Bagheri    schedule 29.12.2012
comment
Я не мог получить никакого результата. Я предлагаю вам отредактировать свой вопрос и предоставить дополнительную информацию о вашей проблеме.   -  person Zahra Ezati    schedule 29.12.2012
comment
я хочу построить результат этой ссылки 10-кратной перекрестной проверки в SVM «один против всех» (с использованием LibSVM) для обучения.   -  person Maryam Bagheri    schedule 29.12.2012
comment
Я сам не смог найти решения для построения графика один против всех с помощью libsvm.Это toolbox предоставляет хорошие возможности построения графиков для одного или всех SVM, но он не имеет ничего общего с LibSVM. Если вы не хотите использовать libsvm, я настоятельно рекомендую stprtool.   -  person Zahra Ezati    schedule 29.12.2012
comment
нет, я хочу использовать libsvm, я мог бы построить результат с этим кодом в libsvmtrain_ova, но результат не в правильном формате, который мне нужен, пожалуйста, скопируйте этот код в libsvmtrain_ova перед этой строкой: mdl = struct('models',{ модели}, 'метки',метки); и проверьте построенный результат   -  person Maryam Bagheri    schedule 29.12.2012


Ответы (1)


Ваш код не близок к работе, похоже, вы упускаете много концептуальных проблем. Я собираюсь предположить, что вы понимаете, что:

  • Данные диафрагмы (см. связанные вопрос) является 4-мерным. Линейный классификатор в этом пространстве представляет собой гиперплоскость в 4 измерениях, и вы не можете построить 4-мерную функцию в 2-мерной плоскости.
  • Результатом построения классификатора «один против всех» для 3 классов являются три гиперплоскости.
  • Нет смысла отображать результат 10-кратной перекрестной проверки как таковой, поскольку нет ни одного результата, который можно было бы построить, вы можете построить каждый промежуточный результат, но вы далеки от того, чтобы достичь этого.

Тем не менее, я думаю, что здесь есть реальный вопрос. Я возьму два измерения данных радужной оболочки и нанесу на них разделяющие гиперплоскости (в данном случае линии). Когда у вас есть связанный код все, что вам нужно сделать, это следующее:

  • Выберите два измерения, в моем случае я выбрал измерения 3 и 4 данных радужной оболочки.
  • Разделите данные на две части, одну часть для обучения и одну часть для тестирования.
  • Сделайте немного математики и постройте точки и линии.

Это код:

S = load('fisheriris');
data = zscore(S.meas);
data = data(:,3:4);
labels = grp2idx(S.species);

opts = '-s 0 -t 2 -c 1 -g 0.25';    %# libsvm training options

indices = crossvalidation(labels, 2); 
testIdx = (indices == 1); trainIdx = ~testIdx;
mdl = libsvmtrain_ova(labels(trainIdx), data(trainIdx,:), opts);
figure(1);
numlabels = numel(unique(labels));
testlabels = labels(testIdx);
testdata = data(testIdx,:);
style = {'b+','r+','g+'};
stylel = {'b-','r-','g-'};
for i=1:numlabels,
    plot(testdata(find(testlabels==i),1),testdata(find(testlabels==i),2),style{i});
    hold on;
    w = mdl.models{i}.SVs' * mdl.models{i}.sv_coef;
    b = -mdl.models{i}.rho;
    x = -2:0.1:2
    y = -(w(1)/w(2))*x - (b/w(2));
    plot(x,y,stylel{i});
end

grid on;
hold off;

а это сюжет:

введите здесь описание изображения

каждая цветная линия должна отделять точки указанного цвета от всех других цветов. Обратите внимание, что линии были получены путем обучения, а точки получены из данных тестирования, на которых мы не обучались.

person carlosdc    schedule 31.12.2012
comment
спасибо за ваш ответ, как мы можем показать векторы поддержки в этом графике? - person Maryam Bagheri; 01.01.2013