SVM 분류 문제를 해결하기 위해 처음에는 문제를 해결하기 위해 즉, 2 가지 클래스 (class1 및 class2)로 데이터를 분류했습니다. 이제는 계층 적으로 분류를 계속하고 싶습니다. 즉 두 번째 클래스를 두 개의 클래스로 분리하고 싶습니다. Matlab SVM으로 그걸 할 수있는 방법이 있습니까? 고맙습니다.SVM을 사용한 계층 분류
답변
첫 분류 후에는 새로운 분류 기준에 대한 새로운 기능을 정의해야하므로 귀하의 기능에 대해 언급하지 않았습니다.
기능을 매트릭스에 저장하여 새 분류기에서 사용할 수 있습니다.
문제가 무엇인지 정확히 알지 못하므로 루프가없는 예제를 제공했지만 원하는 경우 루프로 쉽게 변경할 수 있습니다.
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>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
)를 선택하고 새로운 기능을 정의합니다.
두 클래스, 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);
내가 훈련을 위해 모든 데이터를 사용, 당신은 또한 당신의 문제가를 조정할 수 있습니다.
아주 좋은 !!! 내 데이터에 +1 – rayryeng
양식의 행렬에 저장된 이미지가 있습니다. <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
@user3127771입니다. 질문에 추가 할 수 있습니다. 두 번째 분류기에 어떤 기능을 사용할 예정입니까? – Rashid
루프를 사용할 수 있습니까? ...? – Dan
실제로, 내 데이터를 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
@ user3127771 주석을 추가하는 대신 질문을 편집해야한다. –