Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

LPBoost y TotalBoost para pequeños conjuntos

Este ejemplo muestra cómo obtener las ventajas de los algoritmos y.LPBoostTotalBoost Estos algoritmos comparten dos características beneficiosas:

  • Son Autoterminación, lo que significa que no tiene que averiguar cuántos miembros incluir.

  • Producen conjuntos con algunos pesos muy pequeños, lo que le permite eliminar de forma segura a los miembros del conjunto.

Cargue los datos

Cargue el conjunto de datos.ionosphere

load ionosphere

Cree los conjuntos de clasificación

Cree conjuntos para clasificar los datos mediante los algoritmos, y, para la comparación,.ionosphereLPBoostTotalBoostAdaBoostM1 Es difícil saber cuántos miembros incluir en un conjunto. Para y, trate de usar.LPBoostTotalBoost500 Para la comparación, utilice también para.500AdaBoostM1

Los alumnos débiles predeterminados para impulsar métodos son árboles de decisión con la propiedad establecida en.MaxNumSplits10 Estos árboles tienden a caber mejor que los tocones de árboles (con la división máxima) y pueden sobreajustarse más.1 Por lo tanto, para evitar el sobreajuste, utilice tocones de árboles como estudiantes débiles para los conjuntos.

rng('default') % For reproducibility T = 500; treeStump = templateTree('MaxNumSplits',1); adaStump = fitcensemble(X,Y,'Method','AdaBoostM1','NumLearningCycles',T,'Learners',treeStump); totalStump = fitcensemble(X,Y,'Method','TotalBoost','NumLearningCycles',T,'Learners',treeStump); lpStump = fitcensemble(X,Y,'Method','LPBoost','NumLearningCycles',T,'Learners',treeStump);  figure plot(resubLoss(adaStump,'Mode','Cumulative')); hold on plot(resubLoss(totalStump,'Mode','Cumulative'),'r'); plot(resubLoss(lpStump,'Mode','Cumulative'),'g'); hold off xlabel('Number of stumps'); ylabel('Training error'); legend('AdaBoost','TotalBoost','LPBoost','Location','NE');

Los tres algoritmos logran una predicción perfecta de los datos de entrenamiento después de un tiempo.

Examine el número de miembros en los tres conjuntos.

[adaStump.NTrained totalStump.NTrained lpStump.NTrained]
ans = 1×3

   500    52    75

entrenado a todos los miembros.AdaBoostM1500 Los otros dos algoritmos dejaron de entrenar temprano.

Cross valida los conjuntos

Cross valida los conjuntos para determinar mejor la precisión del conjunto.

cvlp = crossval(lpStump,'KFold',5); cvtotal = crossval(totalStump,'KFold',5); cvada = crossval(adaStump,'KFold',5);  figure plot(kfoldLoss(cvada,'Mode','Cumulative')); hold on plot(kfoldLoss(cvtotal,'Mode','Cumulative'),'r'); plot(kfoldLoss(cvlp,'Mode','Cumulative'),'g'); hold off xlabel('Ensemble size'); ylabel('Cross-validated error'); legend('AdaBoost','TotalBoost','LPBoost','Location','NE');

Los resultados muestran que cada algoritmo de impulso logra una pérdida de 10% o inferior con 50 miembros del conjunto.

Compactar y quitar miembros del conjunto

Para reducir el tamaño del conjunto, compactarlos y luego usarlos.removeLearners La pregunta es, ¿cuántos alumnos debe eliminar? Las curvas de pérdida validadas por Cruz le dan una medida. Para otro, examine las ponderaciones del alumno para y después de la compactación.LPBoostTotalBoost

cada = compact(adaStump); clp = compact(lpStump); ctotal = compact(totalStump);  figure subplot(2,1,1) plot(clp.TrainedWeights) title('LPBoost weights') subplot(2,1,2) plot(ctotal.TrainedWeights) title('TotalBoost weights')

Ambos y muestran puntos claros donde los pesos miembros del conjunto se vuelven insignificantes.LPBoostTotalBoost

Quite los miembros del conjunto sin importancia.

cada = removeLearners(cada,150:cada.NTrained); clp = removeLearners(clp,60:clp.NTrained); ctotal = removeLearners(ctotal,40:ctotal.NTrained);

Compruebe que la eliminación de estos alumnos no afecte a la precisión del conjunto en los datos de entrenamiento.

[loss(cada,X,Y) loss(clp,X,Y) loss(ctotal,X,Y)]
ans = 1×3

     0     0     0

Compruebe los tamaños de conjunto compactos resultantes.

s(1) = whos('cada'); s(2) = whos('clp'); s(3) = whos('ctotal'); s.bytes
ans = 556787 
ans = 222403 
ans = 148103 

Los tamaños de los conjuntos compactos son aproximadamente proporcionales al número de miembros en cada uno.

Consulte también

| | | | | |

Temas relacionados