Как алгоритм машинного обучения сохраняет обучение из предыдущего выполнения? - PullRequest
2 голосов
/ 29 мая 2019

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

Авториспользует следующую функцию для разделения Tran и Test split,

def split_train_test(data, test_ratio):
    shuffled_indices = np.random.permutation(len(data))
    test_set_size = int(len(data) * test_ratio)
    test_indices = shuffled_indices[:test_set_size]
    train_indices = shuffled_indices[test_set_size:]
    return data.iloc[train_indices], data.iloc[test_indices]

Usage of the function like this:
>>>train_set, test_set = split_train_test(housing, 0.2)
>>> len(train_set)
16512
>>> len(test_set)
4128

Хорошо, это работает, но не идеально: если вы снова запустите программу, она сгенерирует другой набор тестов!Со временем вы (или ваши алгоритмы машинного обучения) увидите весь набор данных, чего вы хотите избежать.

Сачин Растоги: Почему и как это повлияет на производительность моей модели?Я понимаю, что точность моей модели будет меняться при каждом пробеге, так как набор поездов всегда будет разным.Как моя модель будет видеть весь набор данных с течением времени?

Автор также предлагает несколько решений,

Одним из решений является сохранение набора тестов при первом запуске, а затем загрузка его впоследующие прогоны.Другой вариант - установить начальное число генератора случайных чисел (например, np.random.seed (42)) перед вызовом np.random.permutation (), чтобы он всегда генерировал одни и те же перетасованные индексы.

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

Сачин Растоги: Будет ли это хорошее подразделение поезда / теста?Я думаю, что нет, Train и Test должны содержать элементы со всего набора данных, чтобы избежать смещения из набора Train.

Автор приводит пример,

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

Новый набор тестов будет содержать 20% новых экземпляров, но он не будет содержать ни одного экземпляра, который был ранее втренировочный набор.

Сачин Растоги: Я не могу понять это решение.Не могли бы вы помочь?

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