Scikit-learn היא ספריית Python בקוד פתוח המפשטת את תהליך בניית מודלים של למידת מכונה. הוא מציע ממשק נקי ועקבי המסייע למשתמשים מתחילים ומנוסים לעבוד ביעילות.
- תומך במשימות כמו אשכול רגרסיית סיווג ועיבוד מקדים
- הופך את בניית הדגמים למהירה ואמינה
- מספק כלים מוכנים לשימוש להדרכה והערכה
- מפחית את המורכבות על ידי הימנעות מיישום ידני של אלגוריתמים
התקנה ושימוש ב-Skikit-learn
לפני שנתחיל לבנות דגמים עלינו להתקין סקיט-למד. זה דורש Python 3.8 ומעלה ותלוי בשתי ספריות חשובות: NumPy ו SciPy. ודא כי אלה מותקנים תחילה.
כדי להתקין את Scikit-learn הפעל את הפקודה הבאה:
מיון ג'אווה של מערך
התקנת pip -U scikit-learn
פעולה זו תוריד ותתקין את הגרסה העדכנית ביותר של Scikit-learn יחד עם התלות שלה. בואו לראות שלבים שונים המעורבים בתהליך בניית המודל באמצעות ספריית Scikit-learn.
שלב 1: טעינת ערכת נתונים
מערך נתונים מורכב מ:
- תכונות (X): משתני קלט המתארים את הנתונים
- יעד (y): הערך שאנו רוצים לחזות
Scikit-learn מספקת מערכי נתונים מובנים כמו Iris Digits ו-Boston Housing. שימוש במערך הנתונים של Iris:
- load_iris() טוען את הנתונים
- X מאחסנת נתוני תכונות
- y מאחסן תוויות יעד
- feature_names ו-target_names נותנים שמות תיאוריים
אנו יכולים לבדוק את השורות הראשונות כדי להבין את המבנה. עבור מערכי נתונים מותאמים אישית Pandas משמש בדרך כלל לטעינת קבצים חיצוניים כגון CSVs.
Pythonfrom sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target feature_names = iris.feature_names target_names = iris.target_names print('Feature names:' feature_names) print('Target names:' target_names) print('nType of X is:' type(X)) print('nFirst 5 rows of X:n' X[:5])
תְפוּקָה:
טוען מערך נתוניםלפעמים אנחנו צריכים לעבוד על הנתונים המותאמים אישית שלנו ואז אנחנו טוענים מערך נתונים חיצוני. לשם כך נוכל להשתמש ב- ספריית פנדות לטעינה ותפעול קל של מערכי נתונים.
בשביל זה אתה יכול לעיין במאמר שלנו בנושא כיצד לייבא קובץ csv לפנדות ?
שלב 2: פיצול מערך הנתונים
כדי להעריך מודל בצורה הוגנת, אנו מחלקים נתונים ל:
- ערכת אימונים: משמשת לאימון הדגם
- מערך בדיקות: משמש להערכת עד כמה המודל מכליל
באמצעות train_test_split אנו מפצלים את מערך הנתונים של Iris כך ש-60% מיועדים לאימון ו-40% לבדיקות (test_size=0.4). random_state=1 מבטיח שחזור.
לאחר הפיצול נקבל:
- X_train y_train -> נתוני אימון
- X_test y_test -> בדיקת נתונים
בדיקת הצורות מבטיחה שהנתונים מפוצלים בצורה נכונה.
Pythonfrom sklearn.model_selection import train_test_split X_train X_test y_train y_test = train_test_split(X y test_size=0.4 random_state=1)
עכשיו בואו נבדוק את צורות של הנתונים המפוצלים כדי להבטיח שלשתי הקבוצות יש פרופורציות נכונות של נתונים, תוך הימנעות מטעויות פוטנציאליות בהערכת מודל או בהדרכה.
Pythonprint('X_train Shape:' X_train.shape) print('X_test Shape:' X_test.shape) print('Y_train Shape:' y_train.shape) print('Y_test Shape:' y_test.shape)
תְפוּקָה:
צורה של נתונים מפוצליםשלב 3: טיפול בנתונים קטגוריים
אלגוריתמים של למידת מכונה עובדים עם קלט מספרי ולכן יש להמיר נתונים קטגוריים (טקסט) למספרים. אם לא מקודדים כראוי, מודלים עלולים לפרש קטגוריות לא נכון. Scikit-learn מספק שיטות קידוד מרובות:
1. קידוד תווית : זה ממיר כל קטגוריה למספר שלם ייחודי. לדוגמה, בעמודה עם קטגוריות כמו 'חתול' 'כלב' ו'ציפור' זה ימיר אותן ל-0 1 ו-2 בהתאמה. שיטה זו פועלת היטב כאשר לקטגוריות יש סדר משמעותי כגון נמוך בינוני וגבוה.
- LabelEncoder(): הוא מאותחל ליצירת אובייקט מקודד שימיר ערכים קטגוריים לתוויות מספריות.
- fit_transform(): שיטה זו תחילה מתאימה את המקודד לנתונים הקטגוריים ולאחר מכן הופכת את הקטגוריות לתוויות מספריות מתאימות.
from sklearn.preprocessing import LabelEncoder categorical_feature = ['cat' 'dog' 'dog' 'cat' 'bird'] encoder = LabelEncoder() encoded_feature = encoder.fit_transform(categorical_feature) print('Encoded feature:' encoded_feature)
תְפוּקָה:
תכונה מקודדת: [1 2 2 1 0]
2. קידוד חם אחד : One-Hot Encoding יוצר עמודות בינאריות נפרדות עבור כל קטגוריה. זה שימושי כאשר לקטגוריות אין סדר טבעי. דוגמה: חתול כלב ציפור -> 3 עמודות חדשות (חתול/כלב/ציפור) עם 1 ו-0.
- יש לעצב מחדש את הקלט למערך דו מימדי
- OneHotEncoder(sparse_output=False) יוצר עמודות בינאריות
from sklearn.preprocessing import OneHotEncoder import numpy as np categorical_feature = ['cat' 'dog' 'dog' 'cat' 'bird'] categorical_feature = np.array(categorical_feature).reshape(-1 1) encoder = OneHotEncoder(sparse_output=False) encoded_feature = encoder.fit_transform(categorical_feature) print('OneHotEncoded feature:n' encoded_feature)
תְפוּקָה:
מלבד קידוד תווית ו-One-Hot Encoding יש עוד טכניקות כמו קידוד ממוצע .
שלב 4: אימון המודל
עכשיו כשהנתונים שלנו מוכנים הגיע הזמן להכשיר מודל למידת מכונה. ל-Scikit-learn יש אלגוריתמים רבים עם ממשק עקבי לחיזוי והערכה של אימון. כאן נשתמש רגרסיה לוגיסטית כדוגמה.
פֶּתֶק : לא ניכנס לפרטים של אופן פעולת האלגוריתם שכן אנו מעוניינים להבין את היישום שלו בלבד.
- log_reg = LogisticRegression(max_iter=200): יצירת אובייקט מסווג רגרסיה לוגיסטית.
- log_reg.fit(X_train y_train): משתמש בזה מודל הרגרסיה הלוגיסטית מתאים את הפרמטרים של המודל כך שיתאימו בצורה הטובה ביותר לנתונים.
from sklearn.linear_model import LogisticRegression log_reg = LogisticRegression(max_iter=200) log_reg.fit(X_train y_train)
אימון באמצעות רגרסיה לוגיסטית.שלב 5: בצע תחזיות
לאחר הכשרה אנו משתמשים במודל כדי לבצע חיזויים על נתוני הבדיקה X_test על ידי קריאה לשיטת החיזוי. זה מחזיר תוויות חזויות y_pred.
- log_reg.predict: הוא משתמש במודל רגרסיה לוגיסטית מאומן כדי לחזות תוויות עבור נתוני הבדיקה X_test.
y_pred = log_reg.predict(X_test)
שלב 6: הערכת דיוק המודל
בדוק עד כמה המודל שלנו מתפקד על ידי השוואת y_test ו-y_pred. כאן אנו משתמשים בשיטת accuracy_score של מודול המדדים.
להגיב בסגנון מוטבעPython
from sklearn import metrics print('Logistic Regression model accuracy:' metrics.accuracy_score(y_test y_pred))
תְפוּקָה:
דיוק מודל רגרסיה לוגיסטית: 0.9666666666666667
כעת אנו רוצים שהמודל שלנו יבצע תחזיות על נתוני מדגם חדשים. אז ניתן פשוט להעביר את קלט המדגם באותו אופן שבו אנו מעבירים כל מטריצת תכונה. כאן השתמשנו בו כדוגמה = [[3 5 4 2] [2 3 5 4]]
Pythonsample = [[3 5 4 2] [2 3 5 4]] preds = log_reg.predict(sample) pred_species = [iris.target_names[p] for p in preds] print('Predictions:' pred_species)
תְפוּקָה:
תחזיות: [np.str_('virginica') np.str_('virginica')]
תכונות של Scikit-lear
נעשה שימוש ב-Skit-learn מכיוון שהוא הופך את בניית מודלים של למידת מכונה לפשוטה ויעילה. הנה כמה סיבות חשובות:
- כלים מוכנים לשימוש : הוא מספק פונקציות מובנות עבור משימות נפוצות כמו מודלים של אימון עיבוד נתונים מראש וביצוע תחזיות. זה חוסך זמן על ידי הימנעות מהצורך בקוד אלגוריתמים מאפס.
- הערכת מודל קלה : בעזרת כלים כמו אימות צולב ומדדי ביצועים, זה עוזר למדוד עד כמה המודל שלנו עובד ולזהות אזורים לשיפור.
- תמיכה רחבה באלגוריתמים : הוא מציע אלגוריתמים פופולריים רבים של למידת מכונה, כולל רגרסיית סיווג ואשכולות, מה שנותן לנו גמישות לבחור את המודל המתאים לבעיה שלנו.
- אינטגרציה חלקה : נבנה על גבי ספריות Python חשובות כמו NumPy ו- SciPy כך שהיא מתאימה לזרימת העבודה הקיימת שלנו לניתוח הנתונים.
- ממשק פשוט ועקבי : אותו תחביר פשוט פועל על פני מודלים שונים עוזר להקל על הלמידה והמעבר בין אלגוריתמים.
- כוונון דגם קל : כלים כמו חיפוש רשת עוזרים לנו לכוונן את הגדרות הדגם שלנו כדי לשפר את הדיוק ללא טרחה נוספת.
יתרונות השימוש ב-Skikit-learn
- ידידותי למשתמש : הממשק העקבי והפשוט של Scikit-learn הופך אותו לנגיש למתחילים והטוב ביותר למומחים.
- חיסכון בזמן: כלים ואלגוריתמים מוכנים מראש מצמצמים את זמן הפיתוח, מה שמאפשר לנו להתמקד יותר בפתרון בעיות מאשר בקידוד פרטים.
- ביצועי דגם טובים יותר : כלי כוונון והערכה קלים לשימוש עוזרים בשיפור הדיוק והאמינות של המודל.
- גמיש וניתן להרחבה : תומך במגוון רחב של אלגוריתמים ומשתלב בצורה חלקה עם ספריות Python אחרות עוזר בהפיכתו למתאים לפרויקטים בכל גודל.
- תמיכה קהילתית חזקה : קהילה פעילה גדולה מבטיחה עדכונים שוטפים תיעוד נרחב ושפע של משאבים שיעזרו לנו כשנתקעים.