# C4.5

C4.5 es un algoritmo usado para generar un árbol de decisión desarrollado por Ross Quinlan. C4.5 es una extensión del algoritmo ID3 desarrollado anteriormente por Quinlan. Los árboles de decisión generados por C4.5 pueden ser usados para clasificación, y por esta razón, C4.5 está casi siempre referido como un clasificador estadístico.

## Algoritmo

C4.5 construye árboles de decisión desde un grupo de datos de entrenamiento de la misma forma en que lo hace ID3, usando el concepto de entropía de información. Los datos de entrenamiento son un grupo $S={s_{1},s_{2},...}$ de ejemplos ya clasificados. Cada ejemplo $s_{i}={x_{1},x_{2},...}$ es un vector donde $x_{1},x_{2},...$ representan los atributos o características del ejemplo. Los datos de entrenamiento son aumentados con un vector $C={c_{1},c_{2},...}$ donde $c_{1},c_{2},...$ representan la clase a la que pertenece cada muestra.
En cada nodo del árbol, C4.5 elige un atributo de los datos que más eficazmente dividen el conjunto de muestras en subconjuntos enriquecidos en una clase u otra. Su criterio es el normalizado para ganancia de información (diferencia de entropía) que resulta en la elección de un atributo para dividir los datos. El atributo con la mayor ganancia de información normalizada se elige como parámetro de decisión. El algoritmo C4.5 divide recursivamente en sublistas más pequeñas.
Este algoritmo tiene unos pocos casos base.
* Todas las muestras en la lista pertenecen a la misma clase. Cuando esto sucede, simplemente crea un nodo de hoja para el árbol de decisión diciendo que elija esa clase.
* Ninguna de las características proporciona ninguna ganancia de información. En este caso, C4.5 crea un nodo de decisión más arriba del árbol utilizando el valor esperado de la clase.
* Instancia de la clase previamente no vista encontrada. Una vez más, C4.5 crea un nodo de decisión más arriba en el árbol con el valor esperado.

### Pseudocódigo

En pseudocódigo, el algoritmo general para construir árboles de decisión es:
* Comprobar los casos base
* Para cada atributo a
** Encontrar la ganancia de información normalizada de la división de a
* Dejar que a_best sea el atributo con la ganancia de información normalizada más alta
* Crear un nodo de decisión que divida a_best
* Repetir en las sublistas obtenidas por división de a_best, y agregar estos nodos como hijos de nodo

## Implementaciones

J48 es una implementación open source en lenguaje de programación Java del algoritmo C4.5 en la herramienta weka de minería de datos.

## Mejoras respecto al algoritmo ID3

En C4.5 se hicieron un número de mejoras a ID3. Algunas de ellas son:
* Manejo de ambos atributos continuos y discretos - A fin de manejar atributos continuos, C4.5 crea un umbral y luego se divide la lista en aquellos cuyo valor de atributo es superior al umbral y los que son menores o iguales a él.
* Manejo de los datos de formación con valores de atributos faltantes - C4.5 permite valores de los atributos para ser marcado como? para faltantes. Los valores faltantes de los atributos simplemente no se usa en los cálculos de la ganancia y la entropía.
* Manejo de atributos con costos diferentes.
* Podando árboles después de la creación - C4.5 se remonta a través del árbol una vez que ha sido creado e intenta eliminar las ramas que no ayudan, reemplazándolos con los nodos de hoja.

## Mejoras en Algoritmo C5.0/See5

Quinlan continuó con la creación del C5.0 y el See5 (C5.0 para Unix / Linux, See5 para Windows) con fines comerciales. C5.0 ofrece una serie de mejoras en el C4.5. Algunas de estas son:
* Velocidad - C5.0 es significativamente más rápido que el C4.5 (varios órdenes de magnitud)
* El uso de memoria - C5.0 es más eficiente que el C4.5
* Árboles de decisión más pequeños - C5.0 obtiene resultados similares a C4.5 con árboles de decisión mucho más pequeños.
* Soporte para boosting - Boosting mejora los árboles y les da una mayor precisión.
* Ponderación - C5.0 le permite ponderar los distintos casos y tipos de errores de clasificación.
* Winnowing - una opción automática de C5.0 consiste en aplicar un algoritmo de clasificación (algoritmo Winnow) a los atributos para eliminar aquellos que sean de poca ayuda.
Los Fuentes de una versión para Linux de un único subproceso de C5.0 están disponibles bajo licencia GPL. También se encuentra disponible una implementación del algoritmo en R