Интерпретация кривой обучения в ScikitLearn относительно эпох - PullRequest
0 голосов
/ 23 января 2019

Я новичок в машинном обучении и в настоящее время использую MLPClassifier ScikitLearn для задачи нейронной сети .Согласно известному курсу Эндрю Нг по машинному обучению, я строю кривую обучения, в моем случае, используя функцию обучения_curve ScikitLearn (см. Также документацию: https://scikit -learn.org / stable / auto_examples / model_selection / plot_learning_curve.html ):

clf = MLPClassifier(solver='adam', activation='relu', alpha=0.001,
 learning_rate='constant',learning_rate_init=0.0001,
 hidden_layer_sizes=[39, 37, 31, 34],   batch_size=200,
 max_iter=1000, verbose=True) 


cv=GroupKFold(n_splits=8)

estimator =clf
ylim=(0.7, 1.01)
cv=cv
n_jobs=1
train_sizes=np.linspace(.01, 1.0, 100)


#Calculate learning curve
train_sizes, train_scores, test_scores = learning_curve(
    estimator, X_array_train, Y_array_train,
    groups=groups_array_train, cv=cv, n_jobs=n_jobs,
    train_sizes=train_sizes, scoring='accuracy',verbose=10)

Мой решатель для MLPClassifier равен 'adam', а размер пакета равен 200.

Это результирующий график: https://i.imgur.com/jDNoEVg.png

У меня есть два вопроса относительно интерпретации таких кривых обучения:

1.) Когда я понимаю эту кривую обучения, она дает мне обучение и перекрестную проверку оценка для различного количества обучающих данных до конца одной эпохи (эпоха = один проход вперед и один проход назад всех примеров обучения).Глядя на «разрыв» между этими двумя и на каком счете они заканчиваются, я могу диагностировать, есть ли у меня проблема с большим смещением или дисперсией.Однако, согласно многословному моему MLPClassifier , нейронная сеть обучается в течение нескольких эпох, поэтому, какая эпоха указана на кривой (первая эпоха обучения, последняя эпоха или средние оценки по всем эпохам?).Или с моей стороны вообще недоразумение с эпохами?

2.) Начиная новую партию (после 200 и 400 примеров тренировок), я получаю шипы.Как правильно их интерпретировать?

3.) Вероятно, понимание 1.) также ответит на это: что делает эту функцию настолько медленной, что вам нужно несколько параллельных заданий n_jobs, чтобы выполнить ее вразумный срок?clf.fit (X, y) в моем случае быстр.

Я был бы очень благодарен, если бы кто-нибудь помог мне лучше понять это.Я также открыт для литературных рекомендаций.

Большое спасибо заранее!

1 Ответ

0 голосов
/ 23 января 2019

Кривая обучения должна рассчитываться только по устойчивой обобщаемой модели. Вы удостоверились, что модель не переоснащается?

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

2) Размер вашей партии очень велик по сравнению с количеством образцов. Рассмотрим меньший размер партии, может быть, 50 или 20. СПЕКУЛЯЦИЯ : может быть тем, что для 201 образца у вас будет одна партия 200 и одна партия 1. Эта партия 1 может вызвать проблемы.

3) Кривая обучения будет обучаться для каждого раза перекрестной проверки для каждого выбора обучающей выборки. В вашем случае, похоже, вы тестируете все 500 возможных размеров обучения. С 5 кратным резюме это будет 2500 тренировочных раундов. Без распараллеливания это в 2500 раз больше, чем при одном фитинге () + прогнозировать (). Вместо этого вы должны только выбрать размер тренировочного набора. train_sizes = numpy.linspace(0.0, 1.0, 30) за 30 баллов между 0% ваших данных и 100%.

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