4

当使用 matlabsfitensemble学习分类器时,我可以指定参数prior以及参数classnames

两个向量中元素的顺序是否相同?真/假类的标准值是多少?

更具体地说:假设真类的先验概率为0.6,假类的先验概率为0.4;我应该使用:

ens = fitensemble(...,'prior',[0.6 0.4])或者

ens = fitensemble(...,'prior',[0.4 0.6])或者

ens = fitensemble(...,'prior',[0.4 0.6],'classnames',[true false])或者

ens = fitensemble(...,'prior',[0.4 0.6],'classnames',[false,true])?

我在文档中找不到答案。

perfcurve的文档更具体:

Prior:具有两个元素的字符串或数组。它分别表示正类和负类的先验概率。默认为“经验”,即 perfcurve 从类频率中得出先验概率。如果设置为“统一”,则 perfcurve 将所有先验概率设置为相等。

4

1 回答 1

1

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第二个是用set训练的,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');

在此处输入图像描述

我还使用选项训练了一个fitensemble只有两个课程的课程classnames

ada4 = fitensemble(meas,species,'AdaBoostM1',20,'tree','classnames',...   
       {'versicolor','virginica'});

作为AdaBoosM1不支持两个以上类的证明,这里只有两个类可以正常工作。

于 2014-11-01T11:12:33.890 回答