|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "fa81d226c71d5af7a2cade31c1c92b88",
|
|
|
"translation_date": "2025-09-05T18:50:40+00:00",
|
|
|
"source_file": "2-Regression/1-Tools/README.md",
|
|
|
"language_code": "he"
|
|
|
}
|
|
|
-->
|
|
|
# התחילו עם Python ו-Scikit-learn עבור מודלים של רגרסיה
|
|
|
|
|
|

|
|
|
|
|
|
> סקצ'נוט מאת [Tomomi Imura](https://www.twitter.com/girlie_mac)
|
|
|
|
|
|
## [שאלון לפני השיעור](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
> ### [השיעור הזה זמין גם ב-R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
|
|
|
|
|
|
## מבוא
|
|
|
|
|
|
בארבעת השיעורים הללו, תלמדו כיצד לבנות מודלים של רגרסיה. נדון במה הם משמשים בקרוב. אבל לפני שתתחילו, ודאו שיש לכם את הכלים הנכונים כדי להתחיל את התהליך!
|
|
|
|
|
|
בשיעור הזה תלמדו:
|
|
|
|
|
|
- להגדיר את המחשב שלכם למשימות למידת מכונה מקומיות.
|
|
|
- לעבוד עם מחברות Jupyter.
|
|
|
- להשתמש ב-Scikit-learn, כולל התקנה.
|
|
|
- לחקור רגרסיה ליניארית באמצעות תרגיל מעשי.
|
|
|
|
|
|
## התקנות והגדרות
|
|
|
|
|
|
[](https://youtu.be/-DfeD2k2Kj0 "ML למתחילים - הגדרת הכלים שלכם לבניית מודלים של למידת מכונה")
|
|
|
|
|
|
> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על הגדרת המחשב שלכם ללמידת מכונה.
|
|
|
|
|
|
1. **התקינו Python**. ודאו ש-[Python](https://www.python.org/downloads/) מותקן במחשב שלכם. תשתמשו ב-Python עבור משימות רבות במדעי הנתונים ולמידת מכונה. רוב מערכות המחשב כבר כוללות התקנה של Python. ישנם [חבילות קוד Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) שימושיות שיכולות להקל על ההגדרה עבור חלק מהמשתמשים.
|
|
|
|
|
|
עם זאת, שימושים מסוימים ב-Python דורשים גרסה אחת של התוכנה, בעוד אחרים דורשים גרסה שונה. לכן, כדאי לעבוד בתוך [סביבה וירטואלית](https://docs.python.org/3/library/venv.html).
|
|
|
|
|
|
2. **התקינו Visual Studio Code**. ודאו ש-Visual Studio Code מותקן במחשב שלכם. עקבו אחר ההוראות הללו ל-[התקנת Visual Studio Code](https://code.visualstudio.com/) עבור התקנה בסיסית. אתם הולכים להשתמש ב-Python בתוך Visual Studio Code בקורס הזה, אז אולי תרצו ללמוד כיצד [להגדיר את Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) לפיתוח ב-Python.
|
|
|
|
|
|
> תרגישו בנוח עם Python על ידי עבודה עם אוסף זה של [מודולי למידה](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
|
|
|
>
|
|
|
> [](https://youtu.be/yyQM70vi7V8 "הגדרת Python עם Visual Studio Code")
|
|
|
>
|
|
|
> 🎥 לחצו על התמונה למעלה לצפייה בסרטון: שימוש ב-Python בתוך VS Code.
|
|
|
|
|
|
3. **התקינו Scikit-learn**, על ידי מעקב אחר [ההוראות הללו](https://scikit-learn.org/stable/install.html). מכיוון שאתם צריכים לוודא שאתם משתמשים ב-Python 3, מומלץ להשתמש בסביבה וירטואלית. שימו לב, אם אתם מתקינים את הספרייה הזו על Mac עם M1, יש הוראות מיוחדות בעמוד המקושר למעלה.
|
|
|
|
|
|
4. **התקינו Jupyter Notebook**. תצטרכו [להתקין את חבילת Jupyter](https://pypi.org/project/jupyter/).
|
|
|
|
|
|
## סביבת העבודה שלכם ללמידת מכונה
|
|
|
|
|
|
אתם הולכים להשתמש ב-**מחברות** כדי לפתח את קוד ה-Python שלכם וליצור מודלים של למידת מכונה. סוג קובץ זה הוא כלי נפוץ עבור מדעני נתונים, וניתן לזהות אותו לפי הסיומת `.ipynb`.
|
|
|
|
|
|
מחברות הן סביבה אינטראקטיבית שמאפשרת למפתח גם לקודד וגם להוסיף הערות ולכתוב תיעוד סביב הקוד, מה שמאוד מועיל עבור פרויקטים ניסיוניים או מחקריים.
|
|
|
|
|
|
[](https://youtu.be/7E-jC8FLA2E "ML למתחילים - הגדרת מחברות Jupyter כדי להתחיל לבנות מודלים של רגרסיה")
|
|
|
|
|
|
> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על ביצוע התרגיל הזה.
|
|
|
|
|
|
### תרגיל - עבודה עם מחברת
|
|
|
|
|
|
בתיקייה הזו, תמצאו את הקובץ _notebook.ipynb_.
|
|
|
|
|
|
1. פתחו את _notebook.ipynb_ ב-Visual Studio Code.
|
|
|
|
|
|
שרת Jupyter יתחיל עם Python 3+. תמצאו אזורים במחברת שניתן `להריץ`, חלקי קוד. תוכלו להריץ בלוק קוד על ידי בחירת האייקון שנראה כמו כפתור הפעלה.
|
|
|
|
|
|
2. בחרו את האייקון `md` והוסיפו קצת Markdown, ואת הטקסט הבא **# ברוכים הבאים למחברת שלכם**.
|
|
|
|
|
|
לאחר מכן, הוסיפו קצת קוד Python.
|
|
|
|
|
|
3. הקלידו **print('hello notebook')** בבלוק הקוד.
|
|
|
4. בחרו את החץ כדי להריץ את הקוד.
|
|
|
|
|
|
אתם אמורים לראות את ההצהרה המודפסת:
|
|
|
|
|
|
```output
|
|
|
hello notebook
|
|
|
```
|
|
|
|
|
|

|
|
|
|
|
|
אתם יכולים לשלב את הקוד שלכם עם הערות כדי לתעד את המחברת בעצמכם.
|
|
|
|
|
|
✅ חשבו לרגע כמה שונה סביבת העבודה של מפתחי אתרים מזו של מדעני נתונים.
|
|
|
|
|
|
## התחלה עם Scikit-learn
|
|
|
|
|
|
עכשיו ש-Python מוגדר בסביבה המקומית שלכם, ואתם מרגישים בנוח עם מחברות Jupyter, בואו נרגיש בנוח גם עם Scikit-learn (יש להגות `sci` כמו `science`). Scikit-learn מספקת [API נרחב](https://scikit-learn.org/stable/modules/classes.html#api-ref) שיעזור לכם לבצע משימות למידת מכונה.
|
|
|
|
|
|
לפי [האתר שלהם](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn היא ספריית למידת מכונה בקוד פתוח שתומכת בלמידה מונחית ולמידה לא מונחית. היא גם מספקת כלים שונים להתאמת מודלים, עיבוד נתונים, בחירת מודלים והערכה, ועוד הרבה כלי עזר."
|
|
|
|
|
|
בקורס הזה, תשתמשו ב-Scikit-learn ובכלים נוספים כדי לבנות מודלים של למידת מכונה לביצוע מה שאנחנו מכנים 'למידת מכונה מסורתית'. נמנענו בכוונה מרשתות נוירונים ולמידה עמוקה, שכן הם מכוסים טוב יותר בתוכנית הלימודים שלנו 'AI למתחילים' שתצא בקרוב.
|
|
|
|
|
|
Scikit-learn הופכת את בניית המודלים והערכתם לשימוש לפשוטה. היא מתמקדת בעיקר בשימוש בנתונים מספריים וכוללת כמה מערכי נתונים מוכנים לשימוש ככלי למידה. היא גם כוללת מודלים מוכנים לסטודנטים לנסות. בואו נחקור את תהליך טעינת הנתונים המובנים מראש ושימוש באומדן מובנה למודל למידת מכונה הראשון עם Scikit-learn באמצעות נתונים בסיסיים.
|
|
|
|
|
|
## תרגיל - המחברת הראשונה שלכם עם Scikit-learn
|
|
|
|
|
|
> מדריך זה נוצר בהשראת [דוגמת הרגרסיה הליניארית](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) באתר של Scikit-learn.
|
|
|
|
|
|
[](https://youtu.be/2xkXL5EUpS0 "ML למתחילים - פרויקט הרגרסיה הליניארית הראשון שלכם ב-Python")
|
|
|
|
|
|
> 🎥 לחצו על התמונה למעלה לצפייה בסרטון קצר על ביצוע התרגיל הזה.
|
|
|
|
|
|
בקובץ _notebook.ipynb_ המשויך לשיעור הזה, נקו את כל התאים על ידי לחיצה על אייקון 'פח האשפה'.
|
|
|
|
|
|
בקטע הזה, תעבדו עם מערך נתונים קטן על סוכרת שמובנה ב-Scikit-learn לצורכי למידה. דמיינו שאתם רוצים לבדוק טיפול עבור חולי סוכרת. מודלים של למידת מכונה עשויים לעזור לכם לקבוע אילו חולים יגיבו טוב יותר לטיפול, בהתבסס על שילובים של משתנים. אפילו מודל רגרסיה בסיסי מאוד, כאשר הוא מוצג בצורה חזותית, עשוי להראות מידע על משתנים שיעזרו לכם לארגן את הניסויים הקליניים התיאורטיים שלכם.
|
|
|
|
|
|
✅ ישנם סוגים רבים של שיטות רגרסיה, והבחירה תלויה בשאלה שאתם מחפשים תשובה עליה. אם אתם רוצים לחזות את הגובה הסביר של אדם בגיל מסוים, תשתמשו ברגרסיה ליניארית, שכן אתם מחפשים **ערך מספרי**. אם אתם מעוניינים לגלות האם סוג מסוים של מטבח צריך להיחשב טבעוני או לא, אתם מחפשים **שיוך קטגוריה**, ולכן תשתמשו ברגרסיה לוגיסטית. תלמדו יותר על רגרסיה לוגיסטית בהמשך. חשבו קצת על שאלות שתוכלו לשאול את הנתונים, ואיזו משיטה זו תהיה המתאימה יותר.
|
|
|
|
|
|
בואו נתחיל במשימה הזו.
|
|
|
|
|
|
### ייבוא ספריות
|
|
|
|
|
|
למשימה הזו נייבא כמה ספריות:
|
|
|
|
|
|
- **matplotlib**. זהו [כלי גרפי](https://matplotlib.org/) שימושי, ונשתמש בו ליצירת גרף קו.
|
|
|
- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) היא ספרייה שימושית לטיפול בנתונים מספריים ב-Python.
|
|
|
- **sklearn**. זו הספרייה [Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
|
|
|
|
|
|
ייבאו כמה ספריות שיעזרו לכם במשימות.
|
|
|
|
|
|
1. הוסיפו ייבוא על ידי הקלדת הקוד הבא:
|
|
|
|
|
|
```python
|
|
|
import matplotlib.pyplot as plt
|
|
|
import numpy as np
|
|
|
from sklearn import datasets, linear_model, model_selection
|
|
|
```
|
|
|
|
|
|
למעלה אתם מייבאים `matplotlib`, `numpy`, ואתם מייבאים `datasets`, `linear_model` ו-`model_selection` מ-`sklearn`. `model_selection` משמש לפיצול נתונים לסטי אימון ובדיקה.
|
|
|
|
|
|
### מערך הנתונים של סוכרת
|
|
|
|
|
|
מערך הנתונים המובנה [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) כולל 442 דגימות נתונים על סוכרת, עם 10 משתנים תכונה, שחלקם כוללים:
|
|
|
|
|
|
- גיל: גיל בשנים
|
|
|
- BMI: מדד מסת גוף
|
|
|
- BP: לחץ דם ממוצע
|
|
|
- S1 TC: תאי T (סוג של תאי דם לבנים)
|
|
|
|
|
|
✅ מערך הנתונים הזה כולל את מושג 'מין' כמשתנה תכונה חשוב למחקר על סוכרת. מערכי נתונים רפואיים רבים כוללים סוג זה של סיווג בינארי. חשבו קצת על איך סיווגים כאלה עשויים להוציא חלקים מסוימים מהאוכלוסייה מטיפולים.
|
|
|
|
|
|
עכשיו, טענו את נתוני X ו-y.
|
|
|
|
|
|
> 🎓 זכרו, זו למידה מונחית, ואנחנו צריכים מטרה בשם 'y'.
|
|
|
|
|
|
בתא קוד חדש, טענו את מערך הנתונים של סוכרת על ידי קריאה ל-`load_diabetes()`. הקלט `return_X_y=True` מסמן ש-`X` יהיה מטריצת נתונים, ו-`y` יהיה יעד הרגרסיה.
|
|
|
|
|
|
1. הוסיפו כמה פקודות הדפסה כדי להציג את הצורה של מטריצת הנתונים והאלמנט הראשון שלה:
|
|
|
|
|
|
```python
|
|
|
X, y = datasets.load_diabetes(return_X_y=True)
|
|
|
print(X.shape)
|
|
|
print(X[0])
|
|
|
```
|
|
|
|
|
|
מה שאתם מקבלים בתגובה הוא טופל. מה שאתם עושים הוא להקצות את שני הערכים הראשונים של הטופל ל-`X` ו-`y` בהתאמה. למדו יותר [על טופלים](https://wikipedia.org/wiki/Tuple).
|
|
|
|
|
|
אתם יכולים לראות שלנתונים האלה יש 442 פריטים בצורת מערכים של 10 אלמנטים:
|
|
|
|
|
|
```text
|
|
|
(442, 10)
|
|
|
[ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076
|
|
|
-0.04340085 -0.00259226 0.01990842 -0.01764613]
|
|
|
```
|
|
|
|
|
|
✅ חשבו קצת על הקשר בין הנתונים ליעד הרגרסיה. רגרסיה ליניארית חוזה קשרים בין תכונה X למשתנה יעד y. האם תוכלו למצוא את [היעד](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) עבור מערך הנתונים של סוכרת בתיעוד? מה מערך הנתונים הזה מדגים, בהתחשב ביעד?
|
|
|
|
|
|
2. לאחר מכן, בחרו חלק ממערך הנתונים הזה כדי לשרטט על ידי בחירת העמודה השלישית של מערך הנתונים. תוכלו לעשות זאת על ידי שימוש באופרטור `:` כדי לבחור את כל השורות, ואז לבחור את העמודה השלישית באמצעות האינדקס (2). תוכלו גם לשנות את צורת הנתונים להיות מערך דו-ממדי - כפי שנדרש לשרטוט - על ידי שימוש ב-`reshape(n_rows, n_columns)`. אם אחד הפרמטרים הוא -1, הממד המתאים מחושב אוטומטית.
|
|
|
|
|
|
```python
|
|
|
X = X[:, 2]
|
|
|
X = X.reshape((-1,1))
|
|
|
```
|
|
|
|
|
|
✅ בכל זמן, הדפיסו את הנתונים כדי לבדוק את צורתם.
|
|
|
|
|
|
3. עכשיו כשיש לכם נתונים מוכנים לשרטוט, תוכלו לראות אם מכונה יכולה לעזור לקבוע חלוקה הגיונית בין המספרים במערך הנתונים הזה. כדי לעשות זאת, עליכם לפצל גם את הנתונים (X) וגם את היעד (y) לסטי בדיקה ואימון. ל-Scikit-learn יש דרך פשוטה לעשות זאת; תוכלו לפצל את נתוני הבדיקה שלכם בנקודה נתונה.
|
|
|
|
|
|
```python
|
|
|
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
|
|
|
```
|
|
|
|
|
|
4. עכשיו אתם מוכנים לאמן את המודל שלכם! טענו את מודל הרגרסיה הליניארית ואמנו אותו עם סטי האימון של X ו-y באמצעות `model.fit()`:
|
|
|
|
|
|
```python
|
|
|
model = linear_model.LinearRegression()
|
|
|
model.fit(X_train, y_train)
|
|
|
```
|
|
|
|
|
|
✅ `model.fit()` היא פונקציה שתראו בהרבה ספריות למידת מכונה כמו TensorFlow.
|
|
|
|
|
|
5. לאחר מכן, צרו תחזית באמצעות נתוני הבדיקה, באמצעות הפונקציה `predict()`. זה ישמש לציור הקו בין קבוצות הנתונים של המודל.
|
|
|
|
|
|
```python
|
|
|
y_pred = model.predict(X_test)
|
|
|
```
|
|
|
|
|
|
6. עכשיו הגיע הזמן להציג את הנתונים בגרף. Matplotlib הוא כלי מאוד שימושי למשימה הזו. צרו גרף פיזור של כל נתוני הבדיקה של X ו-y, והשתמשו בתחזית כדי לצייר קו במקום המתאים ביותר, בין קבוצות הנתונים של המודל.
|
|
|
|
|
|
```python
|
|
|
plt.scatter(X_test, y_test, color='black')
|
|
|
plt.plot(X_test, y_pred, color='blue', linewidth=3)
|
|
|
plt.xlabel('Scaled BMIs')
|
|
|
plt.ylabel('Disease Progression')
|
|
|
plt.title('A Graph Plot Showing Diabetes Progression Against BMI')
|
|
|
plt.show()
|
|
|
```
|
|
|
|
|
|

|
|
|
✅ תחשבו קצת על מה שקורה כאן. קו ישר עובר דרך הרבה נקודות קטנות של נתונים, אבל מה הוא עושה בדיוק? האם אתם יכולים לראות איך אפשר להשתמש בקו הזה כדי לחזות איפה נקודת נתונים חדשה ולא מוכרת צריכה להתאים ביחס לציר ה-y של הגרף? נסו לנסח במילים את השימוש המעשי של המודל הזה.
|
|
|
|
|
|
מזל טוב, יצרתם את מודל הרגרסיה הליניארית הראשון שלכם, ביצעתם תחזית באמצעותו, והצגתם אותה בגרף!
|
|
|
|
|
|
---
|
|
|
## 🚀אתגר
|
|
|
|
|
|
צרו גרף עבור משתנה אחר מתוך מערך הנתונים הזה. רמז: ערכו את השורה הזו: `X = X[:,2]`. בהתחשב במטרת מערך הנתונים הזה, מה אתם יכולים לגלות על התקדמות מחלת הסוכרת?
|
|
|
|
|
|
## [שאלון לאחר ההרצאה](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## סקירה ולימוד עצמי
|
|
|
|
|
|
במדריך הזה עבדתם עם רגרסיה ליניארית פשוטה, ולא עם רגרסיה חד-משתנית או רגרסיה מרובת משתנים. קראו מעט על ההבדלים בין השיטות הללו, או צפו ב-[סרטון הזה](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef).
|
|
|
|
|
|
קראו עוד על מושג הרגרסיה וחשבו אילו סוגי שאלות ניתן לענות באמצעות הטכניקה הזו. קחו את [המדריך הזה](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) כדי להעמיק את ההבנה שלכם.
|
|
|
|
|
|
## משימה
|
|
|
|
|
|
[מערך נתונים אחר](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**כתב ויתור**:
|
|
|
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית [Co-op Translator](https://github.com/Azure/co-op-translator). בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה. |