#python #tensorflow #machine-learning #keras #deep-learning
Вопрос:
Я немного смущен разделением набора данных, когда создаю и оцениваю модели машинного обучения Keras. Допустим, у меня есть набор данных из 1000 строк.
features = df.iloc[:,:-1]
results = df.iloc[:,-1]
Теперь я хочу разделить эти данные на обучение и тестирование (33% данных для тестирования, 67% для обучения).:
x_train, X_test, y_train, y_test = train_test_split(features, results, test_size=0.33)
Я читал в Интернете, что подгонка данных в модель должна выглядеть так:
history = model.fit(features, results, validation_split = 0.2, epochs = 10, batch_size=50)
Поэтому я подгоняю полные данные (функции и результаты) к своей модели, и из этих данных я использую 20% данных для проверки: validation_split = 0.2
.
Таким образом, в основном моя модель будет обучена на 80% данных и протестирована на 20% данных.
Поэтому путаница начинается, когда мне нужно оценить модель:
score = model.evaluate(x_test, y_test, batch_size=50)
Это правильно?
Я имею в виду, почему я должен разделять данные на обучение и тестирование, куда идут x_train и y_train?
Не могли бы вы, пожалуйста, объяснить мне, каков правильный порядок шагов для создания модели?
Ответ №1:
Как правило, во время обучения ( model. fit
) у вас есть два набора: один для набора обучения, а другой для набора проверки/настройки/разработки. С помощью обучающего набора вы обучаете модель, а с помощью набора проверки вам нужно найти наилучший набор гиперпараметров. И когда вы закончите, вы можете протестировать свою модель с помощью невидимого набора данных — набора, который был полностью скрыт от модели в отличие от набора для обучения или проверки.
Теперь, когда вы использовали
X_train, X_test, y_train, y_test = train_test_split(features, results, test_size=0.33)
Таким образом, вы разделяете features
и results
на 33%
данные для тестирования, 67%
для обучения. Теперь вы можете сделать две вещи
- используйте (
X_test
иy_test
в качестве проверки, установленной вmodel.fit(...)
. Или, - используйте их для окончательного прогнозирования в
model. predict(...)
Итак, если вы выберете эти наборы тестов в качестве набора проверки ( номер 1 ), вы сделаете следующее:
model.fit(x=X_train, y=y_trian,
validation_data = (X_test, y_test), ...)
В журнале тренировок вы получите результаты проверки вместе с оценкой за обучение. Результаты проверки должны быть такими же, если вы позже вычислите model.evaluate(X_test, y_test)
.
Теперь, если вы выберете этот набор тестов в качестве окончательного прогноза или окончательного оценочного набора ( номер 2 ), вам нужно заново выполнить набор проверки или использовать validation_split
аргумент следующим образом:
model.fit(x=X_train, y=y_trian,
validation_split = 0.2, ...)
Keras
API будет принимать .2
процент обучающих данных ( X_train
и y_train
) и использовать их для проверки. И, наконец, для окончательной оценки вашей модели вы можете сделать следующее:
y_pred = model.predict(x_test, batch_size=50)
Теперь вы можете сравнить y_test
и y_pred
с некоторыми соответствующими показателями.
Комментарии:
1. но где же моя модель.оцените тогда? Для чего это?
2. если вы выберете номер 1, а также если вы установите
x_test
иy_test
в качестве проверочного набора вmodel.fit
— в этом случае вам не нужно использоватьmdoel.evaluate
. Потому что вы можете получить оценки (loss
илиacc
) из журналов тренировок.3. Но если вы выберете номер 2, где мы не используем
x_test
иy_test
вmdoel.fit
, то вы можете сделатьmodel.evaluate (x_test, y_test)
и такжеmodel.predict(x_test)
, как показано выше.4. к вашему сведению, В
fit()
, как обстоит дело сvalidation_split
вычислено?
Ответ №2:
Как правило, вы хотели бы использовать свои данные X_train, y_train, которые вы разделили в качестве аргументов в методе fit. Так что это будет выглядеть примерно так:
history = model.fit(X_train, y_train, batch_size=50)
Хотя вы не разделяете свои данные перед тем, как добавить их в метод fit и добавить аргументы validation_split, также работают, просто будьте осторожны, чтобы обратиться к документации keras по аргументам validation_data и validation_split, чтобы убедиться, что вы разделяете их должным образом.
Здесь есть связанный с этим вопрос: https://datascience.stackexchange.com/questions/38955/how-does-the-validation-split-parameter-of-keras-fit-function-work
Документация Keras: https://keras.rstudio.com/reference/fit.html
Ответ №3:
Я читал в Интернете, что подгонка данных в модель должна выглядеть так:
Это означает, что вам нужно соответствовать функциям и надписям. Вы уже разделили их на x_train
amp; y_train
. Так что ваша посадка должна выглядеть так:
history = model.fit(x_train, y_train, validation_split = 0.2, epochs = 10, batch_size=50)
Поэтому путаница начинается, когда мне нужно оценить модель:
оценка = модель.оценка(x_test, y_test, размер пакета=50) —> Это правильно?
Правильно, вы оцениваете модель с помощью функций тестирования и соответствующих меток. Кроме того, если вы хотите получить только, например, предсказанные метки, вы можете использовать:
y_hat = model.predict(X_test)
Затем вы можете сравнить y_hat
y_test
, т. е. получить матрицу путаницы и т. Д.