【问题标题】:How can I get the train and test scores for each iteration of a MLPRegressor?如何获得 MLPRegressor 每次迭代的训练和测试分数?
【发布时间】:2019-02-01 00:59:44
【问题描述】:

这个答案似乎正是我需要的,但是对于回归器而不是分类器。 https://stackoverflow.com/a/46913459/9726897

我做了非常小的修改来修改来自链接的 sascha 提供的代码,如下所示。我认为将它用于我的 MLPRegressior 会相当简单......但我收到一条错误消息,我不知道如何修复任何帮助将不胜感激:

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


estimator_reg = MLPRegressor(
    solver='adam',
    activation='relu',
    learning_rate='adaptive',
    learning_rate_init=.01,
    hidden_layer_sizes=[100],
    alpha=0.01,
    max_iter=1000,
    random_state=42,
    tol=0.0001,
    early_stopping=False,
    warm_start=True,
    beta_1=0.7,
    beta_2=0.98,
    epsilon=0.0000000001,
    verbose=10,
)

""" Home-made mini-batch learning
    -> not to be used in out-of-core setting!
"""
N_TRAIN_SAMPLES = train_data.shape[0]
N_EPOCHS = 25
N_BATCH = 128


scores_train = []
scores_test = []

# EPOCH
epoch = 0
while epoch < N_EPOCHS:
    print('epoch: ', epoch)
    # SHUFFLING
    random_perm = np.random.permutation(train_data.shape[0])
    mini_batch_index = 0
    while True:
        # MINI-BATCH
        indices = random_perm[mini_batch_index:mini_batch_index + N_BATCH]
        estimator_reg.partial_fit(train_data[indices], train_labels[indices])
        mini_batch_index += N_BATCH

        if mini_batch_index >= N_TRAIN_SAMPLES:
            break

    # SCORE TRAIN
    scores_train.append(estimator_reg.score(train_data, train_labels))

    # SCORE TEST
    scores_test.append(estimator_reg.score(test_data, test_labels))

    epoch += 1

""" Plot """
fig, ax = plt.subplots(2, sharex=True, sharey=True)
ax[0].plot(scores_train)
ax[0].set_title('Train')
ax[1].plot(scores_test)
ax[1].set_title('Test')
fig.suptitle("Accuracy over epochs", fontsize=14)
plt.show()

我得到这个错误:
KeyError Traceback(最近一次调用最后一次)
在 ()
---> 46 estimator_reg.partial_fit(train_data[indices], train_labels[indices])
.......
.......
KEYERROR:'[789 1493 353 33 1011 2029 1696124191211911191412141C1212121191 \ n 141 1168 1249 159 2061 2456 431 1799 2249 2379 1169 1044 1010 120 \ n 2503 316 1070 671 1005 2164 975 2371 811 1555 1193 1316 487 1867 \ n 1262 1395 135 2224 32 1509 2132 997 263 233 1614 2317 1432 49 \ n 12512012121818C12121818C181858 ] 不在索引中'

【问题讨论】:

  • 您的列车数据类型是什么?它是一个numpy数组吗?一个熊猫数据框?
  • 这是一个熊猫数据框。
  • 我猜您的索引不在范围 (0,N_TRAIN_SAMPLES) 内。如果您删除或过滤了某些行,则可能会发生这种情况。尝试将此行 random_perm = np.random.permutation(train_data.shape[0]) 更改为此 random_perm = np.random.permutation(train_data.index.values)
  • 那是问题 准 - 谢谢!!
  • 我会添加一个答案,以便您接受它:)

标签: scikit-learn training-data loss-function


【解决方案1】:

我猜您的索引不在 (0,N_TRAIN_SAMPLES) 范围内。
如果您删除或过滤了某些行,或者从开头包含的索引中的某些数字不在该范围内,则可能会发生这种情况。

尝试更改此行:

random_perm = np.random.permutation(train_data.shape[0])

进入这个:

random_perm = np.random.permutation(train_data.index.values)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2018-01-30
    • 2019-01-23
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    相关资源
    最近更新 更多