Matlab 如何为二进制不平衡数据集设置fitensemble?
我一直在尝试用随机生成的不平衡数据集测试matlab的集成方法,无论我设置了什么先验/成本/权重参数,该方法都无法预测接近标签比率的结果 下面是我做的测试的一个例子Matlab 如何为二进制不平衡数据集设置fitensemble?,matlab,machine-learning,classification,ensemble-learning,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);
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');
如何使集合方法考虑先验知识?还是我有一个根本性的误解?我不认为它能像你想的那样起作用。 这是因为据我所知,你的训练和测试数据是随机的。那么,分类器应该如何找到特征和标签之间的关系呢 让我们以准确度为衡量标准,并举例说明 A类:900个数据行 B类:100个数据行 将100%分类为: 0.9*/(0.1+0.9)=0.9 使您获得90%的准确率 如果您的分类器做了一些不同的事情,这意味着尝试将一些数据行分类到B,他将偶然获得9倍于错误分类的A数据行 假设20B数据行被正确分类,您将得到大约180个错误的a分类数据行 B:20对,80不对 答:720对,180错 740/(740+260)=0.74 准确率下降到74%。这不是你的分类算法想要的
长话短说:如果您的数据中没有任何信息,那么您的分类器将始终倾向于对所有100%A类进行分类我没有任何测试数据标签。使用测试数据查看预测标签是否具有90/10分布的目的,一个在不平衡数据集上工作的分类器应该给出这个分布。但是您的训练数据上必须有标签。只需尝试使用一些非随机的训练集,例如,从一个类中删除数据即可。或者你有理由使用随机数据吗?
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);