Scikit learn 如何获得MLPREGESSOR每次迭代的训练和测试分数?

Scikit learn 如何获得MLPREGESSOR每次迭代的训练和测试分数?,scikit-learn,training-data,loss-function,Scikit Learn,Training Data,Loss Function,这个答案似乎正是我所需要的,但对于回归器而不是分类器来说。 我对link中sascha提供的代码做了非常小的修改,如下所示。我认为这将是相当简单的使用我的MLPregestor。。。但我收到一条错误消息,我不知道如何修复。非常感谢您的帮助: import numpy as np import matplotlib.pyplot as plt from sklearn.neural_network import MLPRegressor estimator_reg = MLPRegresso

这个答案似乎正是我所需要的,但对于回归器而不是分类器来说。

我对link中sascha提供的代码做了非常小的修改,如下所示。我认为这将是相当简单的使用我的MLPregestor。。。但我收到一条错误消息,我不知道如何修复。非常感谢您的帮助:

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()
将numpy导入为np
将matplotlib.pyplot作为plt导入
从sklearn.neural_网络导入MLPREGESSOR
估计器_reg=MLPREGESSOR(
“亚当”,
激活='relu',
学习率=‘自适应’,
学习率初始=0.01,
隐藏层大小=[100],
α=0.01,
最大电阻=1000,
随机状态=42,
tol=0.0001,
提前停止=错误,
warm_start=True,
β1=0.7,
β2=0.98,
ε=0.0000000001,
详细=10,
)
“自制小批量学习”
->不可用于堆芯外设置!
"""
N_TRAIN_SAMPLES=TRAIN_data.shape[0]
N_时代=25
N_批次=128
分数_train=[]
考试分数=[]
#纪元
历元=0
而纪元=N列样本:
打破
#计分火车
分数\序列附加(估计器\注册分数(序列数据、序列标签))
#分数测试
分数\测试附加(估计器\注册分数(测试数据、测试标签))
历元+=1
“绘图”
图,ax=plt.子批次(2,sharex=True,sharey=True)
ax[0]。绘图(分数线)
ax[0]。设置标题(“列车”)
ax[1]。绘图(分数测试)
ax[1]。设置标题(“测试”)
图suptitle(“各时代的准确度”,fontsize=14)
plt.show()
我得到这个错误:
KeyError回溯(最近一次呼叫上次)
in()
--->46估计器调整部分拟合(序列数据[指数]、序列标签[指数])
....
....

KeyError:'[789 1493 353 33 1011 2029 1696 1649 653 1648 22 2477 2120 1000\n 2481 2448 1704 1962 2291 1995 2085 710 967 1839 461 504 1650 2166\n 584 513 676 1196 1621 2109 766 2012 1017 1636 1286 448 2049 1791\n 141 1168 1249 159 2061 2456 431 1799 2249 2379 1169 1044 1010 120\n 2503 316 1070 671 1005 21645 2371 815 1193 1316487 1867\n 1262 1395 135 2224 32 1509 2132 997 263 233 1614 2317 1432 49\n 1251 2227 2536 1955 359 650 2287 792 1900 606 763 1837 742 965\n 1190 53 910 2486 738 103 1965 99 1084 123 1061 806 384 2261\n 2284 2114 360 1075 1479 1445 2294 221 1856 979 1078 2106 189\n 2153 1183]不在索引“

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

尝试更改此行:

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

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

列车数据的类型是什么?它是numpy数组吗?熊猫数据帧吗?它是熊猫数据帧。我猜您的索引不在范围内(0,N\u列车\u样本)。如果删除或筛选某些行,可能会发生这种情况。请尝试更改此行
random\u perm=np.random.permutation(列车\u数据.shape[0])
进入这个
random\u perm=np.random.permutation(train\u data.index.values)
。这就是问题所在-谢谢!!我会添加一个答案,这样你就可以接受:)