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



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

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

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

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

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 类进行分类

最新更新