1

我正在尝试使用 SVM 处理分类问题,一开始我设法解决了第一级的问题,即将我的数据分为 2 个类(class1 和 class2)。现在我想继续分层分类,即我想将第二类分为两个类。有没有办法用 Matlab SVM 做到这一点。谢谢你

4

1 回答 1

3

你没有说任何关于你的特征的事情,因为在第一次分类之后,你必须为新的分类器定义新的特征。

您可以将特征存储在矩阵中并在新分类器中使用它们。

由于我不确切知道您的问题是什么,因此我提供了一个没有循环的示例,但如果您愿意,您可以轻松更改为循环。

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

以上是我的数据,代表二维平面中的点。

现在我将它们分为 2 类x>0x<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);

在此处输入图像描述

我使用所有数据进行培训,您也可以根据您的问题进行调整。

于 2014-12-17T14:54:28.927 回答