¿Cómo implementar el estimador Bagging Classifier en scikit-learn?
La implementación del Bagging Classifier de scikit-learn permite realizar técnicas de ensamblado aplicables a diversas familias de estimadores. Al utilizar estas herramientas, puedes optimizar modelos de clasificación, como el diagnóstico de afecciones cardiacas, mejorando la precisión y rendimiento de las predicciones. Brindándote una versatilidad única y permitiéndote personalizar tu metodología para abordar diferentes problemas de aprendizaje automático.
¿Cómo importar las herramientas necesarias?
Para comenzar, es fundamental importar las librerías requeridas. Aquí mostramos cómo hacerlo:
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
Este conjunto de herramientas facilita la manipulación de datos, la creación de modelos de clasificador, y la evaluación de la precisión del modelo.
¿Cómo cargar y preparar el dataset?
El siguiente paso es cargar el dataset de afecciones cardiacas (heart.csv) utilizando pandas y prepararlo para el análisis:
if __name__ =='__main__': dataset = pd.read_csv("data/heart.csv")
A continuación, verificamos la estructura y estadísticas básicas de la columna objetivo (target):
print(dataset['target'].describe())
Esto te dará una idea del contenido de la columna target, que en este caso presenta datos binarios: 0 indica ausencia y 1 presencia de una afección cardiaca.
¿Cómo manipular los datos para el entrenamiento del modelo?
El dataset necesita estar en el formato adecuado para ser utilizado en el modelo. Comenzamos separando las características de los objetivos y dividiendo el conjunto en datos de entrenamiento y prueba:
Al utilizar train_test_split, separamos nuestros datos en un 65% para entrenamiento y un 35% para pruebas, garantizando una amplia cobertura en ambos conjuntos.
¿Cómo aplicar el estimador Bagging Classifier?
Ahora estamos listos para implementar el Bagging Classifier y compararlo con un clasificador simple:
Definimos un clasificador base, por ejemplo, KNeighborsClassifier.
Creamos el estimador de ensamblado utilizando BaggingClassifier.
Entrenamos el modelo utilizando las características y objetivos de entrenamiento:
bagging_clf.fit(X_train, y_train)
Finalmente, evaluamos el rendimiento del modelo en los datos de prueba y calculamos la precisión:
y_pred = bagging_clf.predict(X_test)accuracy = accuracy_score(y_test, y_pred)print(f'Precisión del modelo: {accuracy}')
¿Por qué utilizar un método de ensamblado?
El Bagging Classifier combina múltiples estimadores para mejorar la estabilidad y precisión del modelo predictivo, reduciendo el riesgo de sobreajuste cuando se usa un único modelo. La implementación de tales técnicas puede marcar una diferencia significativa en la calidad de la predicción en proyectos de inteligencia artificial y aprendizaje automático.
Recuerda explorar distintas configuraciones y ajustar parámetros para maximizar el potencial de tu modelo personalizado, adaptándose mejor a tus necesidades y características específicas del dataset con el que trabajas. ¡Sigue adelante, cada ajuste te lleva un paso más cerca de la perfección en tus modelos predictivos!
Pienso que Platzi debería rehacer los cursos introductorios tanto teórico como práctico en Machine de la mano del profesor Ariel, en realidad transmite bien las ideas y deja todo claro
Estoy de acuerdo
Totalmente de acuerdo, muchos cursos son aburridísimos, cuesta demasiado poner atención como todos los de álgebra lineal con python o los de vectores.
Que excelente clase :D
Corintios 8:2
El curso tiene mucho analisis numerico sin saber que hay detras de cada uno de esos analisis (ni como se hace).
Un curso demasiado incompleto y basico. Sin saber (o no tener idea de..) como resuelven los problemas planteados.
Sí, también creo que debería de haber una explicación matematica a toda esta implementación.
si hiciera la demostración matemática podria duplicar el tiempo del curso u omitir la parte práctica que es lo que persigue el curso
Claro, directo, conciso y bien estructurado. Excelente clase
google collab
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
#tamano de conjunto de prueba de 35%
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.35)
import pandas as pd
from sklearn.neighborsimportKNeighborsClassifierfrom sklearn.ensembleimportBaggingClassifierfrom sklearn.model_selectionimporttrain_test_splitfrom sklearn.metricsimport accuracy_score
if __name__ =="__main__": dt_heart = pd.read_csv('datos/heart.csv')#print(dt_heart[‘target’].describe()) #min 0, max 1 x = dt_heart.drop(['target'], axis=1) y = dt_heart['target'] #tamano de conjunto de prueba de 35% x_train, x_test, y_train, y_test =train_test_split(x, y, test_size=0.35)
Qué pasa si en lugar de clasificar y tener resultados solo binarios, tenemos resultados de una regresión?
¿Cuanto usar accurcay_score y cuando .score? porque en regresión logística y en DecisionTreeClasifier las cuales son clasificaciones usamos .score y Ariel dijo que en este caso pone accuracy_score porque es clasificacion?
así es son diferentes métodos matemáticos que requieren evaluarse diferente:
Te dejo el link de la documentación de Metrics, ahí explica muy bien que tipo de evaluación se debe hacer para cada modelo.
https://scikit-learn.org/stable/modules/model_evaluation.html
La preparación de datos es un paso crucial en la implementación de métodos de conjunto. Aunque los métodos de ensamble en sí mismos no cambian significativamente la forma en que se preparan los datos en comparación con otros algoritmos de aprendizaje automático, es importante asegurarse de que los datos estén limpios, formateados y listos para ser utilizados por los métodos de ensamble
Mas clases como estas por favor!!!
que diferencia hay entre asignar la columna de un dataframe con dos corchetes vs uno
y = dt_heart['target']
a
y = dt_heart[['target']]
Cuando le asignas solo 1 corchete estas diciendo que el tipo de variable es una serie:
'pandas.core.series.Series'
En cambio, con 2 corchetes, la variable es de tipo DataFrame:
'pandas.core.frame.DataFrame'
Tal cual lo menciona Mauricio, uno es una serie o de dimensión (n, ) y el otro es un dataframe o de dimensión (n,1).
Si nuestra variable target, en lugar de tener un binario numérico 1,0 tiene un binario en texto por ejemplo 's' , 'n' se debe convertir primero a 1,0 o es indistinto??
para ese caso se aplica un encoder, como por ejemplo el get_dummies de pandas.
Con este código logré el 75.48 % de precisión. Se los dejo para que jueguen con él:
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
if __name__ =="__main__": data = pd.read_csv('./data/heart.csv') X = data.drop(['target'], axis=1) Y = data['target'] X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.35)# Crear un modelo de Bagging con KNeighborsClassifier knn = KNeighborsClassifier() bagging_model = BaggingClassifier(estimator=knn, n_estimators=50, random_state=42)# Entrenar el modelo bagging_model.fit(X_train, Y_train)# Hacer predicciones en el conjunto de prueba Y_pred = bagging_model.predict(X_test)# Calcular la precisión accuracy = accuracy_score(Y_test, Y_pred)# Imprimir la precisión del modeloprint(f'Precisión del modelo Bagging con KNN: {accuracy}')
En 5 minutos te explica mucho más que en otros lugares en varias horas 🚀🔥