"Descubriendo el Poder de los Modelos de Clasificación en Machine Learning: Predicciones Precisas y Clasificaciones Sorprendentes"
Cuando se trata de Machine Learning, los modelos de clasificación son como magos que pueden predecir el futuro y clasificar cosas de manera increíblemente precisa.
Digamos que estás organizando una competencia de perros y necesitas clasificarlos en diferentes categorías según su raza. Aquí es donde entra en juego otro tipo de modelo de clasificación. Utilizando datos de entrenamiento que contienen información sobre características como el tamaño, el color del pelaje y la forma de las orejas, puedes entrenar un modelo para identificar automáticamente la raza de un perro en función de estas características. Es como tener un asistente canino inteligente que puede reconocer diferentes razas con solo echar un vistazo. ¡Es sorprendente!
Un Desafío Alquímico: Prediciendo el Origen de la Materia
Prima con Machine Learning
Hoy nos sumergiremos en un intrigante problema que desafía
los límites de la predicción y nos lleva al emocionante mundo de las materias
primas. Nos enfrentamos a un enigma: predecir a qué tipo de materia prima
pertenece un lote en función de sus características únicas.
Imagínense un misterioso lote que contiene un tesoro de datos. Sus características nos revelan secretos ocultos: el porcentaje de libras empacadas en Grado A, Grado B y Grado C, así como el total de libras del lote. Estas pistas nos conducirán al descubrimiento de su verdadero origen: ¿es una CD, un DB, un SBT o simplemente R?
No se preocupen, pues estaré a su lado en cada paso del camino para explicarles los conceptos técnicos con claridad y con ejemplos. Juntos, descubriremos cómo la validación cruzada nos brinda la confianza necesaria para enfrentar este desafío, y afinaremos los hiperparámetros para desatar todo el potencial de nuestros modelos.
Prepárense para maravillarse con las poderosas matrices de confusión que revelarán la precisión de nuestras predicciones, y para deleitarse con los bosques de decisiones que trazarán el camino hacia la resolución del enigma. Finalmente, descubriremos la verdad detrás de cada lote, dándonos el poder de tomar decisiones fundamentadas y retroalimentar los procesos de producción.
En este emocionante viaje de exploración de datos, aprenderás a utilizar la herramienta mágica llamada Python. Sumérgete en un conjunto de datos como si fuera una misteriosa cueva llena de tesoros ocultos.
Traigamos las librerías que nos facilitaran manipular los datos.
Traigamos los datos y guardémoslos en la variable dt
Abordar datos desbalanceados puede ser desafiante, pero es crucial para construir modelos precisos. Algunas estrategias incluyen el muestreo (submuestreo o sobremuestreo), la ponderación de clases (lo que aplicaremos más adelante), la generación de características y el uso de métricas de evaluación adecuadas. Encuentra el equilibrio adecuado y construye modelos confiables.
Feature Engineering
Codificando la variable de salida o resultado
Cuando se trata de Feature Engineering, no solo nos
enfocamos en las características de entrada, sino también en cómo codificar la
variable de salida o resultado. La forma en que representamos la variable
objetivo puede tener un impacto significativo en nuestros modelos de
aprendizaje automático.
Entrenamiento del Modelo: Desatando el Poder de los Datos
Paso 1
Antes de comenzar el entrenamiento, dividiremos nuestros datos en conjuntos de entrenamiento y prueba (30%). El conjunto de entrenamiento será utilizado para enseñar al modelo, mientras que el conjunto de prueba nos ayudará a evaluar su rendimiento en datos no vistos previamente. Es importante tener una evaluación imparcial y realista. Recuerdan que los datos estaban desalanceados, usemos la función stratify=y para preservar los pesos de cada categoria tanto en los datos de entrenamiento como de prueba.
Paso 2: Selección del algoritmo
El siguiente paso es seleccionar el algoritmo de aprendizaje automático adecuado para nuestro problema. Existen numerosos algoritmos, como regresión logística, árboles de decisión, bosque aleatorio, support vector machine, XGB, redes neuronales, entre otros. La elección del algoritmo dependerá de la naturaleza de nuestros datos y del objetivo de nuestro proyecto.
Qué me dicen si los probamos todos?
Paso 3: Entrenamiento del modelo
Aquí es donde la magia ocurre. Alimentaremos nuestros datos de entrenamiento a los algoritmos y los entrenaremos para aprender los patrones y relaciones presentes en los datos. Cada modelo ajustará varios parámetros y aprenderá a hacer predicciones basadas en los ejemplos proporcionados. Este proceso implica iteraciones repetidas para mejorar el rendimiento del modelo.
Paso 4: Evaluación del rendimiento
Después del entrenamiento, evaluaremos el rendimiento del modelo utilizando el conjunto de prueba. Utilizaremos métricas apropiadas según el tipo de problema, como precisión, exactitud, recall, F1-score, entre otros. Esta evaluación nos dará una idea de cómo se desempeñará nuestro modelo en situaciones reales.
Explicación de las métricas para la evaluación de un modelo de clasificación.
Fórmula: Precision
= TP / (TP + FP)
- TP (True
Positives): Número de instancias positivas correctamente clasificadas.
- FP (False Positives): Número de instancias negativas incorrectamente clasificadas como positivas.
2. Recall (Sensibilidad, Exhaustividad o Tasa de Verdaderos Positivos): Mide la proporción de instancias positivas que son correctamente detectadas.
Fórmula: Recall = TP / (TP + FN)
- FN (False Negatives): Número de instancias positivas incorrectamente clasificadas como negativas.
3. F1-Score: Es una métrica que combina la precisión y el recall para obtener un único valor que resume el rendimiento del modelo.
Fórmula: F1-Score = 2 * (Precision * Recall) / (Precision + Recall)
4. Exactitud (Accuracy): Mide la proporción de instancias clasificadas correctamente sobre el total de instancias.
Fórmula:
Accuracy = (TP + TN) / (TP + TN + FP + FN)
- TN (True Negatives): Número de
instancias negativas correctamente clasificadas.
- TP + TN: Número
total de instancias correctamente clasificadas.
Estas fórmulas se utilizan para calcular las métricas de evaluación de un modelo de clasificación. Es importante destacar que las métricas pueden variar dependiendo del problema y del enfoque específico de evaluación utilizado.
Paso 5: Ajuste y validación
Si el rendimiento del modelo no es satisfactorio, podemos realizar ajustes y mejoras. Podemos ajustar los hiperparámetros del modelo, probar diferentes algoritmos o realizar más Feature Engineering. La validación cruzada nos ayudará a evaluar el rendimiento del modelo de manera más robusta y tomar decisiones informadas sobre cómo mejorarlo.
Validación cruzada (Cross-Validation)
Se está utilizando la validación cruzada para buscar los mejores parámetros del modelo de regresión logística.
La función GridSearchCV se encarga de realizar la búsqueda exhaustiva de los parámetros especificados en una cuadrícula y utiliza validación cruzada para evaluar el rendimiento del modelo en diferentes divisiones de los datos.
La validación cruzada es una técnica comúnmente utilizada en el aprendizaje automático para evaluar y seleccionar modelos de manera más robusta. En lugar de dividir los datos en un conjunto de entrenamiento y un conjunto de prueba fijo, la validación cruzada divide los datos en k partes iguales (folds) y realiza k iteraciones donde cada fold se utiliza como conjunto de prueba una vez, mientras que los demás folds se utilizan como conjunto de entrenamiento. Esto permite una evaluación más precisa del rendimiento del modelo al promediar los resultados obtenidos en cada iteración.
En el código proporcionado, se utiliza GridSearchCV con una
validación cruzada de 5 folds (cv=5) para buscar los mejores parámetros del
modelo de regresión logística. Esto significa que los datos se dividirán en 5
partes iguales y se realizarán 5 iteraciones para evaluar el modelo en
diferentes divisiones de los datos.
Probemos con otros algoritmos!
Máquina de soporte vectorial (Support Vector Machine o SVM)
¿Alguna vez han sentido que los datos les desafían a encontrar una línea divisoria clara y definida? ¡Las SVM están aquí para romper esas barreras! Estas máquinas aprenden del pasado y extraen patrones complejos para trazar límites en un mundo de datos multidimensionales.
Imaginen un campo de batalla, donde las clases se enfrentan y luchan por la supremacía. Aquí es donde las SVM entran en acción, equipadas con una astucia matemática y un espíritu implacable para encontrar el hiperplano óptimo, esa línea mágica que separa las clases con el mayor margen posible.
Pero no crean que las SVM son solo un par de algoritmos aburridos. ¡No! Son mucho más que eso. Son auténticos campeones del aprendizaje automático, capaces de resolver problemas de clasificación binaria y multiclase con elegancia y eficiencia.
Imaginemos una situación en la que tengamos una tarea de clasificación por delante. Nuestro héroe, el SVM, se enfrenta a un mar de puntos de datos, cada uno deseando ser asignado a su clase correspondiente. Con su magia matemática, el SVM busca el equilibrio perfecto entre el aprendizaje y el generalismo, para evitar tanto el sobreajuste como el subajuste.
¡Pero espera, hay más! Las SVM también pueden manejar características no lineales, gracias a una técnica poderosa llamada kernelización. Al combinar habilidades matemáticas con la capacidad de transformar los datos a espacios de características más complejos, las SVM pueden superar incluso los desafíos más retorcidos y confusos.
Ahora que hemos encendido la llama de su curiosidad, prepárense para sumergirse en el fascinante mundo de las SVM.
¡Árboles de Decisión, la hoja de ruta hacia la inteligencia!
Imaginen un frondoso bosque, lleno de árboles majestuosos, cada uno con ramas extendiéndose en todas las direcciones. Ahora, visualicen que estos árboles no son solo maravillas de la naturaleza, sino que también representan la toma de decisiones en el mundo de la inteligencia artificial. ¡Bienvenidos al apasionante mundo de los árboles de decisión!
Los árboles de decisión son como mapas intrincados que nos guían a través del laberinto de los datos. Son algoritmos que toman una serie de preguntas y condiciones, y nos conducen por un camino específico hasta llegar a una conclusión. ¡Son como guías expertos, llevándonos hacia la respuesta correcta con confianza y precisión!
Estos árboles se construyen a través de un proceso de aprendizaje automático, donde se utilizan ejemplos de datos etiquetados para aprender patrones y reglas. Una vez construido, el árbol de decisión se convierte en una herramienta poderosa para clasificar nuevas instancias o predecir resultados futuros. ¡Es como tener un navegante en el océano de datos, listo para mostrarte el camino hacia el éxito!
¡Bosques Aleatorios, donde los árboles cobran vida!
Pero, ¿qué ocurre cuando un solo árbol no es suficiente para satisfacer nuestra curiosidad? ¡Ahí es cuando entra en juego el emocionante mundo de los Bosques Aleatorios!
Los Bosques Aleatorios son como un carnaval fascinante, lleno de diversidad y alegría. En lugar de depender únicamente de un solo árbol de decisión, los Bosques Aleatorios combinan múltiples árboles para formar un verdadero ejército de sabiduría colectiva. Cada árbol en el bosque toma decisiones basadas en diferentes características y juntos forman una fuerza imparable.
Al combinar la sabiduría de múltiples árboles, los Bosques Aleatorios pueden ofrecer resultados más precisos y robustos. Además, tienen la capacidad de manejar conjuntos de datos grandes y complejos, proporcionando una poderosa herramienta para la clasificación y la regresión. ¡Imaginen un coro de árboles, cada uno con su voz única, creando una sinfonía de aprendizaje automático!
¡XGB, el héroe de la velocidad y la precisión!
¡Pero espera, aquí viene XGB, el héroe de la velocidad y la precisión! XGB, también conocido como Gradient Boosting Extreme, es como el corredor olímpico de los algoritmos de aprendizaje automático. ¡Es rápido, poderoso y siempre busca la excelencia!
XGB se basa en la técnica de impulso de gradientes, que implica construir árboles de decisión de manera secuencial, donde cada árbol se centra en mejorar las debilidades del modelo anterior. A medida que los árboles se construyen y se combinan, el modelo se vuelve cada vez más preciso y eficiente. ¡Es como tener un entrenador personal que te empuja constantemente hacia el máximo rendimiento!
La velocidad y la precisión son las joyas de la corona de XGB. Gracias a su capacidad para procesar grandes volúmenes de datos de manera eficiente, XGB se ha convertido en una opción popular en aplicaciones donde el tiempo es crucial, como el procesamiento de datos en tiempo real y la competición de ciencia de datos. ¡Con XGB a tu lado, estarás preparado para conquistar cualquier desafío de aprendizaje automático con velocidad y estilo!
creditos imagen: imagen
¡KNN, el vecino curioso que siempre está ahí!
¿Alguna vez has pensado en cómo tus vecinos pueden ser útiles en momentos de necesidad? ¡Bueno, KNN es ese vecino curioso y servicial en el mundo de los algoritmos de aprendizaje automático!
KNN, que significa k-nearest neighbors (k-vecinos más cercanos), es un algoritmo que busca respuestas en su vecindario. Cuando se le presenta un problema, KNN encuentra los puntos de datos más cercanos en función de la similitud de sus características y se basa en su comportamiento para tomar una decisión. ¡Es como tener una comunidad sólida a la que acudir en busca de ayuda!
La belleza de KNN radica en su simplicidad y enfoque intuitivo. No requiere ninguna suposición sobre la estructura subyacente de los datos y puede adaptarse fácilmente a diferentes escenarios. Sin embargo, también es importante tener en cuenta que el rendimiento de KNN puede verse afectado por la elección del valor de "k" y la métrica de distancia utilizada. ¡Así que asegúrate de elegir sabiamente a tus vecinos más cercanos!
¡Ahí lo tienen, intrépidos aprendices y maestros universitarios! Los árboles de decisión, los bosques aleatorios, XGB y KNN son solo algunas de las emocionantes herramientas que nos ofrece el vasto mundo del aprendizaje automático. Cada uno tiene su propio encanto y nos lleva por caminos emocionantes hacia el conocimiento y la comprensión.
Así que, ¡adelante! ¡Sumérjanse en estos algoritmos con entusiasmo y aprovechen su poder para desentrañar los misterios de los datos! ¡Que la aventura comience y que el aprendizaje nunca termine!
Paso 6: Que gane el mejor!
¡Oh, vaya! Parece que estamos en un momento crucial, donde debemos tomar una decisión épica: elegir el mejor algoritmo entre los que hemos explorado, teniendo en cuenta métricas clave como la exactitud (accuracy), la precisión (precision), la exhaustividad (recall) y el puntaje F1 (F1-score). ¡Prepárense para la gran revelación!
Después de un exhaustivo proceso de pruebas y evaluación, he sometido a todos los algoritmos a un desafío titánico. Han competido en una serie de tareas deslumbrantes y han demostrado sus habilidades en cada una de las métricas que nos interesan. Ahora, llegó el momento de desvelar al campeón supremo.
Redoble de tambores, por favor...
El ganador de esta emocionante batalla de algoritmos es...
¡KNN, el increíble K vecinos cercanos!
KNN ha demostrado ser un verdadero titán en términos de precisión, exhaustividad y F1-score. Su capacidad para agrupar continuamente a través de la búsqueda implacable de las mínimas distancias le ha dado una ventaja significativa sobre los demás. Es un algoritmo rápido, poderoso y siempre busca la excelencia.
Si bien los árboles de decisión y los bosques aleatorios también han mostrado un rendimiento impresionante, KNN se ha destacado en todas las métricas clave que hemos considerado. Su precisión en la clasificación de datos es asombrosa, su capacidad para identificar verdaderos positivos y minimizar los falsos negativos es excepcional, y su F1-score equilibra de manera brillante la precisión y la exhaustividad.
Dicho esto, es importante recordar que la elección del algoritmo "mejor" depende en última instancia del contexto y los requisitos específicos de tu problema. Cada algoritmo tiene sus fortalezas y debilidades, y es fundamental tener en cuenta el conjunto de datos y el objetivo que buscas lograr.
¡Así que felicidades a KNN por su victoria impresionante! Pero también te animo a explorar y experimentar con otros algoritmos, ya que en diferentes situaciones podrían surgir sorpresas y desafíos que requieran diferentes enfoques.
En última instancia, la emoción y la diversión de la exploración en el mundo del aprendizaje automático radican en descubrir qué algoritmo se adapta mejor a tus necesidades y te ayuda a desatar todo tu potencial en el análisis de datos. ¡Que tus futuras aventuras sean emocionantes y llenas de descubrimientos sorprendentes!
Pongamos todas las piezas juntas.
# Preparación de los datos en dos tipo: entrenamiento(train) y prueba(test) X = dt.drop(['MP_encoded'], axis=1) y = dt['MP_encoded'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y, random_state=42) scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # Lista de los modelo de clasificación que vamos a entrenar model_list = [ LogisticRegression(max_iter=1000),#Regresión logística svm.SVC(),#Máquina de soporte vectorial DecisionTreeClassifier(), #Árbol de decisión RandomForestClassifier(n_estimators=300), # Bosque aleatorio xgb.XGBClassifier(), # Xtreme Gradient Boosting KNeighborsClassifier() # K-nearest neighbors ] # Lista con los parametros que se evaluaran con su respectivo algoritmo param_list = { "Logreg": {'C': [0.001, 0.01, 0.1, 1, 10]}, "svm": {'kernel': ('linear', 'rbf'), 'C': [0.001, 0.01, 0.1, 1, 10]}, "Tree": { 'criterion': ['gini', 'entropy'], 'max_depth': [None, 5, 10, 15], 'min_samples_split': [2, 5, 10], 'min_samples_leaf': [1, 2, 4] }, "Forest": { 'n_estimators': [100, 200, 300], 'max_depth': [None, 5, 10], 'min_samples_split': [2, 5, 10], 'min_samples_leaf': [1, 2, 4] }, "xgb": {'learning_rate': [0.1, 0.01], 'max_depth': [3, 5, 7], 'n_estimators': [100, 200, 300] }, "knn": { 'n_neighbors': [2,3,4,5,6,7], 'weights': ['uniform', 'distance'], 'p': [1, 2] } } # Función que devuelve las métricas de evaluación def metricas(y_test, y_pred): accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred, average='macro', zero_division=1) recall = recall_score(y_test, y_pred, average='macro') f1 = f1_score(y_test, y_pred, average='macro') return accuracy, precision, recall, f1 # Función que realiza la validación cruzada y devuelve los mejores parámetros y predicciones def val_cruz(model, param_grid, X_train, y_train, X_test): grid_search = GridSearchCV(model, param_grid, cv=5, scoring='accuracy') grid_search.fit(X_train, y_train) pred = grid_search.predict(X_test) best_params = grid_search.best_params_ return best_params, pred # Función que encuentra los mejores parametros para cada modelo y devuelve un diccionario con los resultados de cada evaluación def eval_model(model_list, param_list, X_train, y_train, X_test, y_test): model_results = [] for name, model, params in zip(param_list.keys(), model_list, param_list.values()): best_params, pred = val_cruz(model, params, X_train, y_train, X_test) acc, pre, re, f1 = metricas(y_test, pred) model_results.append(pd.DataFrame({ "Name": [name], "best_params": [best_params], "predictions": [pred], "accuracy": [acc], "precision": [pre], "recall": [re], "f1_score": [f1] })) results = pd.concat(model_results, ignore_index=True) return results # Llamar a la función eval_model results = eval_model(model_list, param_list, X_train, y_train, X_test, y_test) print(results) # Función que grafica y devuelve la matriz de confusión def grafica_cm(y_test, y_pred): cm = confusion_matrix(y_test, y_pred) fig, ax = plt.subplots() sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', ax=ax) ax.set_xlabel('Etiqueta Predicha') ax.set_ylabel('Etiqueta Real') ax.set_title('Matriz de Confusión') plt.show() return cm # Llamar a la función para graficar la matriz de confusión grafica_cm(y_test, results.loc[0, 'predictions']) # Ordena los resultados de mayor a menor f1_score de cada algoritmo y guardemoslos en r_sorted r_sorted = results.sort_values("f1_score", ascending=False) # Presentamos los nombres de los algoritmos con los resultados de sus métricas r_sorted.loc[:,["Name","accuracy", "precision", "recall", "f1_score"]] # Guardamos los resultados para futuras implementaciones en un archivo excel results.to_excel("ML_results.xlsx")
Encuentra los mejores libros de machine learning aqui.
Machine Learning Books