Поезд Scikit-Learn MLPRegressor, пока он не будет соответствовать пошаговому поезду, очень разные результаты с теми же настройками и набором данных - PullRequest
0 голосов
/ 25 марта 2019

Мне трудно понять, почему два приведенных ниже метода дают существенно разные результаты:

Сценарий B повторял 500 шагов, Сценарий A автоматически останавливался на 444 шагах

EVS в сценарии B никогда не приближается к сценарию A (даже если я запускаю сценарий B до 50 000 итераций). Я как-то не правильно прошёл учебные итерации?

Сценарий A:

    from sklearn.neural_network import MLPRegressor

    modelnm = 'MLPRegressor_simple'
    estimator_reg = MLPRegressor(
        solver='adam',
        activation='relu',
        learning_rate='adaptive',
        learning_rate_init=.001,
        hidden_layer_sizes=[400, 300, 200],
        alpha=0.000000001,
        max_iter=100000,
        random_state=42,
        tol=0.0000000000000001,
        batch_size='auto',
        shuffle=True,
        early_stopping=False, #doesn't seem to do anything
        warm_start=False,
        #max_iter=1,
        beta_1=0.9,
        beta_2=0.95,
        epsilon=0.0000000001,
        verbose=0,
    )

    estimator_reg.fit(train_data, train_labels)
    model_fit = estimator_reg

    bp = estimator_reg.get_params()

    data_predictions = model_fit.predict(train_data)

    mymsg = 'n_iter=' + str(model_fit.n_iter_)
    print(mymsg)
    dxs = 'Train'
    fin_001(modelnm, data_predictions, train_labels, model_fit, bp, dxs, pd_train_IDS)

    data_predictions = model_fit.predict(test_data)
    dxs = 'Test'
    fin_001(modelnm, data_predictions, test_labels, model_fit, bp, dxs, pd_test_IDS)

Сценарий A:

    train_data.shape=(19700, 395)
    n_iter=444
    ('MLPRegressor_simpleTrain EVS = ', 0.8905082198798907)

Сценарий B:

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.neural_network import MLPRegressor

    scores_train = []
    scores_test = []
    scores_train_b = []
    scores_test_b = []

    estimator_reg = MLPRegressor(
        solver='adam',
        activation='relu',
        learning_rate='adaptive',
        learning_rate_init=.001,
        hidden_layer_sizes=[400, 300, 200],
        alpha=0.000000001,
        max_iter=1,
        random_state=42,
        tol=0.0000000000000001,
        batch_size='auto',
        shuffle=True,
        early_stopping=False,
        warm_start=False,
        beta_1=0.9,
        beta_2=0.95,
        epsilon=0.0000000001,
        verbose=0,
    )
    estimator_reg.fit(train_data, train_labels)
    res= 0.001
    estimator_reg.set_params(learning_rate_init=res. warm_start=True)
    last_stm = 0
    bestiter = 0
    bestiterfnd = 0
    besttestscore = 0.0
    for i in range(500):
        estimator_reg.fit(train_data, train_labels)
        model_fit = estimator_reg
        data_predictions_tr = model_fit.predict(train_data)
        evs_tr = explained_variance_score(train_labels, data_predictions_tr)
        scores_train.append(model_fit.score(train_data, train_labels))

        data_predictions_ts = model_fit.predict(test_data)
        evs_ts = explained_variance_score(test_labels, data_predictions_ts)
        scores_test.append(model_fit.score(test_data, test_labels))

        Xc = 5 # Span of mean
        if len(scores_test) - Xc < 0:
            mymin = 0
        else:
            mymin = len(scores_test) - Xc

        mymax = len(scores_test)
        #print (scores_test[mymin:mymax])
        print('LR=' + str(res) + ' rnd=00 iter=' + str(i) + ' moving avg=' + str(np.average(scores_test[mymin:mymax])))
        scores_test_mean = np.average(scores_test[mymin:mymax])

        #if bestiterfnd == 0:
        if scores_test_mean > last_stm:
            bestiterfnd = 1
            bestiter = i
            besttestscore = model_fit.score(test_data, test_labels)
            last_stm = scores_test_mean
    r0i= i
    for pos in range(len(scores_train)):     # by index
        print(str(pos) + '.    ' + str(scores_train[pos])[:5])

Сценарий B Результат:

    train_data.shape=(19700, 395)
    0.    -0.04
    1.    0.016
    2.    0.043
    3.    0.046
    ...
    442.    0.410
    443.    0.422
    444.    0.447
    445.    0.474
    ...
    498.    0.426
    499.    0.414
...