gpt4 book ai didi

matlab - fitensemble 中先验向量的正确顺序是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:06 24 4
gpt4 key购买 nike

当使用 matlabs fitensemble 学习分类器时,我可以指定参数 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]) ?

我在 documentation 中找不到答案.

perfcurve 的文档更具体:

Prior: Either string or array with two elements. It represents prior probabilities for the positive and negative class, respectively. Default is 'empirical', that is, perfcurve derives prior probabilities from class frequencies. If set to 'uniform', perfcurve sets all prior probabilities equal.

最佳答案

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 并且它与'类名',['B';'A'],

我知道这是一个迟到的答案,我希望它能有所帮助。

示例

我使用了“fisheriris”数据库,它具有三个类(setosa'、versicolorvirginica`)。

因为它有 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');

enter image description here

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

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

作为不支持多于两个类的 AdaBoosM1 的证明,这里仅用两个类就可以正常工作。

关于matlab - fitensemble 中先验向量的正确顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18270650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com