Машинное обучение — это процесс обучения машин тому, как изучать базовые закономерности в наборах данных. Вместо того, чтобы кодировать ответы где-то в памяти (т. е. запоминать), мы хотим, чтобы компьютеры могли использовать предварительные знания о конкретном предмете, чтобы делать новые выводы.

«Эффективное обучение должно развиваться от отдельных примеров к широким обобщениям»

  • Обучение —приобретение знаний или навыков посредством обучения, получения опыта или обучения.
  • Проверка — процесс оценки точности ваших моделей машинного обучения. например оценка среднеквадратичной ошибки для регрессионных моделей

Обучение и проверка с использованием одного и того же набора данных

Допустим, нам нужно было подогнать простую модель линейной регрессии к набору данных, показывающему цены на жилье в определенном месте с учетом возраста и размера дома.

Если вы используете один и тот же набор данных для оценки или подтверждения точности модели, вы получите модель, которая, скорее всего, не сможет правильно прогнозировать цена дома с учетом новой информации, то есть возраста и размера, не включенных в исходный набор данных.

Проще говоря, ваша модель не сможет обобщить значения ответов для новых или неизвестных функций после ее развертывания. Перекрестная проверка решает эту проблему, разделяя данные на обучающие и тестовые наборы на этапе моделирования, чтобы мы могли получить представление о том, насколько хорошо наша окончательная модель будет работать с учетом новых значений функций.

Для контролируемого обучения существуют различные методы перекрестной проверки, в том числе методы удержания, методы k-кратности, стратифицированная перекрестная проверка k-кратности и перекрестная проверка исключения.

  1. Сплит-тестирование или метод Hold-out

Техника

  • Разделите исходный набор данных на два подмножества, названные тестовым набором и обучающим набором соответственно.
  • Разделение отношения обычно составляет 30 % для тестового/проверочного набора и 70 % для обучающего набора. Если в вашем наборе данных много наблюдений, вам обычно не нужны все 30 % для проверки, вы можете использовать 20 %. ,15% и т.д.

Ограничения

  • Нестабильность модели. Производительность модели зависит от того, какие наблюдения попадают в проверочный набор, т. е. высокая дисперсия.
  • Потеря информации. Некоторые полезные шаблоны могут быть пропущены на этапе обучения, поскольку некоторые наблюдения, содержащие полезную информацию, попадают в проверочный набор. В долгосрочной перспективе это приводит к высокой ошибке обобщения и, следовательно, к высокому наведенному смещению.

Пример Склерна

# Example with train/test = 70/30
import numpy as np
from sklearn.model_selection import train_test_split
X, y = np.arange(10).reshape((5, 2)), range(5)
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.30, random_state=42)

2. К-кратный метод

Техника

  • Разделите набор данных на k равных сгибов или подмножеств.
  • Запустите k итераций обучения/тестирования, чтобы убедиться, что каждое наблюдение появляется ровно один раз в наборах для тестирования и k-1 раз в наборах для обучения.

Ограничения

  • Отсутствует ведущая мера точности. Для задач классификации с дисбалансом классов (например, 0:1 = 90% : 10%) мы можем получить вводящие в заблуждение показатели высокой точности.
  • Это связано с тем, что каждая k страта может содержать различные пропорции классов.

Пример Склерна

# k-fold cross validation with k=10
from sklearn.model_selection import KFold
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4])
kf = KFold(n_splits=2) 

for train_index, test_index in kf.split(X,y):
   print("TRAIN:", train_index, "TEST:", test_index)
   X_train, X_test = X[train_index], X[test_index]
   y_train, y_test = y[train_index], y[test_index]

3. Стратифицированный K-кратный метод

Техника

  • Если ваши классы не сбалансированы, мы хотим разделить данные таким образом, чтобы каждая группа или подмножество содержали примерно одинаковые пропорции классов, т. е. «среднее значение ответа должно быть одинаковым во всех группах».
  • Это достигается за счет сохранения пропорций класса исходного набора данных в каждом подмножестве. То есть, если данные содержали 60% меток 0 и 40% меток 1, складки выбираются таким образом, чтобы эти соотношения сохранялись.

Пример Склерна

# stratified k-fold example
from sklearn.model_selection import StratifiedKFold
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([0, 0, 1, 1])
skf = StratifiedKFold(n_splits=2)
skf.get_n_splits(X, y)
print(skf) # output = 2 

for train_index, test_index in skf.split(X, y):
   print("TRAIN:", train_index, "TEST:", test_index)
   X_train, X_test = X[train_index], X[test_index]
   y_train, y_test = y[train_index], y[test_index]

Пожалуйста, не стесняйтесь оставлять любые конструктивные комментарии ниже.