Как выполнить регрессию с помощью функции svmtrain () в libsvm (какие настройки)? что такое форма матрицы меток?

#matlab #octave

#matlab #октава

Вопрос:

Libsvm — это небольшая библиотека для машин с опорными векторами, написанная на C. вот ссылка на источник libsvm, который я использовал ( https://github.com/cjlin1/libsvm ). Может ли кто-нибудь исправить параметры в функции svmtrain () или матрице меток в следующем коде, чтобы успешно выполнить регрессию, поскольку на выходе указано, что оптимизация завершена итерацией # 0.

Цель кода перед функцией svmtrain() состоит в том, чтобы упорядочить водяные пиксели подводного цветного изображения (некоторая прямоугольность в изображении) в матрицу (m x 3) в качестве данных. Матрица меток представляет собой вектор (m x 1), заданный равным 1; { вот ссылка на подводное изображение, уравнение компенсации красного канала }

вывод:

 optimization finished, #iter = 0
nu = 0.000000
obj = 0.000000, rho = -1.000000
nSV = 0, nBSV = 0
 

вот код:

     ##to load image package
    pkg load image
    ## add the path to the matlab folder inside the LIBSVM package source
    addpath('./libsvm-master/libsvm-master/matlab')
    ##load libsvm 
    pkg load statistics
    ##load an under water rgb image
    im = imread('9554.png');
    im=double(im);
    startrow=1;
    startcol=1;
    endrow=100;
    endcol=100;
    ## save rgb pixels in m x 3 form
    data=zeros(endrow*endcol,3,'double');
    for i=startrow:endrow
      for j=startcol:endcol
        data((i-1)*endrow j,1:3)=im(i,j,1:3);
      end
    end
    ## m x 1 label matrix, all preset to 1
    label_data=ones(size(data,1),1,'double');
    model=svmtrain(label_data,data,'-s 3 -c 1');
 

Комментарии:

1. вы уверены, что вызываете libsvm svmtrain в отличие от функции статистики pkg svmtrain ? (которая просто предупреждает вас, что эта функция еще не реализована)

2. @Tasos Papastylianou Для успешного запуска функции svmtrain(), определенной в libsvm, из github.com/cjlin1/libsvm , вы должны создать библиотеку в соответствии с файлом readme. Сделать это очень просто. Для этого нужно только запустить make.m в папке matlab внутри исходного кода пакета из github. Я все еще не могу найти варианты регрессии, но мне удалось использовать две метки вместо одной метки. Этот способ работал успешно. Вот входные аргументы и параметры: Model = svmtrain ( label_data , data , ‘-c 1 -g 0.07’);

3. Итак, ответ на мой вопрос заключается в том, что вы запустили его из каталога пакетов? Хотите поделиться своим входным изображением, чтобы я мог запустить ваш код на своей машине?

4. @Tasos Papastylianou да, для успешного запуска кода в Octave / Matlab и во избежание получения ошибки «неопределенная функция» необходимо добавить путь к папке matlab внутри исходного кода пакета LIBSVM. например, addpath(‘/ путь к папке matlab’)

5. кстати, это случайно не связано с проблемой ImageClef? 🙂

Ответ №1:

Благодарим вас за предоставление изображения и дополнительной информации.

Я думаю, проблема просто в том, что вы передаете матрицу «labels», которая состоит только из одной метки. Алгоритм обнаруживает, что данных для обучения нет, и останавливается.

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