【问题标题】:How to setup fitensemble for binary imbalanced datasets?如何为二进制不平衡数据集设置 fitensemble?
【发布时间】:2017-08-16 17:24:03
【问题描述】:

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

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

【问题讨论】:

    标签: matlab machine-learning classification ensemble-learning


    【解决方案1】:

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

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

    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 类

    【讨论】:

    • 我没有测试数据的任何标签。使用测试数据来查看预测标签是否具有 90/10 分布的目的,这是一个适用于不平衡数据集的分类器应该给我的。
    • 但是你的训练数据必须有标签。只需尝试使用一些非随机的训练集,例如来自archive.ics.uci.edu/ml/index.html 并通过从一类中删除数据来使其不平衡。或者你有理由使用随机数据?
    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 2023-03-12
    • 2021-06-28
    • 1970-01-01
    • 2022-07-17
    • 1970-01-01
    • 2018-01-09
    • 2018-09-18
    相关资源
    最近更新 更多