סיכום: תיקון סקייטבורד
חלק מהיחידה למידה מונחית במסלול ה-Machine Learning של Coddy. שיעור 40 מתוך 58.
אתגר
בינוניפארק סקייטבורד רוצה שמודל בעמדת ההשכרה יזהה לוחות שהוחזרו וזקוקים לתיקון. התוכנית קוראת את ערך k הגדול ביותר לבדיקה.
- הפרידו 25% מהשורות לשורות בדיקה (
random_state=0). - עבור כל k ב־
ks, בצעו אימות צולב של k-NN על שורות האימון (cv=5). ציירו את הממוצעים כעמודות והדפיסו את ערך k הטוב ביותר. - בצעו חיפוש רשת לעץ על פני
depthsעבורmax_depth(cv=5,random_state=0) והדפיסו את הטוב ביותר. - הממוצע הגבוה יותר מנצח: הדפיסו
Winner: k-NNאוWinner: treeעם דיוק הבדיקה שלו.
עבור פארק אחר ו־13:
Best k: 13 (mean 0.785)
Best depth: 5 (mean 0.763)
Winner: k-NN, test accuracy 0.822לאחר מכן Coddy מתארת את התרשים שלך. התרשים שלהם נראה כך:
נסו בעצמכם
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
# ערך ה-k הגדול ביותר שיש לנסות, למשל 15
max_k = int(input())
# שורה אחת לכל סקייטבורד שהוחזר: מספר ההשכרות מאז הטיפול האחרון שלו, ציוני שחיקה מ-0 עד 10
# וסדקים במשטח העמידה; 1 ב-repair פירושו שהוא נשלח לסדנה
boards = pd.read_csv("skateboards.csv")
features = ["rentals", "wheel_wear", "bearing_noise", "grip_wear", "truck_wobble", "deck_cracks"]
X = boards[features]
y = boards["repair"]
# כל מאפיין הוא ספירה או ציון בקנה מידה קטן, לכן k-NN לא דורש כאן שינוי קנה מידה
ks = list(range(1, max_k + 1, 2))
depths = [2, 3, 4, 5, 6, 7, 8]
fig, ax = plt.subplots()
ax.set_title("Skateboard Repairs: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Mean CV accuracy")
ax.set_xticks(ks)
ax.set_ylim(0.6, 0.9) # מתחיל ב-0.6 כדי שהבדלים קטנים ייראו
# כתבו את הקוד שלכם למטה
כל השיעורים ביחידה למידה מונחית
תרגלו בעצמכם: קומפיילר Python אונליין