Не эксперт по машинному обучению, но обычный процесс, которому я следую, чтобы обучить модель машинного обучения, — это после очистки данных, разделения набора данных для обучения и тестирования с использованием разделения тестов обучения scikit-learn.
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X.values,
y.values,
test_size=0.30,
random_state=0)
пропуская весь процесс построения модели... когда вы переходите к обучению модели (соответствует ей) после ее определения и компиляции, необходимо использовать параметр разделения проверки, как показано ниже.
history = model.fit(X_train, y_train, epochs=10,validation_split=0.2)
кажется, что это снова делит наборы обучающих данных на 20% точек данных, чтобы проверить нашу модель во время обучения. Если бы у вас было, скажем, 1000 точек данных (строк) в наборе данных, первый приведенный выше код приведет к 700 тренировочных точек данных для обучения и 300 для тестирования
второй снова разделит эти 700 на 20% для проверки, оставив как 640 точек данных для обучения и 160 для проверки
оставив нам небольшие данные для обучения нашей модели.
Недавно я столкнулся с методом, в котором вы используете тестовые данные для проверки, как показано ниже.
history = model.fit(x_train, y_train, validation_data=(x_test, y_test))
Мой вопрос заключается в том, что на самом деле произойдет с проверочными данными после завершения обучения, автоматически ли они добавляются для обучения нашей модели, каким-то образом улучшая нашу точность в конце, а также достаточно ли используются тестовые данные для проверки, и если мы это сделаем, будет ли это иметь эффект, когда мы пытаемся оценить нашу модель, используя тестовые данные.
а также после переобучения с использованием как обучения, так и проверки, мы должны снова переобучить нашу модель с использованием тестовых данных. в конце концов, перед развертыванием? каковы будут последствия этого и будет ли это зависеть от других факторов?
Когда вы позволяете модели выполнять разделение проверки для вас, неясно, будет ли модель повторно обучать данные проверки, в том числе. Вам следует обратиться к документации по вашей модели, и, если она неясна, выполните разделение проверки вручную и повторите обучение позже вручную. Sklearn GridSearchCV переобучит (переустановит параметр), keras - не уверен. Если есть сомнения, лучше сделать это вручную. Вы можете переучиться на тесте, если знаете метки, но в реальной жизни определение теста предполагает, что вы не знаете меток (см., например, соревнования Kaggle)
Как указано keras
(последний метод model.fit с validation_data исходит от keras)
validation_split
Плавающая от 0 до 1. Доля обучающих данных, которые будут использоваться в качестве данные проверки. Модель будет выделять эту часть обучающие данные, не будет на них тренироваться, а будет оценивать потери и любые метрики модели по этим данным в конце каждой эпохи. данные проверки выбираются из последних выборок в данных x и y при условии, до перетасовки.
validation_data
Данные для оценки убытка и любые показатели модели в конце каждую эпоху. Модель не будет обучаться на этих данных. Это должно быть список (x_val, y_val) или список (x_val, y_val, val_sample_weights). validation_data переопределит validation_split.
Таким образом, с этой настройкой модель не будет обучаться на проверочных данных.
Теоретически данные проверки используются для оценки вашей модели и настройки ее гиперпараметров.
Если вам нужно запустить эту модель в производство, вы должны переобучить модель со всеми данными, зная, что производительность будет той, которую вы получили из данных проверки\тестирования.
В любом случае, производительность на данных проверки\тестирования часто является оптимистичной оценкой производительности.
Данные, которые я использую во время обучения для проверки модели, знают потери при проверке и точность проверки в каждую эпоху (с использованием глубокой нейронной сети).