0

我一直在尝试使用随机生成的不平衡数据集测试 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);

如何让集成方法考虑先验?还是我有根本的误解?

4

1 回答 1

0

我不认为它可以像你想的那样工作。那是因为据我了解,您的训练和测试数据是随机的。那么你的分类器应该如何找到特征和你的标签之间的任何关系呢?

让我们以准确性为衡量标准并举个例子。

A 类:900 个数据行。

B 类:100 个数据行。

将 100% 归类为 A:

0.9*/(0.1+0.9) = 0.9

为您提供 90% 的准确率。

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

假设 20 个 B 数据行被正确分类,您将得到大约 180 个错误的分类 A 数据行

B: 20 正确,80 错误

答:720 正确,180 错误

740/(740+260) = 0.74

准确度下降到 74%。这不是您的分类算法想要的。

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

于 2017-03-24T12:44:45.510 回答