Оценка производительности модели

Обучение с учителем с помощью scikit-learn

George Boorman

Core Curriculum Manager, DataCamp

Оценка производительности модели

  • В классификации часто используется метрика точности

  • Точность:

правильные предсказания, делённые на общее число наблюдений

Обучение с учителем с помощью scikit-learn

Оценка производительности модели

  • Как измерить точность?

  • Можно вычислить точность на данных, использованных для обучения классификатора

  • НЕ отражает способность модели к обобщению

Обучение с учителем с помощью scikit-learn

Вычисление точности

данные разбиваются на обучающую и тестовую выборки

Обучение с учителем с помощью scikit-learn

Вычисление точности

обучение классификатора на обучающей выборке

Обучение с учителем с помощью scikit-learn

Вычисление точности

вычисление точности на тестовой выборке

Обучение с учителем с помощью scikit-learn

Разбиение на обучающую и тестовую выборки

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
Обучение с учителем с помощью scikit-learn

Сложность модели

  • Большее k = менее сложная модель = риск недообучения

  • Меньшее k = более сложная модель = риск переобучения

диаграммы рассеяния с границей решения KNN для k=1, k=9 и k=18

Обучение с учителем с помощью scikit-learn

Сложность модели: переобучение и недообучение

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)
Обучение с учителем с помощью scikit-learn

Визуализация результатов

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()
Обучение с учителем с помощью scikit-learn

Кривая сложности модели

линейный график зависимости точности от числа соседей: точность на обучающей и тестовой выборках снижается с ростом k

Обучение с учителем с помощью scikit-learn

Кривая сложности модели

стрелка на линейном графике указывает на 13 соседей как оптимальное значение для точности на тестовой выборке

Обучение с учителем с помощью scikit-learn

Давайте потренируемся!

Обучение с учителем с помощью scikit-learn

Preparing Video For Download...