תחילת העבודה עם Scikit-learn לסיווג בלמידת מכונה

תחילת העבודה עם Scikit-learn לסיווג בלמידת מכונה

צומת המקור: 1780638
תחילת העבודה עם Scikit-learn לסיווג בלמידת מכונה
תמונה מאת עורך
 

Scikit-learn היא אחת מספריות לימוד המכונה הנפוצות ביותר שנבנו בפיתון. ניתן לייחס את הפופולריות שלו למבנה הקוד הקל והעקבי שלו, הידידותי למפתחים מתחילים. כמו כן, קיימת רמה גבוהה של תמיכה זמינה יחד עם גמישות לשילוב פונקציונליות של צד שלישי, מה שהופך את הספרייה לחזקה ומתאימה לייצור. הספרייה מכילה מספר מודלים של למידת מכונה לסיווג, רגרסיה ואשכולות. במדריך זה, נחקור את הבעיה של סיווג רב-מחלקות באמצעות אלגוריתמים שונים. בוא נצלול ישר לתוכו ונבנה את המודלים שלנו ל-skit-learn.

pip install scikit-learn

אנו נשתמש במערך הנתונים "יין" הזמין במודול מערכי הנתונים של 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

 

באלגוריתם זה, ביצענו כוונון היפרפרמטרים כדי להשיג את הדיוק הטוב ביותר. הגדרנו רשת פרמטרים המורכבת ממספר ערכים לבחירה עבור כל פרמטר. יתר על כן, השתמשנו באלגוריתם קורות חיים של חיפוש אקראי כדי לחפש את מרחב הפרמטרים הטוב ביותר עבור המודל. לבסוף אנו מאכילים את הפרמטרים שהתקבלו למסווג ומכשירים את המודל. 

מודלים דיוק תצפיות
רגרסיה לוגיסטית 98.30% משיג דיוק רב. המודל מסוגל להכליל היטב על מערך הנתונים של הבדיקה.
השכנים הקרובים ביותר 77.96% האלגוריתם אינו מסוגל ללמוד היטב את ייצוג הנתונים.
נאיביות 100% המודל פחות מורכב ולכן הוא מתאים יותר לנתונים כדי להשיג דיוק מוחלט.
מסווג עץ ההחלטות 96.61% משיג דיוק הגון.
מסווג יער אקראי 98.30% בהיותה גישה מבוססת אנסמבל, היא מניבה ביצועים טובים יותר מאשר Decision Tree. ביצוע כוונון היפרפרמטר גורם לו להשיג דיוק דומה לרגרסיה לוגיסטית.

במדריך זה, למדנו כיצד להתחיל לבנות ולהכשיר מודלים של למידת מכונה ב-scikit-learn. יישמנו והערכנו כמה אלגוריתמים כדי לקבל מושג בסיסי על הביצועים שלהם. תמיד אפשר לאמץ אסטרטגיות מתקדמות להנדסת תכונות, כוונון היפרפרמטרים או אימון לשיפור הביצועים. כדי לקרוא עוד על הפונקציונליות ש-skit-learn מציעה, עברו לתיעוד הרשמי - מבוא ללמידת מכונה עם sikit-learn, למידת מכונה ב-Python עם scikit-learn.

 
 
ישא שסטרי הוא מפתח וכותב נלהב בינה מלאכותית העוסקת בתואר שני בלמידת מכונה מאוניברסיטת מונטריאול. ישה מסתקרנת לחקור טכניקות בינה מלאכותית אחראית כדי לפתור אתגרים המועילים לחברה ולחלוק את הלמידה שלה עם הקהילה.
 

בול זמן:

עוד מ KDnuggets