如何为二进制不平衡数据集设置fitensemble?

时间:2017-03-23 22:33:09

标签: matlab machine-learning classification ensemble-learning

我一直在尝试使用随机生成的不平衡数据集测试matlab的集合方法,无论我设置的方法从未预测接近标签比率的先验/成本/权重参数。

以下是我所做的测试的一个例子。

prob = 0.9; %set label ratio to 90% 1 and 10% 0
y = (rand(100,1) < prob);
X = rand(100,3); %generate random training data with three features
X_test = rand(100,3); %generate random test data 

%A few parameter sets I've tested
B = TreeBagger(100,X,y); 
B2 = TreeBagger(100,X,y,'Prior','Empirical');
B3 = TreeBagger(100,X,y,'Cost',[0,9;1,0]);
B4 = TreeBagger(100,X,y,'Cost',[0,1;9,0]);
B5 = fitensemble(X,y,'RUSBoost', 20, 'Tree', 'Prior', 'Empirical');

在这里,我试图预测随机测试数据的训练分类器。我的假设是,由于分类器是在随机数据上训练的,如果考虑到先验,它应该平均预测接近数据集比率(1/9)。但是每个分类器预测98-100%支持'1'而不是我想要的约90%。

l1 = predict(B,X_test);
l2 = predict(B2,X_test);
l3 = predict(B3,X_test);
l4 = predict(B4,X_test);
l5 = predict(B5,X_test);

如何使用整体方法考虑先前的考虑因素?或者我有一个根本的误解吗?

1 个答案:

答案 0 :(得分:0)

我认为它不会像你想象的那样奏效。 那是因为据我了解你的训练和测试数据是随机的。那么你的分类器应该如何找到功能和标签之间的任何关系呢?

让我们把准确性作为一个测量并做一个例子。

A类:900个数据行。

B类:100个数据行。

将100%分类为A:

  

0.9 * /(0.1 + 0.9)= 0.9

获得90%的准确度。

如果你的分类器做了不同的事情,意味着试图将一些数据行分类为B他将偶然得到错误分类9倍数据阵列

让我们说20 B数据库被正确分类你会得到180左右错误的分类A数据库

B:20正确,80不正确

答:720正确,180错误

  

740 /(740 + 260)= 0.74

准确度降至74%。这不是你的分类算法想要的东西。

长话短说:如果你的数据没有得到任何信息,你的分类器总是倾向于将所有100%的A级分类