PCA לפני מודל
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 32 מתוך 51.
פחות תכונות הופכות מודל למהיר יותר ומפחיתות את הרעש שהוא צריך להתמודד איתו. אפשר לשלב את PCA בצינור עיבוד, ממש לפני המודל:
for n in [2, 5, 10, 20, 40, 64]:
model = make_pipeline(PCA(n_components=n), KNeighborsClassifier())
print(n, f"{cross_val_score(model, X, y, cv=5).mean():.3f}")עבור הספרות:
הדיוק מתייצב סביב 20: 44 הכיוונים האחרים כמעט לא מוסיפים דבר. כל קיפול מתאים את PCA לשורות האימון שלו, כך ששום דבר לא דולף.
יחידות מעורבות? שים/י קודם את StandardScaler(), כמו תמיד.
אתגר
בינונימעבדה לשמן זית מדרגת שמנים לפי האור שהם סופגים ב-36 אורכי גל, בתוספת 4 בדיקות מעבדה. מהו מספר התכונות הקטן ביותר שיספיק? התוכנית קוראת ערך slack.
- עבור כל
nב-sizes, בצעו אימות צולב (5 קיפולים) של צינור עיבוד: מתאם קנה מידה, PCA עםnרכיבים,LogisticRegression(max_iter=1000). הדפיסו כל ציון. - הדפיסו את מספר הרכיבים הקטן ביותר שהציון שלהם נמצא בטווח slack מהציון הטוב ביותר.
עבור מעבדה אחרת ו-0.05:
2 components: 0.817
3 components: 0.833
4 components: 0.889
5 components: 0.928
10 components: 0.928
20 components: 0.917
40 components: 0.922
Fewest within 0.05 of the best: 4 componentsנסו בעצמכם
import pandas as pd
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
# 180 דגימות שמן זית: אור שנבלע ב-36 אורכי גל, 4 בדיקות מעבדה והדירוג
oils = pd.read_csv("oils.csv")
X = oils.drop(columns=["oil", "grade"])
y = oils["grade"]
sizes = [2, 3, 4, 5, 10, 20, 40]
slack = float(input())
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין