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.

templateTree

Cree una plantilla de árbol de decisión

Descripción

ejemplo

t = templateTree Devuelve una plantilla de alumno de árbol de decisión predeterminada adecuada para entrenar un conjunto (árboles de decisión potenciados y en bolsas) o un modelo multiclase de código de salida de corrección de errores (ECOC). Especifique como aprendiz utilizando:t

Si especifica una plantilla de árbol de decisión predeterminada, el software utiliza los valores predeterminados para todos los argumentos de entrada durante el entrenamiento. Es una buena práctica especificar el tipo de árbol de decisión, por ejemplo, para una plantilla de árbol de clasificación, especifique.'Type','classification' Si especifica el tipo de árbol de decisión y se visualiza en la ventana de comandos, todas las opciones excepto aparecen vacías ().tType[]

ejemplo

t = templateTree(Name,Value) crea una plantilla con opciones adicionales especificadas por uno o más argumentos de par nombre-valor.

Por ejemplo, puede especificar el algoritmo utilizado para encontrar la mejor división en un predictor categórico, el criterio de división o el número de predictores seleccionados para cada división.

Si se muestra en la ventana de comandos, todas las opciones aparecerán vacías (), excepto las que especifique mediante los argumentos de par nombre-valor.t[] Durante el entrenamiento, el software utiliza valores predeterminados para las opciones vacías.

Ejemplos

contraer todo

Cree una plantilla de árbol de decisión con divisiones sustitutas y utilice la plantilla para entrenar un conjunto utilizando datos de ejemplo.

Cargue el conjunto de datos de iris de Fisher.

load fisheriris

Cree una plantilla de árbol de decisión de tocones de árbol con divisiones sustitutas.

t = templateTree('Surrogate','on','MaxNumSplits',1)
t =  Fit template for Tree.        Surrogate: 'on'     MaxNumSplits: 1  

Las opciones para el objeto de plantilla están vacías excepto y.SurrogateMaxNumSplits Al pasar a la función de entrenamiento, el software rellena las opciones vacías con sus respectivos valores predeterminados.t

Especifique como un factor débil para un conjunto de clasificación.t

Mdl = fitcensemble(meas,species,'Method','AdaBoostM2','Learners',t)
Mdl =    classreg.learning.classif.ClassificationEnsemble              ResponseName: 'Y'     CategoricalPredictors: []                ClassNames: {'setosa'  'versicolor'  'virginica'}            ScoreTransform: 'none'           NumObservations: 150                NumTrained: 100                    Method: 'AdaBoostM2'              LearnerNames: {'Tree'}      ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'                   FitInfo: [100x1 double]        FitInfoDescription: {2x1 cell}     Properties, Methods  

Muestra el error de clasificación errónea en la muestra (reenvío).

L = resubLoss(Mdl)
L = 0.0333 

Una forma de crear un conjunto de árboles de regresión potenciados que tiene un rendimiento predictivo satisfactorio es ajustar el nivel de complejidad del árbol de decisión mediante la validación cruzada. Mientras busca un nivel de complejidad óptimo, ajuste la tasa de aprendizaje para minimizar el número de ciclos de aprendizaje también.

En este ejemplo se encuentran manualmente los parámetros óptimos mediante la opción de validación cruzada (el argumento de par nombre-valor) y la función.'KFold'kfoldLoss Como alternativa, puede usar el argumento de par nombre-valor para optimizar automáticamente los hiperparámetros.'OptimizeHyperparameters' Ver.Optimizar conjunto de regresión

Cargue el conjunto de datos.carsmall Elija el número de cilindros, el volumen desplazado por los cilindros, la potencia y el peso como predictores de ahorro de combustible.

load carsmall Tbl = table(Cylinders,Displacement,Horsepower,Weight,MPG);

Los valores predeterminados de los controladores de profundidad de árbol para aumentar los árboles de regresión son:

  • Para.10MaxNumSplits

  • Para5MinLeafSize

  • Para10MinParentSize

Para buscar el nivel de complejidad de árbol óptimo:

  1. Valide de forma cruzada un conjunto de conjuntos. Aumente exponencialmente el nivel de complejidad de árbol para los conjuntos subsiguientes desde el muñón de decisión (una división) hasta a lo más-1 divisiones. es el tamaño de la muestra.nn También, variar la tasa de aprendizaje para cada conjunto entre 0,1 a 1.

  2. Estime el error cuadrático medio validado (MSE) para cada conjunto.

  3. Para el nivel de complejidad de árbol

    <math display="block">
    <mrow>
    <mi>j</mi>
    </mrow>
    </math>
    ,
    <math display="block">
    <mrow>
    <mi>j</mi>
    <mo>=</mo>
    <mn>1</mn>
    <mo>.</mo>
    <mo>.</mo>
    <mo>.</mo>
    <mi>J</mi>
    </mrow>
    </math>
    , compare el MSE acumulado y validado de los conjuntos, conspirándolos contra el número de ciclos de aprendizaje. Trace curvas separadas para cada tasa de aprendizaje en la misma figura.

  4. Elija la curva que alcanza el MSE mínimo, y anote el ciclo de aprendizaje y la velocidad de aprendizaje correspondientes.

Valide de forma cruzada un árbol de regresión profunda y un muñón. Dado que los datos contienen valores faltantes, utilice divisiones sustitutas. Estos árboles de regresión sirven como puntos de referencia.

rng(1) % For reproducibility MdlDeep = fitrtree(Tbl,'MPG','CrossVal','on','MergeLeaves','off', ...     'MinParentSize',1,'Surrogate','on'); MdlStump = fitrtree(Tbl,'MPG','MaxNumSplits',1,'CrossVal','on', ...     'Surrogate','on');

Valide de forma cruzada un conjunto de 150 árboles de regresión potenciado mediante la validación cruzada de 5 veces. Uso de una plantilla de árbol:

  • Variar el número máximo de divisiones utilizando los valores de la secuencia

    <math display="block">
    <mrow>
    <mo stretchy="false">{</mo>
    <msup>
    <mrow>
    <mn>2</mn>
    </mrow>
    <mrow>
    <mn>0</mn>
    </mrow>
    </msup>
    <mo>,</mo>
    <msup>
    <mrow>
    <mn>2</mn>
    </mrow>
    <mrow>
    <mn>1</mn>
    </mrow>
    </msup>
    <mo>,</mo>
    <mo>.</mo>
    <mo>.</mo>
    <mo>.</mo>
    <mo>,</mo>
    <msup>
    <mrow>
    <mn>2</mn>
    </mrow>
    <mrow>
    <mi>m</mi>
    </mrow>
    </msup>
    <mo stretchy="false">}</mo>
    </mrow>
    </math>
    . es tal quem
    <math display="block">
    <mrow>
    <msup>
    <mrow>
    <mn>2</mn>
    </mrow>
    <mrow>
    <mi>m</mi>
    </mrow>
    </msup>
    </mrow>
    </math>
    no es mayor que-1.n

  • Active las divisiones sustitutas.

Para cada variante, ajuste la velocidad de aprendizaje utilizando cada valor en el set {0,1, 0,25, 0,5, 1}.

n = size(Tbl,1); m = floor(log2(n - 1)); learnRate = [0.1 0.25 0.5 1]; numLR = numel(learnRate); maxNumSplits = 2.^(0:m); numMNS = numel(maxNumSplits); numTrees = 150; Mdl = cell(numMNS,numLR);  for k = 1:numLR     for j = 1:numMNS         t = templateTree('MaxNumSplits',maxNumSplits(j),'Surrogate','on');         Mdl{j,k} = fitrensemble(Tbl,'MPG','NumLearningCycles',numTrees, ...             'Learners',t,'KFold',5,'LearnRate',learnRate(k));     end end

Calcule el MSE acumulado, validado por Cruz de cada conjunto.

kflAll = @(x)kfoldLoss(x,'Mode','cumulative'); errorCell = cellfun(kflAll,Mdl,'Uniform',false); error = reshape(cell2mat(errorCell),[numTrees numel(maxNumSplits) numel(learnRate)]); errorDeep = kfoldLoss(MdlDeep); errorStump = kfoldLoss(MdlStump);

Trace cómo el MSE validado por Cruz se comporta como el número de árboles en el conjunto aumenta. Trace las curvas con respecto a la tasa de aprendizaje en la misma gráfica y trace parcelas separadas para diferentes niveles de complejidad de árbol. Elija un subconjunto de niveles de complejidad de árbol para trazar.

mnsPlot = [1 round(numel(maxNumSplits)/2) numel(maxNumSplits)]; figure; for k = 1:3     subplot(2,2,k)     plot(squeeze(error(:,mnsPlot(k),:)),'LineWidth',2)     axis tight     hold on     h = gca;     plot(h.XLim,[errorDeep errorDeep],'-.b','LineWidth',2)     plot(h.XLim,[errorStump errorStump],'-.r','LineWidth',2)     plot(h.XLim,min(min(error(:,mnsPlot(k),:))).*[1 1],'--k')     h.YLim = [10 50];         xlabel('Number of trees')     ylabel('Cross-validated MSE')     title(sprintf('MaxNumSplits = %0.3g', maxNumSplits(mnsPlot(k))))     hold off end hL = legend([cellstr(num2str(learnRate','Learning Rate = %0.2f')); ...         'Deep Tree';'Stump';'Min. MSE']); hL.Position(1) = 0.6;

Cada curva contiene un MSE con validación cruzada mínima que se produce en el número óptimo de árboles en el conjunto.

Identifique el número máximo de divisiones, del número de árboles, y de la velocidad de aprendizaje que rinde el MSE más bajo general.

[minErr,minErrIdxLin] = min(error(:)); [idxNumTrees,idxMNS,idxLR] = ind2sub(size(error),minErrIdxLin); fprintf('\nMin. MSE = %0.5f',minErr)
Min. MSE = 17.01148 
fprintf('\nOptimal Parameter Values:\nNum. Trees = %d',idxNumTrees);
Optimal Parameter Values: Num. Trees = 38 
fprintf('\nMaxNumSplits = %d\nLearning Rate = %0.2f\n',...     maxNumSplits(idxMNS),learnRate(idxLR))
MaxNumSplits = 4 Learning Rate = 0.10 

Cree un conjunto predictivo basado en los hiperparámetros óptimos y en todo el conjunto de entrenamiento.

tFinal = templateTree('MaxNumSplits',maxNumSplits(idxMNS),'Surrogate','on'); MdlFinal = fitrensemble(Tbl,'MPG','NumLearningCycles',idxNumTrees, ...     'Learners',tFinal,'LearnRate',learnRate(idxLR))
MdlFinal =    classreg.learning.regr.RegressionEnsemble            PredictorNames: {'Cylinders'  'Displacement'  'Horsepower'  'Weight'}              ResponseName: 'MPG'     CategoricalPredictors: []         ResponseTransform: 'none'           NumObservations: 94                NumTrained: 38                    Method: 'LSBoost'              LearnerNames: {'Tree'}      ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'                   FitInfo: [38×1 double]        FitInfoDescription: {2×1 cell}            Regularization: []     Properties, Methods  

es un.MdlFinalRegressionEnsemble Para predecir la economía de combustible de un coche dado su número de cilindros, volumen desplazado por los cilindros, potencia, y el peso, se puede pasar los Datos predictores y a.MdlFinalPredecir

En lugar de buscar valores óptimos manualmente mediante la opción de validación cruzada () y la función, puede usar el argumento de par nombre-valor.'KFold'kfoldLoss'OptimizeHyperparameters' Cuando se especifica, el software encuentra los parámetros óptimos automáticamente mediante la optimización bayesiana.'OptimizeHyperparameters' Los valores óptimos obtenidos mediante el uso pueden ser diferentes de los obtenidos mediante la búsqueda manual.'OptimizeHyperparameters'

t = templateTree('Surrogate','on'); mdl = fitrensemble(Tbl,'MPG','Learners',t, ...     'OptimizeHyperparameters',{'NumLearningCycles','LearnRate','MaxNumSplits'})

|====================================================================================================================| | Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | NumLearningC-|    LearnRate | MaxNumSplits | |      | result |             | runtime     | (observed)  | (estim.)    | ycles        |              |              | |====================================================================================================================| |    1 | Best   |      3.3989 |       0.702 |      3.3989 |      3.3989 |           26 |     0.072054 |            3 | |    2 | Accept |      6.0978 |      4.5175 |      3.3989 |      3.5582 |          170 |    0.0010295 |           70 | |    3 | Best   |      3.2848 |      7.3601 |      3.2848 |       3.285 |          273 |      0.61026 |            6 | |    4 | Accept |      6.1839 |      1.9371 |      3.2848 |      3.2849 |           80 |    0.0016871 |            1 | |    5 | Best   |      3.0154 |     0.33314 |      3.0154 |       3.016 |           12 |      0.21457 |            2 | |    6 | Accept |      3.3146 |     0.32962 |      3.0154 |        3.16 |           10 |      0.18164 |            8 | |    7 | Accept |      3.0512 |     0.31776 |      3.0154 |      3.1213 |           10 |      0.26719 |           16 | |    8 | Best   |      3.0013 |     0.29751 |      3.0013 |      3.0891 |           10 |      0.27408 |            1 | |    9 | Best   |      2.9797 |     0.31657 |      2.9797 |      2.9876 |           10 |      0.28184 |            2 | |   10 | Accept |      3.0646 |     0.59906 |      2.9797 |      3.0285 |           23 |       0.9922 |            1 | |   11 | Accept |      2.9825 |     0.31056 |      2.9797 |       2.978 |           10 |      0.54187 |            1 | |   12 | Best   |      2.9526 |     0.31189 |      2.9526 |      2.9509 |           10 |      0.49116 |            1 | |   13 | Best   |      2.9281 |     0.98544 |      2.9281 |      2.9539 |           38 |      0.30709 |            1 | |   14 | Accept |       2.944 |     0.60449 |      2.9281 |      2.9305 |           20 |      0.40583 |            1 | |   15 | Best   |      2.9128 |     0.50753 |      2.9128 |      2.9237 |           20 |      0.39672 |            1 | |   16 | Best   |      2.9077 |     0.58614 |      2.9077 |       2.919 |           21 |      0.38157 |            1 | |   17 | Accept |      3.3932 |     0.36691 |      2.9077 |       2.919 |           10 |      0.97862 |           99 | |   18 | Accept |      6.2938 |     0.33318 |      2.9077 |      2.9204 |           10 |    0.0074886 |           95 | |   19 | Accept |      3.0049 |      0.4842 |      2.9077 |      2.9114 |           15 |      0.45073 |            9 | |   20 | Best   |      2.9072 |      2.2091 |      2.9072 |      2.9111 |           87 |        0.152 |            1 | |====================================================================================================================| | Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | NumLearningC-|    LearnRate | MaxNumSplits | |      | result |             | runtime     | (observed)  | (estim.)    | ycles        |              |              | |====================================================================================================================| |   21 | Accept |      2.9217 |     0.53329 |      2.9072 |      2.9154 |           21 |      0.31845 |            1 | |   22 | Best   |      2.8994 |      4.8548 |      2.8994 |       2.917 |          189 |     0.098534 |            1 | |   23 | Accept |      2.9055 |      7.6922 |      2.8994 |      2.9166 |          310 |      0.15505 |            1 | |   24 | Accept |      2.9264 |      1.4456 |      2.8994 |      2.9012 |           61 |      0.23387 |            1 | |   25 | Accept |      3.0869 |     0.34623 |      2.8994 |      2.9169 |           10 |      0.48674 |           27 | |   26 | Best   |      2.8942 |      7.7285 |      2.8942 |      2.8912 |          319 |      0.11093 |            1 | |   27 | Accept |      3.0175 |     0.97891 |      2.8942 |      2.8889 |           38 |      0.32187 |            4 | |   28 | Accept |      2.9049 |      3.4053 |      2.8942 |      2.8941 |          141 |      0.13325 |            1 | |   29 | Accept |      3.0477 |     0.30373 |      2.8942 |      2.8939 |           10 |      0.28155 |           97 | |   30 | Accept |      3.0563 |      0.3135 |      2.8942 |       2.894 |           10 |      0.53101 |            3 |  __________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 91.847 seconds. Total objective function evaluation time: 51.012  Best observed feasible point:     NumLearningCycles    LearnRate    MaxNumSplits     _________________    _________    ____________             319            0.11093          1        Observed objective function value = 2.8942 Estimated objective function value = 2.894 Function evaluation time = 7.7285  Best estimated feasible point (according to models):     NumLearningCycles    LearnRate    MaxNumSplits     _________________    _________    ____________             319            0.11093          1        Estimated objective function value = 2.894 Estimated function evaluation time = 7.9767 
mdl =    classreg.learning.regr.RegressionEnsemble                        PredictorNames: {'Cylinders'  'Displacement'  'Horsepower'  'Weight'}                          ResponseName: 'MPG'                 CategoricalPredictors: []                     ResponseTransform: 'none'                       NumObservations: 94     HyperparameterOptimizationResults: [1×1 BayesianOptimization]                            NumTrained: 319                                Method: 'LSBoost'                          LearnerNames: {'Tree'}                  ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'                               FitInfo: [319×1 double]                    FitInfoDescription: {2×1 cell}                        Regularization: []     Properties, Methods  

Cargue el conjunto de datos.carsmall Considere un modelo que predice la economía de combustible media de un automóvil debido a su aceleración, número de cilindros, cilindrada del motor, potencia, fabricante, año del modelo y peso. Considere, y como variables categóricas.CylindersMfgModel_Year

load carsmall Cylinders = categorical(Cylinders); Mfg = categorical(cellstr(Mfg)); Model_Year = categorical(Model_Year); X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,...     Model_Year,Weight,MPG);

Mostrar el número de categorías representadas en las variables categóricas.

numCylinders = numel(categories(Cylinders))
numCylinders = 3 
numMfg = numel(categories(Mfg))
numMfg = 28 
numModelYear = numel(categories(Model_Year))
numModelYear = 3 

Debido a que hay 3 categorías sólo en y, el estándar CART, algoritmo de división de predictor prefiere dividir un predictor continuo sobre estas dos variables.CylindersModel_Year

Entrenar un bosque aleatorio de 500 árboles de regresión utilizando todo el conjunto de datos. Para cultivar árboles no sesgados, especifique el uso de la prueba de curvatura para dividir los predictores. Dado que faltan valores en los datos, especifique el uso de divisiones sustitutas. Para reproducir selecciones de predictor aleatorias, establezca la semilla del generador de números aleatorios utilizando y especificando.rng'Reproducible',true

rng('default'); % For reproducibility t = templateTree('PredictorSelection','curvature','Surrogate','on', ...     'Reproducible',true); % For reproducibility of random predictor selections Mdl = fitrensemble(X,'MPG','Method','bag','NumLearningCycles',500, ...     'Learners',t);

Estime las medidas de importancia predictora mediante el permuting de observaciones fuera de bolsa. Realizar cálculos en paralelo.

options = statset('UseParallel',true); imp = oobPermutedPredictorImportance(Mdl,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6). 

Compare las estimaciones utilizando un gráfico de barras.

figure; bar(imp); title('Out-of-Bag Permuted Predictor Importance Estimates'); ylabel('Estimates'); xlabel('Predictors'); h = gca; h.XTickLabel = Mdl.PredictorNames; h.XTickLabelRotation = 45; h.TickLabelInterpreter = 'none';

En este caso, es el predictor más importante, seguido de.Model_YearCylinders Compare estos resultados con los resultados en.Estimar la importancia de los predictores

Cree una plantilla de conjunto para utilizarla.fitcecoc

Cargue el conjunto de datos de arritmia.

load arrhythmia tabulate(categorical(Y));
  Value    Count   Percent       1      245     54.20%       2       44      9.73%       3       15      3.32%       4       15      3.32%       5       13      2.88%       6       25      5.53%       7        3      0.66%       8        2      0.44%       9        9      1.99%      10       50     11.06%      14        4      0.88%      15        5      1.11%      16       22      4.87% 
rng(1); % For reproducibility

Algunas clases tienen pequeñas frecuencias relativas en los datos.

Cree una plantilla para un conjunto AdaBoostM1 de árboles de clasificación y especifique usar 100 alumnos y una contracción de 0,1. Por defecto, impulsar crece tocones (es decir, un nodo que tiene un conjunto de hojas). Dado que hay clases con pequeñas frecuencias, los árboles deben ser lo suficientemente frondosos como para ser sensibles a las clases minoritarias. Especifique el número mínimo de observaciones del nodo hoja en 3.

tTree = templateTree('MinLeafSize',20); t = templateEnsemble('AdaBoostM1',100,tTree,'LearnRate',0.1);

Todas las propiedades de los objetos de plantilla están vacías excepto y, y las propiedades correspondientes de los valores de los argumentos de par nombre-valor en las llamadas de función.MethodType Al pasar a la función de entrenamiento, el software rellena las propiedades vacías con sus respectivos valores predeterminados.t

Especifique como un aprendizaje binario para un modelo multiclase ECOC.t Entrena usando el diseño de codificación uno contra uno predeterminado.

Mdl = fitcecoc(X,Y,'Learners',t);
  • es un modelo multiclase.MdlClassificationECOC

  • es una matriz de modelos de celdas de 78 por 1.Mdl.BinaryLearnersCompactClassificationEnsemble

  • es una matriz de modelos de celdas 100-by-1, para = 1,..., 78.Mdl.BinaryLearners{j}.TrainedCompactClassificationTreej

Puede comprobar que uno de los alumnos binarios contiene un alumno débil que no es un muñón mediante el uso de.view

view(Mdl.BinaryLearners{1}.Trained{1},'Mode','graph')

Muestra el error de clasificación errónea en la muestra (reenvío).

L = resubLoss(Mdl,'LossFun','classiferror')
L = 0.0575 

Argumentos de entrada

contraer todo

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: especifica una plantilla con divisiones sustitutas y utiliza todos los predictores disponibles en cada división.'Surrogate','on','NumVariablesToSample','all'

Para árboles de clasificación y árboles de regresión

contraer todo

Número máximo de divisiones de decisión (o nodos de bifurcación) por árbol, especificadas como el par separado por comas y que consta de un entero positivo.'MaxNumSplits' templateTree divide o menos nodos de bifurcación.MaxNumSplits Para obtener más información sobre el comportamiento de división, consulte.Algoritmos

Para los árboles de decisión en bolsas y los estudiantes binarios de árbol de decisión en modelos ECOC, el valor predeterminado es, donde está el número de observaciones en la muestra de formación.n – 1n Para los árboles de decisión impulsados, el valor predeterminado es.10

Ejemplo: 'MaxNumSplits',5

Tipos de datos: single | double

Marca de combinación de hojas, especificada como el par separado por comas que consta de y cualquiera o.'MergeLeaves''on''off'

Cuando, el árbol de decisión fusiona las hojas que se originan desde el mismo nodo primario y que proporcionan una suma de valores de riesgo mayor o igual al riesgo asociado con el nodo primario.'on' Cuando, el árbol de decisión no fusiona hojas.'off'

Para los árboles de decisión reforzados y en bolsas, los valores predeterminados son.'off' Para los alumnos binarios de árbol de decisión en modelos ECOC, el valor predeterminado es.'on'

Ejemplo: 'MergeLeaves','on'

Observaciones mínimas por hoja, especificadas como el par separado por comas y que consta de un valor entero positivo.'MinLeafSize' Cada hoja tiene al menos observaciones por hoja de árbol.MinLeafSize Si proporciona ambos y, el árbol de decisión utiliza la configuración que da hojas más grandes:.MinParentSizeMinLeafSizeMinParentSize = max(MinParentSize,2*MinLeafSize)

Para los árboles de decisión reforzados y en bolsas, los valores predeterminados son para la clasificación y para la regresión.15 Para los alumnos binarios de árbol de decisión en modelos ECOC, el valor predeterminado es.1

Ejemplo: 'MinLeafSize',2

Observaciones mínimas por nodo de bifurcación, especificadas como el par separado por comas y que consta de un valor entero positivo.'MinParentSize' Cada nodo de ramificación del árbol tiene al menos observaciones.MinParentSize Si proporciona ambos y, el árbol de decisión utiliza la configuración que da hojas más grandes:.MinParentSizeMinLeafSizeMinParentSize = max(MinParentSize,2*MinLeafSize)

Para los árboles de decisión reforzados y en bolsas, los valores predeterminados son para la clasificación y para la regresión.210 Para los alumnos binarios de árbol de decisión en modelos ECOC, el valor predeterminado es.10

Ejemplo: 'MinParentSize',4

Número de predictores para seleccionar aleatoriamente para cada división, especificado como el par separado por comas que consta de un valor entero positivo.'NumVariablesToSample' Como alternativa, puede especificar que se utilicen todos los predictores disponibles.'all'

Si los datos de entrenamiento incluyen muchos predictores y desea analizar la importancia del predictor, especifique as.'NumVariablesToSample''all' De lo contrario, el software podría no seleccionar algunos predictores, subestimar su importancia.

Para reproducir las selecciones aleatorias, debe establecer la inicialización del generador de números aleatorios utilizando y especificando.rng'Reproducible',true

Para los árboles de decisión potenciados y los alumnos binarios de árbol de decisión en modelos ECOC, el valor predeterminado es.'all' El valor predeterminado para los árboles de decisión en bolsas es la raíz cuadrada del número de predictores para la clasificación, o un tercio del número de predictores para la regresión.

Ejemplo: 'NumVariablesToSample',3

Tipos de datos: single | double | char | string

Algoritmo utilizado para seleccionar el mejor predictor dividido en cada nodo, especificado como el par separado por comas que consta de y un valor en esta tabla.'PredictorSelection'

ValorDescripción
'allsplits'

CARRITO estándar: selecciona el predictor dividido que maximiza la ganancia de criterio dividido sobre todas las posibles divisiones de todos los predictores.[1]

'curvature'Prueba de curvatura: selecciona el predictor dividido que minimiza el valor de las pruebas de Chi-cuadrado de independencia entre cada predictor y la respuesta.p[3][4] La velocidad de entrenamiento es similar al carrito estándar.
'interaction-curvature'Prueba de interacción: elige el predictor dividido que minimiza el valor de las pruebas de Chi-cuadrado de independencia entre cada predictor y la respuesta, y que minimiza el-valor de una prueba de Chi-cuadrado de independencia entre cada par de predictores y la respuesta.pp[3] La velocidad de entrenamiento puede ser más lenta que la CART estándar.

Para y, si todas las pruebas yield-valores mayores que 0,05, a continuación, detiene la división de nodos.'curvature''interaction-curvature'pMATLAB®

Sugerencia

  • No se recomiendan las pruebas de curvatura e interacción para aumentar los árboles de decisión. Para entrenar un conjunto de árboles potenciado que tiene mayor precisión, utilice CART estándar en su lugar.

  • El carrito estándar tiende a seleccionar predictores divididos que contienen muchos valores distintos, por ejemplo, variables continuas, sobre aquellos que contienen pocos valores distintos, por ejemplo, variables categóricas.[4] Si el conjunto de datos de predictor es heterogéneo, o si hay predictores que tienen relativamente menos valores distintos que otras variables, considere la posibilidad de especificar la curvatura o la prueba de interacción.

    • Si hay predictores que tienen relativamente menos valores distintos que otros predictores, por ejemplo, si el conjunto de datos del predictor es heterogéneo.

    • Si un análisis de la importancia del predictor es su objetivo. Para obtener más información sobre la estimación de importancia predictora, consulte oobPermutedPredictorImportance para problemas de clasificación y oobPermutedPredictorImportance para los problemas de regresión.

  • Los árboles cultivados con CART estándar no son sensibles a las interacciones variables predictoras. Además, estos árboles tienen menos probabilidades de identificar variables importantes en presencia de muchos predictores irrelevantes que la aplicación de la prueba de interacción. Por lo tanto, para tener en cuenta las interacciones predictoras e identificar las variables de importancia en presencia de muchas variables irrelevantes, especifique la prueba de interacción.[3]

  • La velocidad de predicción no se ve afectada por el valor de.'PredictorSelection'

Para obtener más información sobre cómo templateTree selecciona los predictores divididos, vea (clasificación), (regresión) y.Reglas de división de nodosReglas de división de nodosElija la técnica dividir predictor selección

Ejemplo: 'PredictorSelection','curvature'

Marque para estimar la secuencia óptima de los subárboles podados, especificados como el par separado por comas que consiste en y o.'Prune''on''off'

Si es así, entonces el software entrena a los estudiantes del árbol de clasificación sin podarlos, pero estima la secuencia óptima de los subárboles podados para cada alumno en el conjunto o el aprendiz binario del árbol de decisión en los modelos de ECOC.Prune'on' De lo contrario, el software entrena a los estudiantes del árbol de clasificación sin estimar la secuencia óptima de los subárboles podados.

Para los árboles de decisión potenciados y en bolsas, el valor predeterminado es.'off'

Para los alumnos binarios de árbol de decisión en modelos ECOC, el valor predeterminado es.'on'

Ejemplo: 'Prune','on'

Criterio de poda, especificado como el par separado por comas y que consta de un criterio de poda válido para el tipo de árbol.'PruneCriterion'

  • Para los árboles de clasificación, puede especificar (predeterminado) o.'error''impurity' Si especifica,'impurity' templateTree utiliza la medida de impureza especificada por el argumento de par nombre-valor.'SplitCriterion'

  • Para los árboles de regresión, solo puede especificar (predeterminado).'mse'

Ejemplo: 'PruneCriterion','impurity'

Marcar para exigir la reproducibilidad en ejecuciones repetidas de entrenamiento de un modelo, especificado como el par separado por comas que consta de y cualquiera o.'Reproducible'falsetrue

Si no es así, entonces el software selecciona predictores aleatoriamente para cada división.'NumVariablesToSample''all' Para reproducir las selecciones aleatorias, debe especificar y establecer la inicialización del generador de números aleatorios mediante.'Reproducible',truerng Tenga en cuenta que la configuración puede ralentizar el entrenamiento.'Reproducible'true

Ejemplo: 'Reproducible',true

Tipos de datos: logical

Criterio de división, especificado como el par separado por comas y que consta de un criterio de división válido para el tipo de árbol.'SplitCriterion'

  • Para árboles de clasificación:

    • para el índice de diversidad de Gini (predeterminado)'gdi'

    • para la regla de twoing'twoing'

    • para la reducción máxima de desviación (también conocida como entropía cruzada)'deviance'

  • Para árboles de regresión:

    • para el error cuadrado medio (predeterminado)'mse'

Ejemplo: 'SplitCriterion','deviance'

Se divide la marca de decisión sustituta, especificada como el par separado por comas que consta de y uno de,, o un valor entero positivo.'Surrogate''off''on''all'

  • Cuando, el árbol de decisión no encuentra divisiones sustitutas en los nodos de bifurcación.'off'

  • Cuando, el árbol de decisión encuentra como máximo 10 divisiones sustitutas en cada nodo de bifurcación.'on'

  • Cuando se establece en, el árbol de decisión encuentra todas las divisiones sustitutas en cada nodo de bifurcación.'all' El ajuste puede consumir un tiempo y una memoria considerables.'all'

  • Cuando se establece en un valor entero positivo, el árbol de decisión encuentra como máximo el número especificado de divisiones sustitutas en cada nodo de bifurcación.

Use divisiones sustitutas para mejorar la precisión de las predicciones para los datos con valores faltantes. Esta configuración también le permite calcular medidas de asociación predictiva entre predictores.

Ejemplo: 'Surrogate','on'

Tipos de datos: single | double | char | string

Solo para árboles de clasificación

contraer todo

Algoritmo para encontrar la mejor división en un predictor categórico para los datos con categorías de datos y ≥ 3 clases, especificadas como el par separado por comas que consta de y uno de los siguientes.CK'AlgorithmForCategorical'

ValorDescripción
'Exact'Considere los 2C–1 – 1 combinaciones.
'PullLeft'Empiece con todas las categorías de la rama derecha.C Considere mover cada categoría a la rama izquierda, ya que logra la impureza mínima para las clases entre las categorías restantes.K A partir de esta secuencia, elija la división que tiene la impureza más baja.
'PCA'Calcule una puntuación para cada categoría utilizando el producto interno entre el primer componente principal de una matriz de covarianza ponderada (de la matriz de probabilidad de clase centrada) y el vector de probabilidades de clase para esa categoría. Ordene las puntuaciones en orden ascendente y considere todas — 1 divisiones.C
'OVAbyClass'Empiece con todas las categorías de la rama derecha.C Para cada clase, ordene las categorías en función de su probabilidad para esa clase. Para la primera clase, considere mover cada categoría a la rama izquierda en orden, registrando el criterio de impureza en cada movimiento. Repita para las clases restantes. A partir de esta secuencia, elija la división que tiene la impureza mínima.

El software selecciona el subconjunto óptimo de algoritmos para cada división utilizando el número conocido de clases y niveles de un predictor categórico. Para dos clases, siempre realiza la búsqueda exacta. Utilice el argumento de par nombre-valor para especificar un algoritmo determinado.'AlgorithmForCategorical'

Para obtener más información, consulte.División de predictores categóricos en árboles de clasificación

Ejemplo: 'AlgorithmForCategorical','PCA'

Niveles máximos de categoría en el nodo dividido, especificados como el par separado por comas que consta de un valor escalar no negativo.'MaxNumCategories' Un árbol de clasificación divide un predictor categórico utilizando el algoritmo de búsqueda exacto si el predictor tiene en la mayoría de los niveles en el nodo dividido.MaxNumCategories De lo contrario, encuentra la mejor división categórica usando uno de los algoritmos inexactos. Tenga en cuenta que pasar un valor pequeño puede aumentar el tiempo de cálculo y la sobrecarga de memoria.

Ejemplo: 'MaxNumCategories',8

Solo para árboles de regresión

contraer todo

Tolerancia de error cuadrática por nodo, especificada como el par separado por comas que consta de y un valor escalar positivo.'QuadraticErrorTolerance' Un árbol de regresión deja de dividir los nodos cuando el error medio cuadrado ponderado por nodo desciende por debajo, donde está el error cuadrático medio ponderado de todas las respuestas calculadas antes de aumentar el árbol de decisión.QuadraticErrorTolerance*εεn

ε=i=1nwi(yiy¯)2.

Wi es el peso de la observación, dado que los pesos de todas las observaciones suman a uno (ii=1nwi=1), y

y¯=i=1nwiyi

es el promedio ponderado de todas las respuestas.

Ejemplo: 'QuadraticErrorTolerance',1e-4

Argumentos de salida

contraer todo

Plantilla de árbol de decisión para clasificación o regresión adecuada para entrenar un conjunto (árboles de decisión potenciados y en bolsas) o un modelo multiclase de código de salida de corrección de errores (ECOC), devuelto como un objeto de plantilla. Pasar a, o, o especificar cómo crear el árbol de decisión para el conjunto de clasificación, conjunto de regresión o modelo ECOC, respectivamente.tfitcensemblefitrensemblefitcecoc

Si aparece en la ventana de comandos, todas las opciones no especificadas aparecerán vacías ().t[] Sin embargo, el software reemplaza las opciones vacías con sus valores predeterminados correspondientes durante el entrenamiento.

Algoritmos

  • Para acomodar, el software divide todos los nodos en la actual y, a continuación, cuenta el número de nodos de bifurcación.MaxNumSplitsCapa Una capa es el conjunto de nodos que son equidistantes del nodo raíz. Si el número de nodos de bifurcación excede, después el software sigue este procedimiento.MaxNumSplits

    1. Determine cuántos nodos de bifurcación de la capa actual se deben separar para que haya en la mayoría de los nodos de bifurcación.MaxNumSplits

    2. Ordene los nodos de la rama por sus ganancias de impureza.

    3. Desdivida el número deseado de ramas menos exitosas.

    4. Devuelva el árbol de decisión crecido hasta el momento.

    Este procedimiento tiene como objetivo producir árboles con un equilibrio máximo.

  • El software divide los nodos de bifurcación capa por capa hasta que se produzca al menos uno de estos eventos.

    • Hay + 1 nodos de bifurcación.MaxNumSplits

    • Una división propuesta hace que el número de observaciones en al menos un nodo de bifurcación sea menor que.MinParentSize

    • Una división propuesta hace que el número de observaciones en al menos un nodo hoja sea menor que.MinLeafSize

    • El algoritmo no puede encontrar una buena división dentro de una capa (es decir, el criterio de poda (ver), no mejora para todas las divisiones propuestas en una capa).PruneCriterion Un caso especial de este evento es cuando todos los nodos son puros (es decir, todas las observaciones en el nodo tienen la misma clase).

    • Para los valores o de, todas las pruebas yield-valores mayores que 0,05.'curvature''interaction-curvature'PredictorSelectionp

    y no afectan a la división en sus valores predeterminados.MaxNumSplitsMinLeafSize Por lo tanto, si establece, la división podría detenerse debido al valor de antes de que se produzcan divisiones.'MaxNumSplits'MinParentSizeMaxNumSplits

  • Para obtener más información sobre la selección de predictores divididos y algoritmos de división de nodos al cultivar árboles de decisión, consulte para árboles de clasificación y árboles de regresión.AlgoritmosAlgoritmos

Referencias

[1] Breiman, L., J. Friedman, R. Olshen, and C. Stone. Classification and Regression Trees. Boca Raton, FL: CRC Press, 1984.

[2] Coppersmith, D., S. J. Hong, and J. R. M. Hosking. “Partitioning Nominal Attributes in Decision Trees.” Data Mining and Knowledge Discovery, Vol. 3, 1999, pp. 197–217.

[3] Loh, W.Y. “Regression Trees with Unbiased Variable Selection and Interaction Detection.” Statistica Sinica, Vol. 12, 2002, pp. 361–386.

[4] Loh, W.Y. and Y.S. Shih. “Split Selection Methods for Classification Trees.” Statistica Sinica, Vol. 7, 1997, pp. 815–840.

Introducido en R2014a