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.

División de predictores categóricos en árboles de clasificación

Desafíos en la división de predictores multinivel

Cuando se cultiva un árbol de clasificación, encontrar una división binaria óptima para un predictor categórico con muchos niveles es más desafiante computacionalmente que encontrar una división para un predictor continuo. Para un predictor continuo, un árbol puede dividirse a mitad de camino entre dos valores únicos adyacentes del predictor. Por el contrario, para encontrar una división binaria exacta y óptima para un predictor categórico con niveles, un árbol de clasificación debe considerar 2LL–1– 1 splits. Para obtener esta fórmula:

  1. Cuente el número de formas de asignar valores distintos a los nodos izquierdo y derecho.L Hay 2L Maneras.

  2. Divida 2L por 2, porque la izquierda y la derecha se pueden intercambiar.

  3. Descarte el caso que tenga un nodo vacío.

Para problemas de regresión y problemas de clasificación binaria, el software utiliza el algoritmo de búsqueda exacto a través de un acceso directo computacional.[1] El árbol puede ordenar las categorías por la respuesta media (para la regresión) o la probabilidad de clase para una de las clases (para la clasificación). A continuación, la división óptima es una de las divisiones – 1 para la lista ordenada.L Por lo tanto, los desafíos computacionales surgen sólo cuando se cultivan árboles de clasificación para datos con ≥ 3 clases.K

Algoritmos para la división de predictor categórico

Para reducir el cómputo, el software ofrece varios algoritmos heurísticos para encontrar una buena división. Puede elegir un algoritmo para dividir predictores categóricos utilizando el argumento de par nombre-valor cuando se cultiva un árbol de clasificación utilizando o cuando se crea un alumno de clasificación utilizando para un conjunto de clasificación () o un modelo ECOC multiclase ().'AlgorithmForCategorical'fitctreetemplateTreefitcensemblefitcecoc

Si no especifica un algoritmo, el software selecciona el algoritmo óptimo para cada división utilizando el número conocido de clases y niveles de un predictor categórico. Si el predictor tiene en la mayoría de los niveles, el software divide los predictores categóricos utilizando el algoritmo de búsqueda exacto.MaxNumCategories De lo contrario, el software elige un algoritmo de búsqueda heurística basado en el número de clases y niveles. El nivel predeterminado es 10.MaxNumCategories Dependiendo de su plataforma, el software no puede realizar una búsqueda exacta en predictores categóricos con más de 32 o 64 niveles.

Los algoritmos heurísticos disponibles son: tire a la izquierda por pureza, partición basada en componentes principal y uno contra todo por clase.

Tire a la izquierda por pureza

La extracción a la izquierda por el algoritmo de pureza comienza con todos los niveles categóricos en la rama derecha.L El algoritmo entonces toma estas acciones:

  1. Inspeccione las categorías que tienen las probabilidades de clase más grandes para cada clase.K

  2. Mueva la categoría con el valor máximo del criterio de división a la rama izquierda.

  3. Continúe moviendo categorías de derecha a izquierda, registrando el criterio de división en cada movimiento, hasta que el hijo derecho tenga solo una categoría restante.

Fuera de esta secuencia, la división seleccionada es la que maximiza el criterio de división.

Seleccione este algoritmo especificando in o.'AlgorithmForCategorical','PullLeft'fitctreetemplateTree

Partición basada en componentes principal

El algoritmo de particionamiento basado en componentes principal encuentra una partición binaria cercana a la óptima de los niveles de predicción mediante la búsqueda de un hiperplano separador.[2]L El hiperplano es perpendicular al primer componente principal de la matriz de covarianza ponderada de la matriz de probabilidad de clase centrada.

El algoritmo asigna una puntuación a cada una de las categorías, calculada como el producto interno entre el componente principal encontrado y el vector de probabilidades de clase para esa categoría.L A continuación, la división seleccionada es una de las divisiones – 1 que maximiza el criterio de división.L

Seleccione este algoritmo especificando in o.'AlgorithmForCategorical','PCA'fitctreetemplateTree

Uno contra todo por clase

El algoritmo de uno contra todos por clase comienza con todos los niveles categóricos de la rama derecha.L Para cada una de las clases, el algoritmo ordena las categorías en función de su probabilidad para esa clase.K

Para la primera clase, el algoritmo mueve cada categoría a la rama izquierda en orden, registrando el criterio de división en cada movimiento. A continuación, el algoritmo repite este proceso para las clases restantes. Fuera de esta secuencia, la división seleccionada es la que maximiza el criterio de división.

Seleccione este algoritmo especificando in o.'AlgorithmForCategorical','OVAbyClass'fitctreetemplateTree

Inspeccionar datos con predictores categóricos multinivel

Este ejemplo muestra cómo inspeccionar un conjunto de datos que incluye predictores categóricos con muchos niveles (categorías) y Cómo entrenar un árbol de decisión binaria para la clasificación.

Cargue datos de muestra

Cargue el archivo.census1994 Este conjunto de datos consta de datos demográficos de la oficina del censo de los Estados Unidos para predecir si un individuo gana más de $50.000 al año. Especifique una matriz de celdas de vectores de caracteres que contengan los nombres de variable.

load census1994 VarNames = adultdata.Properties.VariableNames;

Algunos nombres de variables de la tabla contienen el carácter.adultdata_ Reemplace las instancias de con un espacio._

VarNames = strrep(VarNames,'_',' ');

Especifique los Datos predictores y el vector de respuesta.tblY

tbl = adultdata(:,1:end-1); Y = categorical(adultdata.salary);

Inspeccionar predictores categóricos

Algunas variables categóricas tienen muchos niveles (categorías). Cuente el número de niveles de cada predictor categórico.

Busque los índices de los predictores categóricos que no son numéricos en la tabla mediante y.tblvarfunisnumeric La función aplica la función a cada variable de la tabla.varfunisnumerictbl

cat = ~varfun(@isnumeric,tbl,'OutputFormat','uniform');

Defina una función anónima para contar el número de categorías en un predictor categórico utilizando y.numelcategories

countNumCats = @(var)numel(categories(categorical(var)));

La función anónima convierte un predictor en una matriz categórica y, a continuación, cuenta las categorías únicas no vacías del predictor.countNumCats

Utilice y para contar el número de categorías para los predictores categóricos en.varfuncountNumCatstbl

numCat = varfun(@(var)countNumCats(var),tbl(:,cat),'OutputFormat','uniform'); 

Trace el número de categorías para cada predictor categórico.

figure barh(numCat); h = gca; h.YTickLabel = VarNames(cat); ylabel('Predictor') xlabel('Number of categories')

Entrenar modelo

Para la clasificación binaria, el software utiliza un atajo computacional para encontrar una división óptima para predictores categóricos con muchas categorías. Para la clasificación con más de dos clases, puede elegir un algoritmo exacto o un algoritmo heurístico para encontrar una buena división mediante el ' nombre-valor par argumento de o.AlgorithmForCategorical'fitctreetemplateTree De forma predeterminada, 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.

Entrenar un árbol de clasificación utilizando y.tblY El vector de respuesta tiene dos clases, por lo que el software utiliza el algoritmo exacto para las divisiones predictoras categóricas.Y

Mdl = fitctree(tbl,Y)
Mdl =    ClassificationTree            PredictorNames: {1x14 cell}              ResponseName: 'Y'     CategoricalPredictors: [2 4 6 7 8 9 10 14]                ClassNames: [<=50K    >50K]            ScoreTransform: 'none'           NumObservations: 32561     Properties, Methods  

Referencias

[1] Breiman, L., J. H. Friedman, R. A. Olshen, and C. J. Stone. Classification and Regression Trees. Boca Raton, FL: Chapman & Hall, 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.

Consulte también

| | |

Temas relacionados