Matlab - vlfeat - vl_pegasos (SVM) классификация
Я использую библиотеку VLFeat в Matlab для некоторой работы по анализу изображений. Я хочу использовать их реализацию Pegasos SVM из-за некоторых ядер, которые они реализовали, в частности, ядра Chi2.
Тем не менее, я нахожу документацию, оставив меня в замешательстве. После этого урока у меня есть модель w
и уклон b
, но как я могу использовать это для классификации моих тестовых данных?
Мои стартовые данные примерно так (размеры)..
size(train_data) =
200 210
size(train_labels) =
1 210
size(test_data) =
200 140
size(test_labels) =
1 140
Я могу построить набор данных с..
dataset = vl_maketrainingset(train_data, int8(train_labels))
давая мне..
dataset =
data: [200x210 double]
labels: [1x210 int8]
и тогда я могу построить модель..
[w b info] = vl_svmpegasos(dataset,0.01,'MaxIterations',5000);
w
моя модель (w'eights?) имеет размер вектора 200 x 1
со значениями от 0 до 1.
Я считаю, что мне нужно умножить этот вектор на мой test_data
чтобы получить какие-то оценки, но я не уверен, что значение этих результатов будет.
Любое направление высоко ценится.
1 ответ
Вы смотрели на их пример кода Caltech 101? Он использует pegasos и дает хорошую оценку результатов.
Вот соответствующий фрагмент кода:
% --------------------------------------------------------------------
% Train SVM
% --------------------------------------------------------------------
lambda = 1 / (conf.svm.C * length(selTrain)) ;
w = [] ;
for ci = 1:length(classes)
perm = randperm(length(selTrain)) ;
fprintf('Training model for class %s\n', classes{ci}) ;
y = 2 * (imageClass(selTrain) == ci) - 1 ;
data = vl_maketrainingset(psix(:,selTrain(perm)), int8(y(perm))) ;
[w(:,ci) b(ci)] = vl_svmpegasos(data, lambda, ...
'MaxIterations', 50/lambda, ...
'BiasMultiplier', conf.svm.biasMultiplier) ;
model.b = conf.svm.biasMultiplier * b ;
model.w = w ;
% --------------------------------------------------------------------
% Test SVM and evaluate
% --------------------------------------------------------------------
% Estimate the class of the test images
scores = model.w' * psix + model.b' * ones(1,size(psix,2)) ;
[drop, imageEstClass] = max(scores, [], 1) ;
% Compute the confusion matrix
idx = sub2ind([length(classes), length(classes)], ...
imageClass(selTest), imageEstClass(selTest)) ;
confus = zeros(length(classes)) ;
confus = vl_binsum(confus, ones(size(idx)), idx) ;