ens = fitensemble(X,Y,method,nlearn,learners) 创建一个集成模型来预测对数据的响应。集成由学习者中列出的模型组成。
第一部分
您必须按照类标签的字母顺序使用prior。
所以如果标签是['A','B'],你就用'prior',[P(A) P(B)],
或者如果标签是['true','false'],则使用'prior',[P(false) P(true)],
或者如果标签是[-1 10],则使用'prior',[P(-1) P(10)]。
第二部分
关于classnames,使用此选项以便您可以调用fitensemble 来减少数据中的类。
假设您有四个班级A,B,C,D,那么您的Y 将类似于:
Y = [A;A;B;D;B;A;C;A;A;A;D, ... ];
现在你可以写'classnames',['A';'B'],,如果你想要fitensemble只写两个类,它会和'classnames',['B';'A'],一样。
我知道这是一个迟到的答案,希望对您有所帮助。
示例
我使用了 'fisheriris' 数据库,它包含三个类 (setosa',versicolor,virginica`)。
因为每个类别都有150 个案例和50,所以我将数据随机化并选择了100 个样本。
load fisheriris
rng(12);
idx = randperm(size(meas,1));
meas = meas(idx,:);
species = species(idx,:);
meas = meas(1 : 100,:);
species = species(1 : 100,:);
trueprior = [ sum(strcmp(species,'setosa')),...
sum(strcmp(species,'versicolor')),...
sum(strcmp(species,'virginica'))] / 100;
trueprior = [0.32,0.30,0.38] 显示真实的先验概率。
在下面的代码中,我训练了三个fitensembles,第一个使用默认选项,所以先验概率是empirical(与trueprior相同);第二个是用pprior 设置为trueprior 训练的,这将与第一个结果相同(因为trueprior 是按类标签的字母顺序排列的)。第三个是按非字母顺序训练的,结果与前两个不同。
ada1 = fitensemble(meas,species,'AdaBoostM2',20,'tree');
subplot(311)
plot(resubLoss(ada1,'mode','individual'));
title('Resubstitution error for default prior (empirical)');
ada2 = fitensemble(meas,species,'AdaBoostM2',20,'tree','prior',trueprior);
subplot(312)
plot(resubLoss(ada2,'mode','individual'));
title('Resubstitution error for prior with alphabetical order of class labels');
ada3 = fitensemble(meas,species,'AdaBoostM2',20,'tree','prior',trueprior(end:-1:1));
subplot(313)
plot(resubLoss(ada3,'mode','individual'));
title('Resubstitution error for prior with random order');
我还使用classnames 选项训练了一个只有两个班级的fitensemble
ada4 = fitensemble(meas,species,'AdaBoostM1',20,'tree','classnames',...
{'versicolor','virginica'});
作为一个证明AdaBoosM1,不支持两个以上的类在这里可以正常工作,只有两个类。