Primeros pasos con Scikit-learn para la clasificación en el aprendizaje automático

Primeros pasos con Scikit-learn para la clasificación en el aprendizaje automático

Nodo de origen: 1780638
Primeros pasos con Scikit-learn para la clasificación en el aprendizaje automático
Imagen por editor
 

Scikit-learn es una de las bibliotecas de aprendizaje automático más utilizadas integradas en Python. Su popularidad se puede atribuir a su estructura de código fácil y consistente que es amigable para los desarrolladores principiantes. Además, hay un alto nivel de soporte disponible junto con flexibilidad para integrar funcionalidades de terceros, lo que hace que la biblioteca sea sólida y adecuada para la producción. La biblioteca contiene múltiples modelos de aprendizaje automático para clasificación, regresión y agrupación. En este tutorial, exploraremos el problema de la clasificación multiclase a través de varios algoritmos. Profundicemos en él y construyamos nuestros modelos scikit-learn.

pip install scikit-learn

Usaremos el conjunto de datos "Wine" disponible en el módulo de conjuntos de datos de scikit-learn. Este conjunto de datos consta de 178 muestras y 3 clases en total. El conjunto de datos ya está preprocesado y convertido en vectores de características, por lo tanto, podemos usarlo directamente para entrenar nuestros modelos.

from sklearn.datasets import load_wine X, y = load_wine(return_X_y=True)

Mantendremos el 67% de los datos para entrenamiento y el 33% restante para pruebas.

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42
)

 

Ahora, experimentaremos con 5 modelos diferentes de diferentes complejidades y evaluaremos sus resultados en nuestro conjunto de datos.

model_lr = LogisticRegression()
model_lr.fit(X_train, y_train)
y_pred_lr = model_lr.predict(X_test) print("Accuracy Score: ", accuracy_score(y_pred_lr, y_test))
print(classification_report(y_pred_lr, y_test))

 

Salida

Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59
model_knn = KNeighborsClassifier(n_neighbors=1)
model_knn.fit(X_train, y_train)
y_pred_knn = model_knn.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_knn, y_test))
print(classification_report(y_pred_knn, y_test))

 

Salida 

Accuracy Score: 0.7796610169491526 precision recall f1-score support 0 0.90 0.78 0.84 23 1 0.75 0.82 0.78 22 2 0.67 0.71 0.69 14 accuracy 0.78 59 macro avg 0.77 0.77 0.77 59
weighted avg 0.79 0.78 0.78 59

 

Al cambiar el parámetro 'n_neighbors=2' observamos una disminución en el valor de la precisión. Por lo tanto, muestra que los datos son lo suficientemente simples y logran un mejor aprendizaje con un solo vecino a considerar. 

Salida 

Accuracy Score: 0.6949152542372882 precision recall f1-score support 0 0.90 0.72 0.80 25 1 0.75 0.69 0.72 26 2 0.33 0.62 0.43 8 accuracy 0.69 59 macro avg 0.66 0.68 0.65 59
weighted avg 0.76 0.69 0.72 59
from sklearn.naive_bayes import GaussianNB model_nb = GaussianNB()
model_nb.fit(X_train, y_train)
y_pred_nb = model_nb.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_nb, y_test))
print(classification_report(y_pred_nb, y_test))

 

Salida

Accuracy Score: 1.0 precision recall f1-score support 0 1.00 1.00 1.00 20 1 1.00 1.00 1.00 24 2 1.00 1.00 1.00 15 accuracy 1.00 59 macro avg 1.00 1.00 1.00 59
weighted avg 1.00 1.00 1.00 59
from sklearn.tree import DecisionTreeClassifier model_dtclassifier = DecisionTreeClassifier()
model_dtclassifier.fit(X_train, y_train)
y_pred_dtclassifier = model_dtclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_dtclassifier, y_test))
print(classification_report(y_pred_dtclassifier, y_test))

 

Salida

Accuracy Score: 0.9661016949152542 precision recall f1-score support 0 0.95 0.95 0.95 20 1 1.00 0.96 0.98 25 2 0.93 1.00 0.97 14 accuracy 0.97 59 macro avg 0.96 0.97 0.97 59
weighted avg 0.97 0.97 0.97 59
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV def get_best_parameters(): params = { "n_estimators": [10, 50, 100], "max_features": ["auto", "sqrt", "log2"], "max_depth": [5, 10, 20, 50], "min_samples_split": [2, 4, 6], "min_samples_leaf": [2, 4, 6], "bootstrap": [True, False], } model_rfclassifier = RandomForestClassifier(random_state=42) rf_randomsearch = RandomizedSearchCV( estimator=model_rfclassifier, param_distributions=params, n_iter=5, cv=3, verbose=2, random_state=42, ) rf_randomsearch.fit(X_train, y_train) best_parameters = rf_randomsearch.best_params_ print("Best Parameters:", best_parameters) return best_parameters parameters_rfclassifier = get_best_parameters() model_rfclassifier = RandomForestClassifier( **parameters_rfclassifier, random_state=42
) model_rfclassifier.fit(X_train, y_train) y_pred_rfclassifier = model_rfclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_rfclassifier, y_test))
print(classification_report(y_pred_rfclassifier, y_test))

 

Salida


Best Parameters: {'n_estimators': 100, 'min_samples_split': 6, 'min_samples_leaf': 4, 'max_features': 'log2', 'max_depth': 5, 'bootstrap': True}
Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59

 

En este algoritmo, realizamos algunos ajustes de hiperparámetros para lograr la mejor precisión. Definimos una cuadrícula de parámetros que consta de múltiples valores para elegir para cada parámetro. Además, utilizamos el algoritmo CV de búsqueda aleatoria para buscar el mejor espacio de parámetros para el modelo. Finalmente alimentamos el clasificador con los parámetros obtenidos y entrenamos el modelo. 

fexibles Exactitud Observaciones
Regresión logística 98.30% Logra una gran precisión. El modelo es capaz de generalizar bien en el conjunto de datos de prueba.
K-Vecinos más cercanos 77.96% El algoritmo no es capaz de aprender bien la representación de datos.
Bayes ingenuos 100% El modelo es menos complejo, por lo que sobreajusta los datos para obtener una precisión absoluta.
Clasificador de árbol de decisión 96.61% Logra una precisión decente.
Clasificador de bosque aleatorio 98.30% Al ser un enfoque basado en conjuntos, funciona mejor que Decision Tree. Realizar el ajuste de hiperparámetros hace que alcance una precisión similar a la regresión logística.

In this tutorial, we learned how to get started to build and train machine learning models in scikit-learn. We implemented and evaluated a few algorithms to get a basic idea about their performance. One can always adopt advanced strategies for feature engineering, hyperparameter tuning or training to improve performance. To read more about the functionalities that scikit-learn offers, head over to the official documentation - Introducción al aprendizaje automático con scikit-learn, Aprendizaje automático en Python con scikit-learn.

 
 
yesha shastri es un apasionado desarrollador y escritor de inteligencia artificial que está cursando una maestría en aprendizaje automático de la Université de Montréal. Yesha está intrigada por explorar técnicas de IA responsables para resolver desafíos que beneficien a la sociedad y compartir sus aprendizajes con la comunidad.
 

Sello de tiempo:

Mas de nuggets