Как мне узнать, подходит ли моя модель нейронной сети или нет (Керас) - PullRequest
3 голосов
/ 03 февраля 2020

Я использую Keras, чтобы предсказать, получу ли я вывод 1 или 0. Данные выглядят так:

    funded_amnt  emp_length  avg_cur_bal  num_actv_rev_tl    loan_status
    10000       5.60088      19266                 2                  1
    13750       5.60088      2802                  6                  0
    26100       10.0000      19241                17                  1

Цель - loan_status, а функции - остальные. Я нормализовал данные, прежде чем приступить к построению модели нейронной сети.

Вот форма моих данных обучения и тестирования:

    print(X_train.shape,Y_train.shape) 
    # Output: (693, 4) (693,)

    print(X_test.shape,Y_test.shape) 
    # Output: (149, 4) (149,)

Процесс, которому я следовал при построении нейронной сети: :

     # define the keras model
     model = Sequential()
     model.add(Dense(4, input_dim=4,activation='relu'))
     model.add(Dense(4 ,activation='relu'))
     model.add(Dense(1,activation='sigmoid'))

     # compile the keras model
     model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

     # fit the keras model on the dataset
     hist = model.fit(X_train, Y_train, epochs=10, batch_size=2)

Вывод после запуска hist:

         Epoch 1/10
         693/693 [==============================] - 2s 2ms/step - loss: 0.6379 - acc: 0.7013
         Epoch 2/10
         693/693 [==============================] - 0s 611us/step - loss: 0.5207 - acc: 0.7951
         Epoch 3/10
         693/693 [==============================] - 0s 605us/step - loss: 0.5126 - acc: 0.7951
         Epoch 4/10
         693/693 [==============================] - 0s 621us/step - loss: 0.5109 - acc: 0.7951
         Epoch 5/10
         693/693 [==============================] - 0s 611us/step - loss: 0.5105 - acc: 0.7951
         Epoch 6/10
         693/693 [==============================] - 0s 636us/step - loss: 0.5091 - acc: 0.7951
         Epoch 7/10
         693/693 [==============================] - 0s 644us/step - loss: 0.5090 - acc: 0.7951
         Epoch 8/10
         693/693 [==============================] - 0s 659us/step - loss: 0.5086 - acc: 0.7951
         Epoch 9/10
         693/693 [==============================] - 0s 668us/step - loss: 0.5083 - acc: 0.7951
         Epoch 10/10
         693/693 [==============================] - 0s 656us/step - loss: 0.5076 - acc: 0.7951

это почти то же самое и не меняется после второй эпохи. Я пытался изменить количество эпох и размер партии, но получаю одинаковые результаты. Это нормально? или это признак переоснащения и мне нужно изменить некоторые параметры

Ответы [ 3 ]

4 голосов
/ 03 февраля 2020

Ваши данные испытаний предназначены для мониторинга оснащения модели на данных поезда :

hist = model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=10, batch_size=2)

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

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

Обычно алгоритм обучения обучается с использованием некоторого набора "обучающих данных ": примерных ситуаций, для которых известен желаемый результат , Цель состоит в том, чтобы алгоритм также хорошо работал при прогнозировании выходных данных при подаче « данных проверки », которые не встречались во время его обучения. Перенастройка особенно вероятна в тех случаях, когда обучение выполнялось слишком долго или примеры обучения редки, в результате чего учащийся приспосабливается к очень специфическим c случайным характеристикам данных обучения, которые не имеют причинно-следственной связи с целевой функцией. В этом процессе переоснащения производительность на обучающих примерах все еще увеличивается , тогда как производительность на невидимых данных ухудшается .

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

1 голос
/ 03 февраля 2020

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

Это можно решить путем либо увеличение емкости вашей сети путем добавления нескольких слоев, отсева, регуляризации и т. д. c. Или, если возможно, добавьте больше обучающих данных и больше функций.

1 голос
/ 03 февраля 2020

Переоснащение - это не ваша проблема сейчас, оно может появиться в моделях с высокой точностью (> 95%), вам следует попробовать больше тренировать свою модель. Если вы хотите проверить, не перегружена ли ваша модель, попробуйте сделать прогноз, используя данные проверки. Если точность выглядит слишком низкой, а тренировочная - высокой, то, возможно, она переоснащена.

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