Ξεκινώντας με το Scikit-learn for Classification in Machine Learning

Ξεκινώντας με το Scikit-learn for Classification in Machine Learning

Κόμβος πηγής: 1780638
Ξεκινώντας με το Scikit-learn for Classification in Machine Learning
Εικόνα από Editor
 

Η Scikit-learn είναι μια από τις πιο συχνά χρησιμοποιούμενες βιβλιοθήκες μηχανικής μάθησης που είναι κατασκευασμένες σε python. Η δημοτικότητά του μπορεί να αποδοθεί στην εύκολη και συνεπή δομή κώδικα που είναι φιλική για αρχάριους προγραμματιστές. Επίσης, υπάρχει διαθέσιμο υψηλό επίπεδο υποστήριξης μαζί με ευελιξία για την ενσωμάτωση λειτουργιών τρίτων, γεγονός που καθιστά τη βιβλιοθήκη ισχυρή και κατάλληλη για παραγωγή. Η βιβλιοθήκη περιέχει πολλαπλά μοντέλα μηχανικής μάθησης για ταξινόμηση, παλινδρόμηση και ομαδοποίηση. Σε αυτό το σεμινάριο, θα διερευνήσουμε το πρόβλημα της ταξινόμησης πολλαπλών κλάσεων μέσω διαφόρων αλγορίθμων. Ας βουτήξουμε κατευθείαν σε αυτό και ας δημιουργήσουμε τα μοντέλα μας που μαθαίνουν scikit.

pip install scikit-learn

Θα χρησιμοποιήσουμε το σύνολο δεδομένων "Wine" που είναι διαθέσιμο στη μονάδα συνόλων δεδομένων του scikit-learn. Αυτό το σύνολο δεδομένων αποτελείται από 178 δείγματα και 3 κατηγορίες συνολικά. Το σύνολο δεδομένων είναι ήδη προεπεξεργασμένο και έχει μετατραπεί σε διανύσματα χαρακτηριστικών, επομένως, μπορούμε να το χρησιμοποιήσουμε απευθείας για να εκπαιδεύσουμε τα μοντέλα μας.

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

Θα κρατήσουμε το 67% των δεδομένων για την εκπαίδευση και το υπόλοιπο 33% για τις δοκιμές.

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
)

 

Τώρα, θα πειραματιστούμε με 5 διαφορετικά μοντέλα διαφορετικής πολυπλοκότητας και θα αξιολογήσουμε τα αποτελέσματά τους στο σύνολο δεδομένων μας.

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

 

Παραγωγή

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

 

Παραγωγή 

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

 

Με την αλλαγή της παραμέτρου 'n_neighbors=2' παρατηρούμε μείωση της τιμής της ακρίβειας. Ως εκ τούτου, δείχνει ότι τα δεδομένα είναι αρκετά απλά και επιτυγχάνουν καλύτερη μάθηση με έναν μόνο γείτονα που πρέπει να ληφθεί υπόψη. 

Παραγωγή 

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

 

Παραγωγή

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

 

Παραγωγή

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

 

Παραγωγή


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

 

Σε αυτόν τον αλγόριθμο, πραγματοποιήσαμε κάποιο συντονισμό υπερπαραμέτρων για να επιτύχουμε την καλύτερη ακρίβεια. Ορίσαμε ένα πλέγμα παραμέτρων που αποτελείται από πολλαπλές τιμές για να διαλέξετε για κάθε παράμετρο. Επιπλέον, χρησιμοποιήσαμε τον αλγόριθμο Randomized Search CV για να αναζητήσουμε τον καλύτερο χώρο παραμέτρων για το μοντέλο. Τέλος τροφοδοτούμε τις παραμέτρους που λαμβάνονται στον ταξινομητή και εκπαιδεύουμε το μοντέλο. 

Μοντέλα Ακρίβεια Παρατηρήσεις
Λογιστική παλινδρόμηση 98.30% Επιτυγχάνει μεγάλη ακρίβεια. Το μοντέλο μπορεί να γενικεύει καλά το σύνολο δεδομένων δοκιμής.
K-Κοντινότεροι γείτονες 77.96% Ο αλγόριθμος δεν είναι σε θέση να μάθει καλά την αναπαράσταση δεδομένων.
Ναϊβ Μπέις 100% Το μοντέλο είναι λιγότερο περίπλοκο, επομένως υπερπροσαρμόζει τα δεδομένα για να αποκτήσει απόλυτη ακρίβεια.
Ταξινόμηση δέντρων απόφασης 96.61% Επιτυγχάνει αξιοπρεπή ακρίβεια.
Ταξινόμηση τυχαίων δασών 98.30% Όντας μια προσέγγιση που βασίζεται σε σύνολο, αποδίδει καλύτερα από το Decision Tree. Η εκτέλεση συντονισμού υπερπαραμέτρων το κάνει να επιτυγχάνει παρόμοια ακρίβεια με την λογιστική παλινδρόμηση.

Σε αυτό το σεμινάριο, μάθαμε πώς να ξεκινήσουμε να χτίζουμε και να εκπαιδεύουμε μοντέλα μηχανικής μάθησης στο scikit-learn. Υλοποιήσαμε και αξιολογήσαμε μερικούς αλγόριθμους για να έχουμε μια βασική ιδέα για την απόδοσή τους. Κάποιος μπορεί πάντα να υιοθετήσει προηγμένες στρατηγικές για μηχανική χαρακτηριστικών, συντονισμό υπερπαραμέτρων ή εκπαίδευση για τη βελτίωση της απόδοσης. Για να διαβάσετε περισσότερα σχετικά με τις λειτουργίες που προσφέρει το scikit-learn, μεταβείτε στην επίσημη τεκμηρίωση - Εισαγωγή στη μηχανική μάθηση με το scikit-learn, Μηχανική μάθηση σε Python με scikit-learn.

 
 
Yesha Shastri είναι ένας παθιασμένος προγραμματιστής και συγγραφέας τεχνητής νοημοσύνης που ακολουθεί μεταπτυχιακό στη Μηχανική Μάθηση από το Πανεπιστήμιο του Μόντρεαλ. Η Yesha ενδιαφέρεται να εξερευνήσει υπεύθυνες τεχνικές τεχνητής νοημοσύνης για την επίλυση προκλήσεων που ωφελούν την κοινωνία και να μοιραστεί τις γνώσεις της με την κοινότητα.
 

Σφραγίδα ώρας:

Περισσότερα από KDnuggets