#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
в отличие от функции статистики pkgsvmtrain
? (которая просто предупреждает вас, что эта функция еще не реализована)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», которая состоит только из одной метки. Алгоритм обнаруживает, что данных для обучения нет, и останавливается.
Если вы преобразуете некоторые метки в нули, то алгоритм выполняется так, как ожидалось.