Иерархическая классификация с SVM
Я пытаюсь решить проблему классификации с SVM, вначале мне удалось решить проблему на первом уровне, то есть классифицировать мои данные на 2 класса (class1 и class2). Теперь я хочу продолжить классификацию иерархически, т.е. если я хочу разделить второй класс на два класса. Есть ли способ сделать это с помощью Matlab SVM. благодарю вас
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);
Я использовал все данные для обучения, вы также можете приспособить это к вашей проблеме.