Menu
CoddyTech

K-блочная проверка

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 37 из 58.

Эта глава поможет сделать ваши оценки надёжными. К концу главы вы научитесь настраивать модель с помощью диаграмм, подобных этой:

Средняя точность по 5 фолдам для значений k от 1 до 41. Столбцы растут с 0.85 при k = 1 до выделенного максимума 0.91 при k = 15, а затем снижаются

Вам может повезти с одним разбиением. Кросс-валидация по K блокам разбивает строки на блоки — в данном случае на 5 — и по очереди проверяет модель на каждом блоке, обучая её на остальных:

Пять строк по пять ячеек. В каждом разбиении одна ячейка — каждый раз другая — является тестовым блоком; на остальных четырёх модель обучается. Оценки дерева Iris рядом: 0.967, 0.967, 0.900, 0.967, 1.000

Один вызов запускает все пять, здесь — для дерева на цветках ириса:

from sklearn.model_selection import cross_val_score

tree = DecisionTreeClassifier(random_state=0)
scores = cross_val_score(tree, X, y, cv=5)
print(np.round(scores, 3))
print(f"{scores.mean():.3f} {scores.std():.3f}")

Это выводит:

[0.967 0.967 0.9   0.967 1.   ]
0.960 0.033

Укажи среднее значение как оценку, а std — как меру разброса.

challenge icon

Задание

Средне

Пивоварня комбучи предсказывает, испортились ли партии, по 5 лабораторным показателям. Насколько стабильно работает её модель? Программа считывает количество фолдов; код-заготовка создаёт данные и модель.

  1. Проведи перекрёстную проверку модели с указанным количеством фолдов.
  2. Выведи точность для каждого фолда, а затем среднее значение и стандартное отклонение — всё с точностью до 3 знаков после запятой.
  3. Выведи номер фолда с наименьшей точностью, считая от 1.

Для других партий и 4:

Fold 1: 0.917
Fold 2: 0.933
Fold 3: 0.883
Fold 4: 0.917
Mean 0.912, std 0.018
Weakest fold: 3

Попробуйте сами

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

n_folds = int(input())

# Не меняйте строки ниже: 240 партий комбучи, по 5 лабораторных показателей для каждой; метка 1 означает, что партия испорчена
X, y = make_classification(n_samples=240, n_features=5, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.9, random_state=2)
model = LogisticRegression(max_iter=1000)

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение с учителем

Потренируйтесь самостоятельно: Онлайн-компилятор Python