иерархическая классификация с SVM

Я пытаюсь решить проблему классификации с помощью SVM, в начале мне удалось решить проблему на первом уровне, т.е. классифицировать мои данные на 2 класса (класс1 и класс2). теперь я хочу продолжить классификацию иерархически, т.е. если я хочу разделить второй класс на два класса. есть ли способ сделать это с помощью Matlab SVM. Спасибо


person user3127771    schedule 17.12.2014    source источник
comment
Не могли бы вы использовать петлю...?   -  person Dan    schedule 17.12.2014
comment
на самом деле, я использую следующий код для классификации моих данных на 2 класса model=svmtrain(lab_train,train,'-t 2 -d 2 -c 7 -g 0.5'); [labeltrain,valtrain,prectrain]= svmpredict(lab_train,train,model); [labeltest, valtest, prectest] = svmpredict (lab_test, test, model); и я не знаю, как использовать результат таким образом, что я беру только второй класс и снова классифицирую его на 2 класса   -  person user3127771    schedule 17.12.2014
comment
@user3127771 user3127771 Вам следует отредактировать свой вопрос, а не добавлять комментарий.   -  person Michaël    schedule 17.12.2014


Ответы (1)


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

Вы можете сохранить функции в матрице и использовать их в новом классификаторе.

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

x1 = 5 * rand(100,1);
y1 = 5 * rand(100,1);
data1 = [x1,y1];
x2 = -5 * rand(100,1);
y2 =  5 * rand(100,1);
data2 = [x2,y2];
x3 = -5 * rand(100,1);
y3 = -5 * rand(100,1);
data3 = [x3,y3];
plot(data1(:,1),data1(:,2),'r.'); hold on
plot(data2(:,1),data2(:,2),'bo');
plot(data3(:,1),data3(:,2),'ms');
data = [data1;data2;data3];

выше мои данные, представляющие точки в 2D-плоскости.

Теперь я разделю их на 2 класса x>0 и x<0.

label = ones(size(data,1),1);
label(1 : size(data1,1)) = -1;
c1 = svmtrain(data,label,'Kernel_Function','linear','showplot',true); 
hold on;
p1 = svmclassify(c1,data);

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

После первого классификатора я выбираю один класс (x<0) и определяю новую функцию.

и я разделю их на 2 класса, y>0 и y<0.

newdata = data(p1 == 1,:);
data1 = newdata(newdata(:,2)>=0,:);
data2 = newdata(newdata(:,2)< 0,:);
data = [data1;data2];
label = ones(size(data,1),1);
label(1 : size(data1,1)) = -1;
c2 = svmtrain(data,label,'Kernel_Function','linear','showplot',true);

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

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

person Rashid    schedule 17.12.2014
comment
для моих данных у меня есть изображения, хранящиеся в матрице формы ‹128x128x512 double›: 256 изображений для первого класса и 256 изображений для класса 2. Во-первых, я извлекаю функции из изображений. мой feture verctor имеет форму ‹512x15104 double›, и я использовал 50% для обучения и 50% для тестирования. и я классифицирую так: model=svmtrain(lab_train,train,'-t 2 -d 2 -c 7 -g 0.5'); [labeltrain,valtrain,prectrain]= svmpredict(lab_train,train,model); [labeltest, valtest, prectest] = svmpredict (lab_test, test, model); где: train — данные обучения, test — данные тестирования - person user3127771; 17.12.2014
comment
@ user3127771, вы можете добавить это к своему вопросу. Какие функции вы собираетесь использовать для второго классификатора? - person Rashid; 17.12.2014
comment
для второго классификатора я хочу использовать функции, которые были классифицированы как принадлежащие классу2 - person user3127771; 17.12.2014
comment
@ user3127771, я не это имел в виду. В моем примере я использовал значение x в качестве признака для первой классификации и значение y во второй классификации. В вашем случае я не понимаю, на чем будет основываться ваша вторая классификация. - person Rashid; 17.12.2014