Noțiuni introductive cu Scikit-learn pentru clasificare în Machine Learning

Noțiuni introductive cu Scikit-learn pentru clasificare în Machine Learning

Nodul sursă: 1780638
Noțiuni introductive cu Scikit-learn pentru clasificare în Machine Learning
Imagine de editor
 

Scikit-learn este una dintre cele mai frecvent utilizate biblioteci de învățare automată construite în python. Popularitatea sa poate fi atribuită structurii sale de cod ușoare și consistente, care este prietenoasă pentru dezvoltatorii începători. De asemenea, există un nivel ridicat de asistență disponibil, împreună cu flexibilitatea de a integra funcționalități terțe, ceea ce face biblioteca robustă și potrivită pentru producție. Biblioteca conține mai multe modele de învățare automată pentru clasificare, regresie și grupare. În acest tutorial, vom explora problema clasificării multiclase prin diverși algoritmi. Să ne aruncăm direct în ea și să construim modelele noastre scikit-learn.

pip install scikit-learn

Vom folosi setul de date „Wine” disponibil în modulul de seturi de date al scikit-learn. Acest set de date este format din 178 de eșantioane și 3 clase în total. Setul de date este deja preprocesat și convertit în vectori de caracteristici, prin urmare, îl putem folosi direct pentru a ne antrena modelele.

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

Vom păstra 67% din date pentru antrenament și restul 33% pentru testare.

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
)

 

Acum, vom experimenta cu 5 modele diferite de complexități diferite și vom evalua rezultatele lor pe setul nostru de date.

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

 

producție

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

 

producție 

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

 

La modificarea parametrului 'n_neighbors=2' observăm o scădere a valorii preciziei. Prin urmare, arată că datele sunt suficient de simple și realizează o învățare mai bună cu un singur vecin de luat în considerare. 

producție 

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

 

producție

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

 

producție

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

 

producție


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

 

În acest algoritm, am efectuat o reglare hiperparametrică pentru a obține cea mai bună acuratețe. Am definit o grilă de parametri formată din mai multe valori din care să alegeți pentru fiecare parametru. În plus, am folosit algoritmul de căutare aleatorie CV pentru a căuta cel mai bun spațiu de parametri pentru model. În cele din urmă, alimentăm parametrii obținuți către clasificator și antrenăm modelul. 

modele Acuratete Observatii
Regresie logistică 98.30% Obține o mare precizie. Modelul este capabil să se generalizeze bine pe setul de date de testare.
K-Cei mai apropiati vecini 77.96% Algoritmul nu este capabil să învețe bine reprezentarea datelor.
Bayes naiv 100% Modelul este mai puțin complex, prin urmare, supraajustează datele pentru a obține o acuratețe absolută.
Clasificator de arbore de decizie 96.61% Obține o precizie decentă.
Clasificator de pădure aleatoriu 98.30% Fiind o abordare bazată pe ansamblu, are performanțe mai bune decât Decision Tree. Efectuarea reglajului hiperparametrilor face ca acesta să atingă o precizie similară regresiei logistice.

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 - Introducere în învățarea automată cu scikit-learn, Învățare automată în Python cu scikit-learn.

 
 
Yesha Shastri este un dezvoltator și scriitor pasionat de inteligență artificială, care urmează un master în învățare automată de la Université de Montréal. Yesha este intrigata să exploreze tehnici responsabile de inteligență artificială pentru a rezolva provocările de care beneficiază societatea și pentru a împărtăși comunitatea cunoștințele sale.
 

Timestamp-ul:

Mai mult de la KDnuggets