В этом реферате мы увидим все о HOLDOUT в самом простом виде. Этот реферат полностью предназначен для новичков, которые хотят понять различные концепции машинного обучения самым простым и быстрым способом!

Обзор того, что такое Holdout:

В машинном обучении мы должны выполнить ряд шагов для построения модели машинного обучения для хороших прогнозов:

1) Извлечение данных

2) Очистка данных

3) EDA (исследовательский анализ данных)

4) Разработка признаков (выбор, извлечение)

5) Масштабирование функций (стандартизация, нормализация)

6) Разработка модели машинного обучения

а) Модельное обучение

б) Оценка модели

в) Тестирование модели

И на 6-м шаге наша тема раскрывается!

В разработке модели машинного обучения (обучение, тестирование) реализован метод с именем HOLDOUT.

Обучение и тестирование имеют 2 подхода:

1) ЗАДЕРЖКА

2) K-кратная перекрестная проверка

Давайте углубимся в HOLDOUT:

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

Что именно происходит в HOLDOUT…?

Наши готовые данные должны быть оценены, поэтому для этого мы делим наши данные на 2 раздела:

1) Тренировочный набор

2) Тестовый набор

Теперь вы, возможно, спрашиваете, почему мы это делаем?

Например Предположим, у меня есть набор манго. 10 спелых манго и 7 незрелых манго. И мне нужно научить ребенка двум разным состояниям плода. Итак, есть 2 способа сделать это

  1. Покажите ребенку все манго (зрелые и незрелые) и объясните, какие из них спелые, а какие нет. А затем попросить ребенка классифицировать [из уже показанных манго] спелые и незрелые манго (оценка обучения, проведенного с ребенком).
  2. Выполните HOLDOUT и покажите несколько (70%, т.е. 12 манго) манго (зрелых и незрелых) и научите ребенка. А затем попросите ребенка классифицировать [из оставшихся манго, т.е. 30% манго] на спелые и незрелые манго.

Учитывая 1-й вариант:

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

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

Этот метод является в высшей степени теоретическим и гораздо менее практичным.

Учитывая 2-й вариант:

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

Этот метод очень практичен!

То же самое касается любой модели машинного обучения!

Но опять же, есть проблема и со 2-й возможностью, теперь в чем эта проблема?

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

Учитывая те же примеры манго выше в модели ML, когда мы делим их случайным образом, они делятся так, что 12 манго для обучения и 5 манго для тестирования.

Еще раз для деления снова есть разные возможности:

1) Все 10 спелых манго и 2 незрелых манго находятся в тренировочном наборе | Остальные 5 незрелых манго находятся в тестовом наборе.

Модель будет плохо работать здесь, в Тестировании, поскольку она изучила все спелые манго, а в Тестировании присутствуют все незрелые манго.

2) 8 спелых и 4 неспелых манго в тренировочном наборе | Оставшиеся 2 спелых и 3 незрелых манго находятся в тестовом наборе.

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

Я проиллюстрирую то же самое для вас:

Рассмотрим набор данных Hand-Written digits из репозитория sklearn.

Импорт пакетов, набора данных и различных алгоритмов машинного обучения

Python3

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
import numpy as np
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
digits = load_digits()

Проверка данных (функций) и целевых значений.

Python3

print("Data : \n", digits.data)
print ("")
print("Target : \n", digits.target)

Отображение фактического рукописного изображения:

Python3

import matplotlib as mpl
import matplotlib.pyplot as plt
plt.gray()
plt.matshow(digits.images[88])

plt.show()

Подтверждение номера на изображении:

Python3

print("Data : \n", digits.data[88])
print("")
print("Target : ", digits.target[88])

Теперь мы выполним метод HOLDOUT, т. е. поезд, тестовый сплит!

Python3

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.3)

Мы получаем следующие «ОЦЕНКИ», реализуя метод HOLDOUT один раз:

Python3

#Logistic Regression
lr = LogisticRegression(solver='liblinear',multi_class='ovr')
lr.fit(X_train, y_train)
lr.score(X_test, y_test)
#Support Vector Machines
svm = SVC(gamma='auto')
svm.fit(X_train, y_train)
svm.score(X_test, y_test)
#Random Forest
rf = RandomForestClassifier(n_estimators=40)
rf.fit(X_train, y_train)
rf.score(X_test, y_test)

Когда мы реализуем метод HOLDOUT еще раз (данные обучения и тестирования изменяются)

Отсюда получаем следующий результат!

Оценки изменились, верно?

Почему это происходит..?

Когда мы выполняем ‘train_test_split’, мы делим определенную случайную часть нашего набора данных на набор для обучения и тестирования!

И когда мы снова запустим «train_test_split», мы снова разделим данные случайным образом на наборы для обучения и тестирования!

Поэтому, когда данные продолжают меняться таким образом, модель учится еще больше и становится лучше в прогнозах! Это также важная концепция под названием Кросс-валидация K-Fold!

Надеюсь, вы все полностью поняли концептуальную часть HOLDOUT!