Ocena wielu modeli

Nadzorowane uczenie maszynowe z scikit-learn

George Boorman

Core Curriculum Manager, DataCamp

Różne modele do różnych problemów

Podstawowe wskazówki

  • Rozmiar zbioru danych
    • Mniej cech = prostszy model, krótszy czas trenowania
    • Niektóre modele wymagają dużych ilości danych
  • Interpretowalność
    • Niektóre modele są łatwiejsze do wyjaśnienia – ważne dla interesariuszy
    • Regresja liniowa jest wysoce interpretowalna dzięki współczynnikom
  • Elastyczność
    • Może poprawiać dokładność, czyniąc mniej założeń o danych
    • KNN jest bardziej elastyczny i nie zakłada zależności liniowych
Nadzorowane uczenie maszynowe z scikit-learn

Wszystko tkwi w metrykach

  • Metryki dla regresji:

    • RMSE
    • R-kwadrat
  • Metryki dla klasyfikacji:

    • Dokładność
    • Macierz pomyłek
    • Precyzja, czułość, F1
    • ROC AUC
  • Trenuj kilka modeli i porównuj ich wydajność

Nadzorowane uczenie maszynowe z scikit-learn

Uwaga o skalowaniu

  • Modele wrażliwe na skalowanie:
    • KNN
    • Regresja liniowa (w tym Ridge, Lasso)
    • Regresja logistyczna
    • Sztuczna sieć neuronowa

 

  • Zaleca się skalowanie danych przed oceną modeli
Nadzorowane uczenie maszynowe z scikit-learn

Ocena modeli klasyfikacji

import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_val_score, KFold, train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

X = music.drop("genre", axis=1).values y = music["genre"].values X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
Nadzorowane uczenie maszynowe z scikit-learn

Ocena modeli klasyfikacji

models = {"Logistic Regression": LogisticRegression(), "KNN": KNeighborsClassifier(), 
         "Decision Tree": DecisionTreeClassifier()}
results = []

for model in models.values():
kf = KFold(n_splits=6, random_state=42, shuffle=True)
cv_results = cross_val_score(model, X_train_scaled, y_train, cv=kf)
results.append(cv_results)
plt.boxplot(results, labels=models.keys()) plt.show()
Nadzorowane uczenie maszynowe z scikit-learn

Wizualizacja wyników

Wykres pudełkowy dokładności dla każdego modelu: Regresja logistyczna, KNN i Drzewo decyzyjne

Nadzorowane uczenie maszynowe z scikit-learn

Wydajność na zbiorze testowym

for name, model in models.items():

model.fit(X_train_scaled, y_train)
test_score = model.score(X_test_scaled, y_test)
print("{} Test Set Accuracy: {}".format(name, test_score))
Logistic Regression Test Set Accuracy: 0.844
KNN Test Set Accuracy: 0.82
Decision Tree Test Set Accuracy: 0.832
Nadzorowane uczenie maszynowe z scikit-learn

Czas na ćwiczenia!

Nadzorowane uczenie maszynowe z scikit-learn

Preparing Video For Download...