2014-12-17 9 views
0

SVM 분류 문제를 해결하기 위해 처음에는 문제를 해결하기 위해 즉, 2 가지 클래스 (class1 및 class2)로 데이터를 분류했습니다. 이제는 계층 적으로 분류를 계속하고 싶습니다. 즉 두 번째 클래스를 두 개의 클래스로 분리하고 싶습니다. Matlab SVM으로 그걸 할 수있는 방법이 있습니까? 고맙습니다.SVM을 사용한 계층 분류

+0

루프를 사용할 수 있습니까? ...? – Dan

+0

실제로, 내 데이터를 2 개의 클래스로 분류하기 위해 folowing 코드를 사용합니다. 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 클래스로 분류하는 방법으로 결과를 사용하는 방법을 모른다. – user3127771

+1

@ user3127771 주석을 추가하는 대신 질문을 편집해야한다. –

답변

2

첫 분류 후에는 새로운 분류 기준에 대한 새로운 기능을 정의해야하므로 귀하의 기능에 대해 언급하지 않았습니다.

기능을 매트릭스에 저장하여 새 분류기에서 사용할 수 있습니다.

문제가 무엇인지 정확히 알지 못하므로 루프가없는 예제를 제공했지만 원하는 경우 루프로 쉽게 변경할 수 있습니다.

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 평면의 점을 나타냅니다.

이제 두 클래스 x>0x<0으로 분류 할 것입니다. 첫 번째 분류 한 후

enter image description here

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)를 선택하고 새로운 기능을 정의합니다.

두 클래스, y>0y<0으로 분류 할 것입니다.

enter image description here

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); 

내가 훈련을 위해 모든 데이터를 사용, 당신은 또한 당신의 문제가를 조정할 수 있습니다.

+0

아주 좋은 !!! 내 데이터에 +1 – rayryeng

+0

양식의 행렬에 저장된 이미지가 있습니다. <128x128x512 double> : 256 imagefor 첫 번째 클래스와 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은 교육 데이터이며, 테스트는 테스트 데이터 – user3127771

+0

@user3127771입니다. 질문에 추가 할 수 있습니다. 두 번째 분류기에 어떤 기능을 사용할 예정입니까? – Rashid