ens = fitensemble(X,Y,method,nlearn,learners) crée un modèle d'ensemble qui prédit les réponses aux données. L'ensemble est constitué de modèles listés dans learners.
Première partie
Vous devez utiliser prior
dans l'ordre alphabétique de vos étiquettes de classe.
Donc si les étiquettes sont ['A','B']
vous utilisez 'prior',[P(A) P(B)]
,
ou si les étiquettes sont ['true','false']
vous utilisez 'prior',[P(false) P(true)]
,
ou si les étiquettes sont [-1 10]
vous utilisez 'prior',[P(-1) P(10)]
.
Deuxième partie
A propos de la classnames
cette option est utilisée pour que vous puissiez appeler fitensemble
pour un nombre réduit de classes dans vos données.
Imaginez que vous avez quatre classes A,B,C,D
donc votre Y
sera quelque chose comme :
Y = [A;A;B;D;B;A;C;A;A;A;D, ... ];
Vous pouvez maintenant écrire 'classnames',['A';'B'],
si vous voulez fitensemble
pour seulement deux classes et ce sera la même chose que 'classnames',['B';'A'],
.
Je sais que c'est une réponse tardive, mais j'espère que cela vous aidera.
Exemple
J'ai utilisé la base de données 'fisheriris', qui comporte trois classes ( setosa',
versicolor ,
virginica`).
parce qu'il a 150
cas et 50
de chaque classe, j'ai randomisé les données et sélectionné 100
échantillons.
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;
En trueprior = [0.32,0.30,0.38]
montre les vraies probabilités antérieures.
Dans le code suivant, j'ai formé trois fitensembles
le premier avec les options par défaut, de sorte que la probabilité antérieure est de empirical
(est identique à trueprior
) ; le second est formé avec pprior
réglé sur trueprior
qui aura les mêmes résultats que le poing (parce que trueprior
est dans l'ordre alphabétique des étiquettes de classe). La troisième est entraînée avec un ordre non-alphabétique et montre des résultats différents des deux premières.
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]()
J'ai également formé un fitensemble
avec seulement deux classes utilisant classnames
option
ada4 = fitensemble(meas,species,'AdaBoostM1',20,'tree','classnames',...
{'versicolor','virginica'});
Comme preuve AdaBoosM1
qui ne supporte pas plus de deux classes fonctionne bien ici avec seulement deux classes.