ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 22.11.2023
Просмотров: 126
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
неоправданно большое количество вариантов, нам может просто повезти, и мы обнаружим, что наша эффективность проверки больше не отражает истинную ошибку.
k, num_epochs, lr, weight_decay, batch_size = 5, 100, 5, 0, 64
train_l, valid_l = k_fold(k, train_features, train_labels, num_epochs, lr,
weight_decay, batch_size)
print(f'{k}-fold validation: avg train log rmse: {float(train_l):f}, '
f'avg valid log rmse: {float(valid_l):f}')
fold 1, train log rmse 0.169854, valid log rmse 0.157272
fold 2, train log rmse 0.161957, valid log rmse 0.188484
fold 3, train log rmse 0.163386, valid log rmse 0.167722
fold 4, train log rmse 0.167667, valid log rmse 0.154572
fold 5, train log rmse 0.162538, valid log rmse 0.182737 5-fold validation: avg train log rmse: 0.165080, avg valid log rmse: 0.170157
Обратите внимание, что иногда количество ошибок обучения для набора гиперпараметров может быть очень низким, даже если количество ошибок при K-кратной перекрестной проверке значительно выше. Это указывает на то, что мы переоснащаемся. Во время тренировки вам нужно будет следить за обоими числами. Меньшее переоснащение может означать, что наши данные могут поддерживать более мощную модель. Массовое переоснащение может означать, что мы можем выиграть, используя методы регуляризации.
Теперь, когда мы знаем, каким должен быть хороший выбор гиперпараметров, мы можем использовать все данные для обучения на нем (а не только 1–1 / K данных, которые используются в срезах перекрестной проверки).
Модель, которую мы получаем таким образом, затем можно применить к тестовой выборке. Сохранение прогнозов в файле csv упростит загрузку результатов в Kaggle.
def train_and_pred(train_features, test_feature, train_labels, test_data,
num_epochs, lr, weight_decay, batch_size):
net = get_net()
train_ls, _ = train(net, train_features, train_labels, None, None,
num_epochs, lr, weight_decay, batch_size)
d2l.plot(np.arange(1, num_epochs + 1), [train_ls], xlabel='epoch',
ylabel='log rmse', yscale='log')
print(f'train log rmse {float(train_ls[-1]):f}')
# Apply the network to the test set
preds = d2l.numpy(net(test_features))
# Reformat it to export to Kaggle
test_data['SalePrice'] = pd.Series(preds.reshape(1, -1)[0])
submission = pd.concat([test_data['Id'], test_data['SalePrice']], axis=1)
submission.to_csv('submission.csv', index=False)
Одна хорошая проверка работоспособности - увидеть, похожи ли прогнозы на тестовом наборе на те, которые получены при K-кратной перекрестной проверке. Если они это сделают, пора загрузить их в Kaggle. Следующий код сгенерирует файл с именем submission.csv.
train_and_pred(train_features, test_features, train_labels, test_data,
num_epochs, lr, weight_decay, batch_size)
train log rmse 0.162503
Затем, как показано на рис. 5.10.3 (см. рисунок в книге), мы можем представить наши прогнозы на Kaggle и посмотреть, как они соотносятся с фактическими ценами на жилье (метками) на тестовом наборе. Шаги довольно простые:
Резюме
Рис. 5.10.3: Отправка данных в Kaggle
Упражнения
Обсуждение (см. https://discuss.d2l.ai/t/106)
k, num_epochs, lr, weight_decay, batch_size = 5, 100, 5, 0, 64
train_l, valid_l = k_fold(k, train_features, train_labels, num_epochs, lr,
weight_decay, batch_size)
print(f'{k}-fold validation: avg train log rmse: {float(train_l):f}, '
f'avg valid log rmse: {float(valid_l):f}')
fold 1, train log rmse 0.169854, valid log rmse 0.157272
fold 2, train log rmse 0.161957, valid log rmse 0.188484
fold 3, train log rmse 0.163386, valid log rmse 0.167722
fold 4, train log rmse 0.167667, valid log rmse 0.154572
fold 5, train log rmse 0.162538, valid log rmse 0.182737 5-fold validation: avg train log rmse: 0.165080, avg valid log rmse: 0.170157
Обратите внимание, что иногда количество ошибок обучения для набора гиперпараметров может быть очень низким, даже если количество ошибок при K-кратной перекрестной проверке значительно выше. Это указывает на то, что мы переоснащаемся. Во время тренировки вам нужно будет следить за обоими числами. Меньшее переоснащение может означать, что наши данные могут поддерживать более мощную модель. Массовое переоснащение может означать, что мы можем выиграть, используя методы регуляризации.
-
Отправка прогнозов на Kaggle
Теперь, когда мы знаем, каким должен быть хороший выбор гиперпараметров, мы можем использовать все данные для обучения на нем (а не только 1–1 / K данных, которые используются в срезах перекрестной проверки).
Модель, которую мы получаем таким образом, затем можно применить к тестовой выборке. Сохранение прогнозов в файле csv упростит загрузку результатов в Kaggle.
def train_and_pred(train_features, test_feature, train_labels, test_data,
num_epochs, lr, weight_decay, batch_size):
net = get_net()
train_ls, _ = train(net, train_features, train_labels, None, None,
num_epochs, lr, weight_decay, batch_size)
d2l.plot(np.arange(1, num_epochs + 1), [train_ls], xlabel='epoch',
ylabel='log rmse', yscale='log')
print(f'train log rmse {float(train_ls[-1]):f}')
# Apply the network to the test set
preds = d2l.numpy(net(test_features))
# Reformat it to export to Kaggle
test_data['SalePrice'] = pd.Series(preds.reshape(1, -1)[0])
submission = pd.concat([test_data['Id'], test_data['SalePrice']], axis=1)
submission.to_csv('submission.csv', index=False)
Одна хорошая проверка работоспособности - увидеть, похожи ли прогнозы на тестовом наборе на те, которые получены при K-кратной перекрестной проверке. Если они это сделают, пора загрузить их в Kaggle. Следующий код сгенерирует файл с именем submission.csv.
train_and_pred(train_features, test_features, train_labels, test_data,
num_epochs, lr, weight_decay, batch_size)
train log rmse 0.162503
Затем, как показано на рис. 5.10.3 (см. рисунок в книге), мы можем представить наши прогнозы на Kaggle и посмотреть, как они соотносятся с фактическими ценами на жилье (метками) на тестовом наборе. Шаги довольно простые:
-
Войдите на сайт Kaggle и посетите страницу конкурса прогнозов цен на жилье. -
Нажмите кнопку «Отправить прогнозы» или «Поздняя отправка» (на момент написания эта кнопка находится справа). -
Нажмите кнопку «Загрузить файл для отправки» в пунктирной рамке внизу страницы и выберите файл прогноза, который вы хотите загрузить. -
Нажмите кнопку «Отправить» внизу страницы, чтобы просмотреть результаты.
Резюме
-
Реальные данные часто содержат смесь разных типов данных и требуют предварительной обработки. -
Изменение масштаба данных с действительными значениями до нулевого среднего и единичной дисперсии является хорошим значением по умолчанию. Таким образом, пропущенные значения заменяются их средним значением. -
Преобразование категориальных характеристик в характеристики индикаторов позволяет нам рассматривать их как горячие векторы. -
Мы можем использовать перекрестную проверку в K-кратном порядке для выбора модели и настройки гиперпараметров. -
Логарифмы полезны для относительных ошибок.
Рис. 5.10.3: Отправка данных в Kaggle
Упражнения
-
Отправьте свои прогнозы для этого раздела в Kaggle. Насколько хороши ваши прогнозы? -
Можете ли вы улучшить свою модель, напрямую минимизируя логарифм цен? Что произойдет, если вы попытаетесь предсказать логарифм цены, а не цену? -
Всегда ли заменять отсутствующие значения их средними значениями? Подсказка: можете ли вы создать ситуацию, когда значения не пропадают случайно? -
Повысьте оценку Kaggle, настроив гиперпараметры с помощью K-кратной перекрестной проверки. -
Повысьте оценку, улучшив модель (например, слои, снижение веса и отсев). -
Что произойдет, если мы не стандартизируем непрерывные числовые функции, как то, что мы сделали в этом разделе?
Обсуждение (см. https://discuss.d2l.ai/t/106)