Modelprestatie meten

Supervised Learning met scikit-learn

George Boorman

Core Curriculum Manager, DataCamp

Modelprestatie meten

  • Bij classificatie is nauwkeurigheid een vaak gebruikte metriek

  • Nauwkeurigheid:

juiste voorspellingen gedeeld door totaal aantal observaties

Supervised Learning met scikit-learn

Modelprestatie meten

  • Hoe meten we nauwkeurigheid?

  • Je kunt nauwkeurigheid berekenen op de data die de classifier trainde

  • Maar dat zegt niets over generaliseren

Supervised Learning met scikit-learn

Nauwkeurigheid berekenen

data gesplitst in een trainingsset en testset

Supervised Learning met scikit-learn

Nauwkeurigheid berekenen

een classifier fitten op de trainingsset

Supervised Learning met scikit-learn

Nauwkeurigheid berekenen

nauwkeurigheid berekenen met de testset

Supervised Learning met scikit-learn

Train/test-split

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
Supervised Learning met scikit-learn

Modelcomplexiteit

  • Grotere k = minder complex model = kan underfitting geven

  • Kleinere k = complexer model = kan overfitting geven

spreidingsdiagrammen met een KNN-beslissingsgrens voor k=1, k=9 en k=18

Supervised Learning met scikit-learn

Modelcomplexiteit en over/underfitting

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)
Supervised Learning met scikit-learn

Resultaten plotten

plt.figure(figsize=(8, 6))
plt.title("KNN: Aantal buren variëren")
plt.plot(neighbors, train_accuracies.values(), label="Trainingsnauwkeurigheid")
plt.plot(neighbors, test_accuracies.values(), label="Testnauwkeurigheid")
plt.legend()
plt.xlabel("Aantal buren")
plt.ylabel("Nauwkeurigheid")
plt.show()
Supervised Learning met scikit-learn

Modelcomplexiteitscurve

lijngrafiek van nauwkeurigheid vs aantal buren, waarbij zowel train- als testnauwkeurigheid dalen naarmate k toeneemt

Supervised Learning met scikit-learn

Modelcomplexiteitscurve

pijl in de lijngrafiek die wijst naar 13 buren als beste testnauwkeurigheid

Supervised Learning met scikit-learn

Laten we oefenen!

Supervised Learning met scikit-learn

Preparing Video For Download...