domingo, 14 de enero de 2024

Aplicación Práctica: Árboles de Decisión (Aprendizaje Supervisado)

 Definición de Árboles de Decisión: Los árboles de decisión son estructuras jerárquicas en forma de árbol que representan decisiones y sus posibles consecuencias. Cada nodo interno del árbol representa una prueba en un atributo, cada rama representa el resultado de la prueba y cada hoja representa una decisión o un valor de salida. En resumen, son modelos de predicción utilizados para tareas de clasificación y regresión.

Fundamentos de Árboles de Decisión:

1.     División de Datos: Los árboles de decisión buscan dividir los datos en subconjuntos más puros en términos de la variable objetivo (clasificación) o reducir la variabilidad (regresión).

2.     Criterios de División: Al tomar decisiones en cada nodo, se utiliza un criterio para determinar qué característica dividir. Algunos criterios comunes incluyen Gini impurity para clasificación y error cuadrático medio para regresión.

3.     Entropía: La entropía mide la impureza de un conjunto de datos. El objetivo es reducir la entropía a medida que se avanza en el árbol, creando subconjuntos más homogéneos.

4.     Poda (Pruning): La poda es un proceso que se utiliza para evitar el sobreajuste (overfitting) del modelo. Consiste en eliminar nodos o ramas del árbol que no contribuyen significativamente a la precisión.

Aplicación de Árboles de Decisión:

1.     Clasificación: Los árboles de decisión son comúnmente utilizados para tareas de clasificación, donde se intenta predecir a qué clase pertenece una observación.

2.     Regresión: Además de clasificación, los árboles de decisión también se utilizan para tareas de regresión, prediciendo un valor numérico en lugar de una clase.

3.     Interpretación: Una ventaja clave de los árboles de decisión es su interpretabilidad. Son fáciles de entender y visualizar, lo que hace que sea sencillo explicar cómo se toman las decisiones.

4.     Aprendizaje Supervisado: Se utilizan en aprendizaje supervisado, donde el modelo se entrena con ejemplos etiquetados para aprender a hacer predicciones en datos nuevos.

5.     Ensembles: Los árboles de decisión se pueden combinar en conjuntos (ensambles) como Random Forests o Gradient Boosted Trees para mejorar la precisión y robustez del modelo.

Pasos Generales para Crear un Árbol de Decisión:

1.     Recopilación de Datos: Obtener un conjunto de datos etiquetado para entrenar el modelo.

2.     Selección de Características: Identificar las características relevantes para la tarea.

3.     División de Datos: Utilizar criterios para dividir el conjunto de datos en subconjuntos más homogéneos.

4.     Construcción del Árbol: Repetir el proceso de división hasta que se alcance cierto criterio de parada o pureza.

5.     Poda (Opcional): Aplicar técnicas de poda para evitar el sobreajuste.

6.     Predicción: Utilizar el árbol entrenado para hacer predicciones en nuevos datos.

Ejemplo 1

Realizar una implementación simple de un árbol de decisión en un caso de estudio de clasificación binaria para el diagnóstico médico. Es importante señalar que el conjunto de datos utilizado en este ejemplo es hipotético y no representa datos médicos reales Supongamos que estamos construyendo un modelo para predecir si un paciente tiene diabetes o no, basándonos en características médicas.

import pandas as pd
import numpy as np

# Configuración para reproducibilidad
np.random.seed(42)

# Crear un conjunto de datos ficticio
num_samples = 1000

data = {
    'Edad': np.random.randint(18, 65, num_samples),
    'PresionArterial': np.random.randint(80, 140, num_samples),
    'NivelAzucar': np.random.randint(70, 200, num_samples),
    'Colesterol': np.random.randint(120, 240, num_samples),
    'Peso': np.random.uniform(50, 100, num_samples),
    'Altura': np.random.uniform(150, 190, num_samples),
    'Diabetes': np.random.choice([0, 1], num_samples)
}

# Crear DataFrame
df = pd.DataFrame(data)

# Guardar DataFrame como CSV
df.to_csv('datos_csv.csv', index=False)

# Mostrar las primeras filas del conjunto de datos
print(df.head())



Ejemplo 2

Ajustando el ejemplo 1 con los hiperparámetros, realizando ingeniería de características y considerando técnicas de validación cruzada

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn.preprocessing import StandardScaler

# Cargar datos ficticios desde el archivo CSV
data = pd.read_csv('datos_csv.csv')

# Dividir datos en características (X) y etiquetas (y)
X = data.drop('Diabetes', axis=1)
y = data['Diabetes']

# Escalar características
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Dividir datos escalados en conjunto de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# Crear y entrenar el árbol de decisiones
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)

# Realizar predicciones en el conjunto de prueba
y_pred = model.predict(X_test)

# Evaluar el rendimiento del modelo
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
classification_rep = classification_report(y_test, y_pred)

# Mostrar resultados
print(f'Accuracy: {accuracy:.2f}')
print(f'Confusion Matrix:\n{conf_matrix}')
print(f'Classification Report:\n{classification_rep}')


En este ejemplo, se ha utilizado la técnica de validación cruzada con GridSearchCV para ajustar los hiperparámetros del árbol de decisión. También se ha incorporado la estandarización de características utilizando StandardScaler.

Ejemplo 3

Crear un árbol de decisiones con datos ficticios usando el código Python en el area de la medicina para un caso de clasificación binaria para el diagnóstico médico para predecir si el paciente tiene diabetes o no, incluir visualizaciones y tablas comparativas con los resultados alcanzados. Utilizando las bibliotecas matplotlib y seaborn para visualizaciones, y pandas para crear tablas comparativas.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn.preprocessing import StandardScaler

# Cargar datos ficticios desde el archivo CSV
data = pd.read_csv('datos_csv.csv')

# Dividir datos en características (X) y etiquetas (y)
X = data.drop('Diabetes', axis=1)
y = data['Diabetes']

# Escalar características
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Dividir datos escalados en conjunto de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# Crear y entrenar el árbol de decisiones
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)

# Realizar predicciones en el conjunto de prueba
y_pred = model.predict(X_test)

# Evaluar el rendimiento del modelo
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
classification_rep = classification_report(y_test, y_pred)

# Visualizar la matriz de confusión
plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', cbar=False)
plt.title('Matriz de Confusión')
plt.xlabel('Predicciones')
plt.ylabel('Valores Verdaderos')
plt.show()

# Tabla comparativa de resultados
results_df = pd.DataFrame({
    'Métrica': ['Accuracy'],
    'Modelo': [accuracy]
})

# Mostrar resultados en forma de tabla
print("\nTabla Comparativa de Resultados:")
print(results_df)

# Visualizar características más importantes
feature_importances = model.feature_importances_
feature_names = X.columns

plt.figure(figsize=(10, 6))
sns.barplot(x=feature_importances, y=feature_names, palette='viridis')
plt.title('Importancia de las Características')
plt.xlabel('Importancia')
plt.ylabel('Características')
plt.show()





Este código añade:

Visualización de la matriz de confusión.

Una tabla comparativa de resultados.

Visualización de la importancia de las características.







No hay comentarios:

Publicar un comentario

Aplicación Práctica: Regresión Logística (Aprendizaje Supervisado)

  Definicion.-   La regresión logística es un método estadístico utilizado para modelar la probabilidad de que una variable dependiente bina...