מדריך קורס 7718Data Science · ML & DL
0 מתוך 0 שיעורים סומנו
G:\My Drive\Course · 25.03.2026 → 15.11.2026

כל חומר הקורס, מסודר כצינור אחד: מקוד, לנתונים, למודלים, לענן

האתר מסכם את כל מה שבתיקיית הקורס: 9 שיעורי Python, 8 שיעורי EDA, 17 שיעורי למידת מכונה וסדרות זמן, ומודול הענן וה-SQL. כל שיעור כולל הסבר מעמיק, מושגי מפתח, דוגמאות קוד שהורצו עם הפלט האמיתי, איורים, ושיעורי בית פתורים עם הסבר. סמנו שיעור כ"נלמד" כדי לעקוב אחרי ההתקדמות.

הסדר מימין לשמאל הוא סדר הלימוד. מסגרת כתומה מסמנת את המודול הנוכחי, מקווקו מסמן מודול שעוד לא נלמד.
ARCHITECTURE

ארכיטקטורת הפרויקט

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

מבנה התיקיות

Course/
├── 7718_022_schedule.xlsx      # לוח שיעורים, שיעורי בית, הקלטות
├── תוכנית-לימודים...pdf          # 58 מפגשים
├── 01_intro/
├── 02_python/
│   ├── 2026.04.12 … 2026.05.17/  # 9 שיעורים, *.py
│   ├── מצגות/DG_01 … DG_12.pdf
│   └── הנחיות_לפרוייקט_פייתון_2026.pdf
├── 03_EDA/
│   ├── 2026.05.20 … 2026.06.17/  # *.ipynb
│   └── data/  taxis, sessions, pupils, states
├── 04_ML/
│   ├── 2026.06.24 … 2026.09.16/  # 23 תיקיות
│   ├── data/  titanic, diamonds, churn, loan…
│   └── ml project 2026.pdf
├── 05_cloud/
│   ├── 2026.09.23/ Cloud_for_Data_Scientists.pdf
│   └── 2026.10.04/ Chinook_PostgreSql_NO_QUATES.sql
├── 06_NN/                      # ריק, בקרוב
└── Python/ IDE/ ML/             # עותקי עבודה כפולים

מוסכמות שמות הקבצים

*_022.py
הקוד שנכתב בשיעור החי (מחזור 22)
*_CLASS_022.ipynb
מחברת הכיתה, כולל פתרונות שנעשו בשיעור
*_TO_DOWNLOAD.ipynb
גרסת הסטודנט להורדה, בלי פתרונות
*_exercise / *_solution
15 תרגילים לכל שיעור Python, ופתרונות
*_LAB*_QUESTIONS / _SOLUTIONS
מעבדה ופתרונה
pulse_check_*
בוחן קצר "מה יודפס?" בסוף מודול
DG_01 … DG_12
מצגות התיאוריה של Python

סביבת העבודה

Python 3.12, Jupyter, PyCharm/VS Code, pandas 3 (Copy-on-Write), scikit-learn, statsmodels, seaborn, imbalanced-learn, xgboost, prophet, PostgreSQL.

צינור העבודה של פרויקט Data Science

כל מודול בקורס מלמד שלב אחד בצינור. זה גם המבנה של פרויקט ה-ML: שלב 1 מכסה את שני הצעדים הראשונים, שלב 2 את השאר.

הבנה עסקית

מה הבעיה, מה המטרה, האם זו רגרסיה או סיווג ומה משתנה המטרה.

פרויקט שלב 1
הבנת הנתונים (EDA)

describe, התפלגויות, מתאמים, 2–6 גרפים עם תובנות.

NumPy · Pandas · Seaborn
הכנת נתונים

חוסרים, חריגים, dummies, סקלה, איזון, פיצול train/test.

ML חלק 1
מידול

כמה שיותר מודלים: לינארי, לוגיסטי, עצים, SVM, KNN, XGBoost.

ML חלק 1–2
הערכה

מדד שמתאים לעסק: R², MAE, recall, F1, AUC, CV.

metrics · CV
פריסה

מסד נתונים, API ב-Flask, ממשק ב-Streamlit, ענן.

ענן ו-SQL
לא נמצאו שיעורים שמתאימים לחיפוש.
MODEL GUIDE

מדריך השוואת מודלים

הפרק מבוסס על סיכום של סטודנט אחר (ML_Models_Complete_Guide_HE.pdf), ערוך ומותאם לקורס. נושאים שכבר נלמדו מקושרים לשיעור המתאים. מה שהסיכום מוסיף מעבר לחומר הקורס מסומן חדש. כל קוד בפרק הורץ, והפלט אמיתי.

1. מפת-על: כל המודלים בטבלה אחת

מודלסוגרעיוןScalingגבולשליטה במורכבותבקורס
Linear RegressionRegressionקשר לינארי בין X ל-yמומלץלינארירגולריזציהML1 · 07.01
RidgeRegressionלינארי + עונש L2כןלינאריalphaML1 · 07.08
LassoRegressionלינארי + עונש L1כןלינאריalphaML1 · 07.08
Elastic NetRegressionלינארי + L1 + L2כןלינאריalpha, l1_ratioחדש
Logistic RegressionClassificationSigmoid → הסתברותכןלינאריC, penaltyML1 · 07.19
KNNשניהםשכנים קרוביםכן, מאודלא לינאריn_neighbors, weightsML2 · 08.12
Decision Treeשניהםפיצולים רקורסיבייםלאלא לינאריmax_depth, min_samples_leaf, ccp_alphaML1 · 07.26
Random ForestשניהםBagging של עצים + פיצ'רים אקראייםלאלא לינאריn_estimators, max_depth, max_featuresML1 · 07.29
Gradient Boostingשניהםעצים בסדרה, כל עץ מתקן את הקודםלאלא לינאריlearning_rate, n_estimators, max_depthחדש
XGBoostשניהםBoosting + רגולריזציהלאלא לינאריlearning_rate, max_depth, subsample, reg_*ML2 · 08.23
SVMשניהםשוליים מקסימלייםכן, מאודלינארי או לא (kernel)C, gamma, kernelML2 · 08.02
Naive BayesClassificationBayes + אי-תלותלרוב לאהסתברותיalphaML2 · 08.09
K-MeansClusteringמרחק למרכזיםכן, מאודללא מטרהn_clustersUnsup · 08.30
DBSCANClusteringצפיפותכןללא מטרהeps, min_samplesUnsup · 09.02
PCAהורדת ממדמקסימום שונותכןטרנספורמציה לינאריתn_componentsUnsup · 09.02

2. מה הסיכום מוסיף על חומר הקורס

Elastic Net חדש

שילוב של Ridge ו-Lasso. הפרמטר alpha קובע את עוצמת העונש, ו-l1_ratio את החלוקה בין L1 ל-L2 (1 = Lasso טהור, 0 = Ridge טהור). שימושי כשיש קבוצות של פיצ'רים מתואמים: Lasso בוחר אחד מהם באקראי, ו-Elastic Net שומר אותם יחד.

Loss = SSE + λ·[ α·Σ|βⱼ| + (1−α)·Σβⱼ² ]

בדוגמה על diamonds.csv (23 עמודות אחרי dummies), Lasso עם alpha=50 מאפס 9 מקדמים ומאבד מעט R². Ridge כמעט לא משנה את התוצאה. לכן Lasso הוא גם כלי לבחירת פיצ'רים.

In: Python
import pandas as pd
from sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

df = pd.read_csv("diamonds.csv")
X = pd.get_dummies(df.drop(columns="price"), drop_first=True).astype(float)
y = df["price"]
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=42)
for name, reg in [("Linear", LinearRegression()), ("Ridge a=10", Ridge(alpha=10)),
                  ("Lasso a=50", Lasso(alpha=50, max_iter=5000)),
                  ("ElasticNet a=0.1 r=0.5", ElasticNet(alpha=0.1, l1_ratio=0.5, max_iter=5000))]:
    m = make_pipeline(StandardScaler(), reg).fit(X_tr, y_tr)
    coefs = m[-1].coef_
    print(f"{name:<21} R2={m.score(X_te, y_te):.4f}  zero coefs={int((abs(coefs) < 1e-8).sum())}/{len(coefs)}")
Out:
Linear                R2=0.9202  zero coefs=0/23
Ridge a=10            R2=0.9202  zero coefs=0/23
Lasso a=50            R2=0.8998  zero coefs=9/23
ElasticNet a=0.1 r=0.5 R2=0.8939  zero coefs=0/23

Pipeline ו-Data Leakage חדש

דליפת מידע קורית כשמידע מסט הבדיקה (או מהעתיד) משפיע על האימון: התאמת scaler על כל הנתונים, השלמת חוסרים לפני הפיצול, או בחירת פיצ'רים על כל הדאטה. Pipeline מרכז את העיבוד המקדים והמודל לאובייקט אחד, כך שבכל קיפול של cross-validation העיבוד מותאם מחדש על קיפול האימון בלבד.

הדוגמה מראה כמה זה מסוכן: 5,000 פיצ'רים של רעש ותוויות אקראיות, כך שהדיוק האמיתי הוא כ-50%. בחירת פיצ'רים על כל הנתונים לפני ה-CV נותנת 85% "דיוק" מזויף. אותה בחירה בתוך Pipeline נותנת 48%, האמת.

In: Python
import numpy as np
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline

rng = np.random.default_rng(0)
X = rng.normal(size=(100, 5000))      # pure noise features
y = rng.integers(0, 2, size=100)      # random labels -> true accuracy is ~0.5

# WRONG: select the 20 "best" features on ALL data, then cross-validate
X_sel = SelectKBest(f_classif, k=20).fit_transform(X, y)
leaky = cross_val_score(LogisticRegression(max_iter=1000), X_sel, y, cv=5)
print("leaky CV accuracy :", leaky.mean().round(3))

# RIGHT: selection lives inside the pipeline, refit on each training fold only
pipe = make_pipeline(SelectKBest(f_classif, k=20), LogisticRegression(max_iter=1000))
clean = cross_val_score(pipe, X, y, cv=5)
print("pipeline CV accuracy:", clean.mean().round(3))
Out:
leaky CV accuracy : 0.85
pipeline CV accuracy: 0.48

אותם נתונים, תשעה מודלים חדש

השוואה הוגנת דורשת אותו פיצול, אותו מדד ואותו cross-validation לכל המודלים. כאן כל מודל שצריך סקלה עטוף ב-make_pipeline(StandardScaler(), …). שימו לב ל-SVM ו-KNN בלי סקלה: F1 יורד מ-0.982 ל-0.935 ומ-0.971 ל-0.949. לעצים זה לא משנה.

In: Python
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score, StratifiedKFold
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB

X, y = load_breast_cancer(return_X_y=True)
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
models = {
    "LogReg":   make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000)),
    "KNN":      make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=5)),
    "KNN (no scaling)": KNeighborsClassifier(n_neighbors=5),
    "SVM":      make_pipeline(StandardScaler(), SVC(kernel="rbf", C=1)),
    "SVM (no scaling)": SVC(kernel="rbf", C=1),
    "Tree":     DecisionTreeClassifier(max_depth=5, random_state=42),
    "RF":       RandomForestClassifier(n_estimators=300, random_state=42),
    "GradBoost": GradientBoostingClassifier(n_estimators=200, learning_rate=0.05,
                                            max_depth=3, random_state=42),
    "GaussianNB": GaussianNB(),
}
for name, model in models.items():
    s = cross_val_score(model, X, y, cv=cv, scoring="f1")
    print(f"{name:<17} F1 = {s.mean():.3f} ± {s.std():.3f}")
Out:
LogReg            F1 = 0.979 ± 0.013
KNN               F1 = 0.971 ± 0.014
KNN (no scaling)  F1 = 0.949 ± 0.015
SVM               F1 = 0.982 ± 0.013
SVM (no scaling)  F1 = 0.935 ± 0.017
Tree              F1 = 0.944 ± 0.016
RF                F1 = 0.962 ± 0.010
GradBoost         F1 = 0.961 ± 0.015
GaussianNB        F1 = 0.952 ± 0.018
השוואת F1 של תשעה מודלים
F1 ממוצע ב-5 קיפולים על נתוני סרטן השד. הכתום מסמן מודלים שרצו בלי סקלה. הקווים הם סטיית התקן בין הקיפולים: הפרשים קטנים ממנה הם רעש, לא יתרון אמיתי.

Specificity ומבנה מטריצת הבלבול חדש

Specificity (TNR) = TN / (TN + FP): מתוך השליליים האמיתיים, כמה זיהינו נכון. זה ה-recall של המחלקה השלילית, ומתקיים FPR = 1 − Specificity. בסינון רפואי מדווחים תמיד את שני המדדים: Sensitivity (recall) ו-Specificity.

שימו לב: בסיכום המקורי המטריצה מוצגת עם החיובי ראשון (TP FN / FP TN). ב-sklearn הסדר הפוך: [[TN, FP], [FN, TP]]. בודקים תמיד את הסדר לפני שקוראים מספרים.

In: Python
from sklearn.metrics import confusion_matrix, recall_score
y_true = [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
y_pred = [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
print("sklearn layout [[TN FP] [FN TP]]:\n", confusion_matrix(y_true, y_pred))
print("Recall / Sensitivity (TPR):", round(tp / (tp + fn), 3))
print("Specificity (TNR)         :", round(tn / (tn + fp), 3))
print("same via recall_score(pos_label=0):", round(recall_score(y_true, y_pred, pos_label=0), 3))
print("FPR = 1 - specificity     :", round(fp / (fp + tn), 3))
Out:
sklearn layout [[TN FP] [FN TP]]:
 [[8 4]
 [2 4]]
Recall / Sensitivity (TPR): 0.667
Specificity (TNR)         : 0.667
same via recall_score(pos_label=0): 0.667
FPR = 1 - specificity     : 0.333

גיזום עץ עם ccp_alpha חדש

בקורס גזמנו עצים מראש (max_depth, min_samples_leaf). Cost-complexity pruning מגדל עץ מלא ואז חותך ענפים שתרומתם קטנה ממחיר הסיבוכיות α לכל עלה. cost_complexity_pruning_path מחזיר את ערכי α המועמדים, ובוחרים ביניהם ב-CV.

בדוגמה, עץ מלא עם 16 עלים מגיע ל-100% אימון ו-0.918 בדיקה. עם ccp_alpha=0.005 נשארים 7 עלים והבדיקה עולה ל-0.930: פחות overfitting.

In: Python
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

X, y = load_breast_cancer(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)
path = DecisionTreeClassifier(random_state=42).cost_complexity_pruning_path(X_tr, y_tr)
for a in [0.0, 0.002, 0.005, 0.01, 0.02, 0.05]:
    t = DecisionTreeClassifier(ccp_alpha=a, random_state=42).fit(X_tr, y_tr)
    print(f"ccp_alpha={a:<6} leaves={t.get_n_leaves():>2}  train={t.score(X_tr, y_tr):.3f}  test={t.score(X_te, y_te):.3f}")
print("number of candidate alphas on the path:", len(path.ccp_alphas))
Out:
ccp_alpha=0.0    leaves=16  train=1.000  test=0.918
ccp_alpha=0.002  leaves=16  train=1.000  test=0.918
ccp_alpha=0.005  leaves= 7  train=0.985  test=0.930
ccp_alpha=0.01   leaves= 5  train=0.977  test=0.924
ccp_alpha=0.02   leaves= 3  train=0.957  test=0.918
ccp_alpha=0.05   leaves= 3  train=0.957  test=0.918
number of candidate alphas on the path: 11

נוסחאות ופקודות שלא הופיעו בקורס

  • Gradient Boosting: Fₘ(x) = Fₘ₋₁(x) + η·hₘ(x). כל עץ חדש hₘ מתאים לשאריות (הגרדיאנט) של המודל עד כה, ו-η הוא ה-learning rate. η קטן דורש יותר עצים, אבל לרוב מכליל טוב יותר. בקורס עבדנו עם AdaBoost ו-XGBoost; ב-sklearn יש גם GradientBoostingClassifier.
  • SVM: המישור המפריד wᵀx + b = 0 ורוחב השוליים 2 / ‖w‖. מקסום השוליים שקול למזעור ‖w‖.
  • KNN: weights="distance" נותן לשכן קרוב משקל גדול יותר מרחוק. KNeighborsRegressor מנבא ממוצע של השכנים.
  • Naive Bayes: GaussianNB מניח לכל פיצ'ר התפלגות נורמלית בכל מחלקה: P(x|c) = 1/√(2πσ²)·exp(−(x−μ)²/(2σ²)). MultinomialNB מתאים לספירות (מילים בטקסט).
  • Bias-Variance: Expected Error ≈ Bias² + Variance + Noise. את הרעש אי אפשר להקטין; את שני האחרים מאזנים דרך מורכבות המודל (טבלה בהמשך).
  • model.score() מחזיר accuracy במסווגים ו-R² ברגרסורים. ב-K-Means מומלץ n_init="auto" (ברירת המחדל בגרסאות החדשות).
Python
from sklearn.ensemble import GradientBoostingClassifier
model = GradientBoostingClassifier(n_estimators=200, learning_rate=0.05,
                                   max_depth=3, random_state=42)

from sklearn.neighbors import KNeighborsRegressor
knn_reg = KNeighborsRegressor(n_neighbors=5, weights="distance")

from sklearn.naive_bayes import MultinomialNB   # word counts / frequencies
nb_text = MultinomialNB(alpha=1.0)

3. מתי צריך Scaling

כמעט תמיד צריך

KNN · SVM · Logistic Regression · Ridge / Lasso / Elastic Net · K-Means · DBSCAN · PCA

כולם מבוססים על מרחק, על גודל המקדמים או על שונות. חשוב: fit רק על ה-train, ועל ה-test רק transform.

בדרך כלל לא צריך

Decision Tree · Random Forest · Gradient Boosting · XGBoost · Naive Bayes (לרוב)

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

4. מדדי רגרסיה ורגישות לחריגים

מדדמה מודדרגישות לחריגים
MAEטעות מוחלטת ממוצעת, ביחידות של yנמוכה יחסית
MSEטעות ריבועית ממוצעתגבוהה, כי הריבוע מגדיל טעויות גדולות
RMSEשורש MSE, חזרה ליחידות של yגבוהה
R²אחוז השונות המוסברת ביחס לממוצעלא מדד של גודל טעות

5. איך שולטים במורכבות של כל מודל

מודלמורכב יותר (variance↑)פשוט יותר (bias↑, רגולריזציה)
KNNK קטןK גדול
Decision Treemax_depth גדולmax_depth קטן, min_samples_leaf גדול, ccp_alpha גדול
Random Forestעצים עמוקים, עלים קטניםעצים רדודים, עלים גדולים
Gradient Boostingdepth↑, n_estimators↑depth↓, learning_rate מתון
SVMC↑, gamma↑C↓, gamma↓
Ridge / Lassoalpha↓alpha↑
Logistic RegressionC↑C↓

6. טבלת היפר-פרמטרים לראיון

מודלהיפר-פרמטרמשמעות
Logistic RegressionCC קטן = יותר רגולריזציה
Logistic Regressionpenaltyl1 / l2 / elasticnet, עם solver מתאים
KNNn_neighborsK קטן = variance גבוה
KNNweightsuniform או distance (שכן קרוב משפיע יותר)
Decision Treemax_depthעומק גבוה = overfitting
Decision Treemin_samples_leafגדול יותר = עץ חלק ופשוט
Decision Treeccp_alphaגיזום אחרי בנייה (cost-complexity)
Random Forestn_estimatorsיותר עצים = יציב יותר, אבל איטי
Random Forestmax_featuresכמה פיצ'רים נבחנים בכל פיצול
Gradient Boostinglearning_rateגודל צעד התיקון של כל עץ
Gradient Boostingn_estimatorsמספר העצים בסדרה
SVMCעונש על שגיאות; גבוה = פחות רגולריזציה
SVMgammaטווח ההשפעה של נקודה ב-RBF
CategoricalNBalphaהחלקה (smoothing)
K-Meansn_clustersמספר הקבוצות
DBSCANepsרדיוס השכנות
PCAn_componentsכמה רכיבים לשמור

7. ה-API האחיד של sklearn

Python
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
model.score(X_test, y_test)          # classifier -> accuracy, regressor -> R^2

y_prob = model.predict_proba(X_test)[:, 1]   # classifiers with probabilities
model.coef_, model.intercept_                # linear models
model.feature_importances_                   # tree ensembles

8. איך לבחור מודל בראיון

תשובה טובה ל"איזה מודל היית בוחר?" מתחילה מהבעיה ומהנתונים, לא משם של מודל.

  1. מה סוג הבעיה: רגרסיה, סיווג, דירוג, קיבוץ או הורדת ממד?
  2. מה גודל הנתונים, ומה היחס בין מספר השורות למספר הפיצ'רים?
  3. האם הפיצ'רים מספריים, קטגוריאליים, דלילים או רבי-ממדים?
  4. האם נדרשת פרשנות (interpretability) חזקה?
  5. האם יש חוסר איזון בין מחלקות, או עלות שונה ל-FP ול-FN?
  6. מה ה-baseline הפשוט ביותר שצריך לנצח?
  7. לבחור מדד שמתאים לבעיה העסקית לפני הכוונון.
  8. לבנות Pipeline, ולכוונן עם cross-validation על ה-train בלבד.
  9. להשוות כמה משפחות מודלים, לא רק מודל אחד.
  10. להעריך פעם אחת בסוף על סט בדיקה שלא שימש לבחירה.

מפת בחירה מהירה

מצבמודלים שכדאי להתחיל מהם
רגרסיה עם קשר פשוט וחשיבות לפרשנותLinear / Ridge / Lasso
סיווג בינארי ופרשנות חשובהLogistic Regression
קשר לא לינארי, נתונים בגודל בינוניRandom Forest / Gradient Boosting
נתונים טבלאיים ותחרות על ביצועיםGradient Boosting / XGBoost
טקסט דליל עם הרבה ממדיםLogistic Regression / Linear SVM / MultinomialNB
מעט נתונים וגבול מורכבSVM
דמיון מקומי משמעותיKNN
אין תוויות (labels)K-Means / DBSCAN
יותר מדי ממדיםPCA + מודל

9. עשרה משפטים לזכור

  • Linear Regression ממזערת שגיאות בריבוע ומנבאת ערך רציף.
  • Logistic Regression מעבירה ציון לינארי דרך sigmoid ומחזירה הסתברות למחלקה.
  • Ridge = L2, Lasso = L1, ורק Lasso יכולה לאפס מקדמים.
  • KNN ו-SVM רגישים מאוד לסקלה, ולכן Scaling חובה.
  • עץ החלטה בוחר פיצולים לפי ירידה ב-impurity (Gini או Entropy).
  • Random Forest = Bagging + תת-קבוצה אקראית של פיצ'רים, והמטרה היא להקטין variance.
  • Boosting בונה מודלים בסדרה, כשכל שלב מתקן את הקודמים.
  • Naive Bayes מבוסס על חוק בייס ומניח אי-תלות מותנית.
  • Overfitting נראה כציון אימון גבוה וציון בדיקה נמוך משמעותית.
  • בחירת מודל נעשית עם מדד מתאים, cross-validation, בלי דליפה, וסט בדיקה נקי לסוף.

סרטוני הסבר לנושאים החדשים

PROJECTS

שני פרויקטי הקורס

פרויקט Python – בנק וירטואלי הגשה 16.6

  • ממשק input(): פתיחת חשבון, בירור יתרה, הפקדה ומשיכה עם תיאור ומטבע.
  • הדפסת תנועות אחרונות ושמירת דף חשבון לקובץ, בלי ספריות ייעודיות.
  • סטטיסטיקות: ממוצע הפקדות ומשיכות.
  • כמה שיותר מגוון של Python ועקרונות OOP. סקריפט יחיד + קובץ טקסט לדוגמה.
  • מה לקחת מהקורס: מחלקת BankAccount, לולאת תפריט, חריגות מותאמות, match/case, f-strings מיושרים.

פרויקט ML שלב 1: 11.8 · שלב 2: 17.11

  • שלב 1: בעיה עסקית, מטרה (רגרסיה או סיווג), תיאור הנתונים, 2–6 גרפים עם תובנות. PDF + notebook + HTML + דגימה של 1,000 שורות.
  • שלב 2: הכנת נתונים (חוסרים, חריגים, dummies, איזון), כמה שיותר מודלים, הערכה, סיכום ממצאים.
  • מצגת רשות: 10 דקות, 5–15 שקפים, בשיעור האחרון.
  • מקורות: data.gov.il, הלמ"ס, Kaggle, UCI, Google Dataset Search.
PITFALLS

מלכודות נפוצות שעלו בחומר

הטעויות שחוזרות במעבדות ובמחברות הכיתה, וכיצד להימנע מהן.

תחוםהמלכודתמה עושים במקום