Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何为二进制不平衡数据集设置fitensemble?_Matlab_Machine Learning_Classification_Ensemble Learning - Fatal编程技术网

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

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);

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

如何使集合方法考虑先验知识?还是我有一个根本性的误解?

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

让我们以准确度为衡量标准,并举例说明

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);