Pomiar wydajności modelu

Nadzorowane uczenie maszynowe z scikit-learn

George Boorman

Core Curriculum Manager, DataCamp

Pomiar wydajności modelu

  • W klasyfikacji powszechnie stosowaną metryką jest dokładność

  • Dokładność:

poprawne predykcje podzielone przez całkowitą liczbę obserwacji

Nadzorowane uczenie maszynowe z scikit-learn

Pomiar wydajności modelu

  • Jak mierzyć dokładność?

  • Można obliczyć dokładność na danych użytych do uczenia klasyfikatora

  • NIE odzwierciedla zdolności do generalizacji

Nadzorowane uczenie maszynowe z scikit-learn

Obliczanie dokładności

dane dzielone na zbiór treningowy i testowy

Nadzorowane uczenie maszynowe z scikit-learn

Obliczanie dokładności

dopasowywanie klasyfikatora na zbiorze treningowym

Nadzorowane uczenie maszynowe z scikit-learn

Obliczanie dokładności

obliczanie dokładności na zbiorze testowym

Nadzorowane uczenie maszynowe z scikit-learn

Podział na zbiór treningowy i testowy

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=21, stratify=y)
knn = KNeighborsClassifier(n_neighbors=6)
knn.fit(X_train, y_train)
print(knn.score(X_test, y_test))
0.8800599700149925
Nadzorowane uczenie maszynowe z scikit-learn

Złożoność modelu

  • Większe k = mniej złożony model = może powodować niedouczenie

  • Mniejsze k = bardziej złożony model = może prowadzić do przetrenowania

wykresy punktowe przedstawiające granicę decyzyjną KNN dla k=1, k=9 i k=18

Nadzorowane uczenie maszynowe z scikit-learn

Złożoność modelu i nad/niedouczenie

train_accuracies = {}
test_accuracies = {}
neighbors = np.arange(1, 26)

for neighbor in neighbors:
knn = KNeighborsClassifier(n_neighbors=neighbor)
knn.fit(X_train, y_train)
train_accuracies[neighbor] = knn.score(X_train, y_train) test_accuracies[neighbor] = knn.score(X_test, y_test)
Nadzorowane uczenie maszynowe z scikit-learn

Wizualizacja wyników

plt.figure(figsize=(8, 6))
plt.title("KNN: Varying Number of Neighbors")
plt.plot(neighbors, train_accuracies.values(), label="Training Accuracy")
plt.plot(neighbors, test_accuracies.values(), label="Testing Accuracy")
plt.legend()
plt.xlabel("Number of Neighbors")
plt.ylabel("Accuracy")
plt.show()
Nadzorowane uczenie maszynowe z scikit-learn

Krzywa złożoności modelu

wykres liniowy dokładności w zależności od liczby sąsiadów, gdzie dokładność na zbiorze treningowym i testowym maleje wraz ze wzrostem k

Nadzorowane uczenie maszynowe z scikit-learn

Krzywa złożoności modelu

strzałka na wykresie liniowym wskazująca 13 sąsiadów jako optymalną dokładność na zbiorze testowym

Nadzorowane uczenie maszynowe z scikit-learn

Czas na ćwiczenia!

Nadzorowane uczenie maszynowe z scikit-learn

Preparing Video For Download...