Guida introduttiva a Scikit-learn per la classificazione nell'apprendimento automatico

Guida introduttiva a Scikit-learn per la classificazione nell'apprendimento automatico

Nodo di origine: 1780638
Guida introduttiva a Scikit-learn per la classificazione nell'apprendimento automatico
Immagine dell'editore
 

Scikit-learn è una delle librerie di apprendimento automatico più comunemente utilizzate costruite in Python. La sua popolarità può essere attribuita alla sua struttura di codice semplice e coerente, adatta agli sviluppatori principianti. Inoltre, è disponibile un elevato livello di supporto insieme alla flessibilità di integrare funzionalità di terze parti che rendono la libreria robusta e adatta alla produzione. La libreria contiene più modelli di machine learning per la classificazione, la regressione e il clustering. In questo tutorial, esploreremo il problema della classificazione multiclasse attraverso vari algoritmi. Immergiamoci dentro e costruiamo i nostri modelli scikit-learn.

pip install scikit-learn

Useremo il set di dati "Wine" disponibile nel modulo dei set di dati di scikit-learn. Questo set di dati è composto da 178 campioni e 3 classi in totale. Il set di dati è già pre-elaborato e convertito in vettori di caratteristiche, quindi possiamo utilizzarlo direttamente per addestrare i nostri modelli.

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

Conserveremo il 67% dei dati per la formazione e il restante 33% per i test.

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
)

 

Ora sperimenteremo 5 diversi modelli di diversa complessità e valuteremo i loro risultati sul nostro set di dati.

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))

 

Uscita

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))

 

Uscita 

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

 

Modificando il parametro 'n_neighbors=2' si osserva una diminuzione del valore di accuratezza. Quindi, mostra che i dati sono abbastanza semplici e ottengono un migliore apprendimento con un singolo vicino da considerare. 

Uscita 

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))

 

Uscita

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))

 

Uscita

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))

 

Uscita


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

 

In questo algoritmo, abbiamo eseguito alcune regolazioni degli iperparametri per ottenere la massima precisione. Abbiamo definito una griglia di parametri composta da più valori tra cui scegliere per ciascun parametro. Inoltre, abbiamo utilizzato l'algoritmo CV di ricerca randomizzata per cercare il miglior spazio dei parametri per il modello. Infine diamo in pasto i parametri ottenuti al classificatore e addestriamo il modello. 

Modelli Precisione Osservazioni
Regressione logistica 98.30% Raggiunge una grande precisione. Il modello è in grado di generalizzare bene sul set di dati di test.
K-vicini più vicini 77.96% L'algoritmo non è in grado di apprendere bene la rappresentazione dei dati.
Ingenuo Bayes 100% Il modello è meno complesso quindi sovradimensiona i dati per ottenere una precisione assoluta.
Classificatore albero decisionale 96.61% Raggiunge una precisione decente.
Classificatore forestale casuale 98.30% Essendo un approccio basato sull'insieme, offre prestazioni migliori rispetto all'albero decisionale. L'esecuzione dell'ottimizzazione degli iperparametri consente di ottenere una precisione simile alla regressione logistica.

In questo tutorial, abbiamo imparato come iniziare a creare e addestrare modelli di machine learning in scikit-learn. Abbiamo implementato e valutato alcuni algoritmi per avere un'idea di base delle loro prestazioni. È sempre possibile adottare strategie avanzate per l'ingegneria delle funzionalità, l'ottimizzazione degli iperparametri o la formazione per migliorare le prestazioni. Per saperne di più sulle funzionalità offerte da scikit-learn, vai alla documentazione ufficiale - Introduzione all'apprendimento automatico con scikit-learn, Apprendimento automatico in Python con scikit-learn.

 
 
Yesha Shastri è un appassionato sviluppatore e scrittore di intelligenza artificiale che persegue un Master in Machine Learning presso l'Université de Montréal. Yesha è curiosa di esplorare tecniche di intelligenza artificiale responsabili per risolvere sfide a beneficio della società e condividere i suoi apprendimenti con la comunità.
 

Timestamp:

Di più da KDnuggets