减轻错误预测班级的体重

时间:2018-11-16 22:00:51

标签: machine-learning scikit-learn neural-network

我目前正在使用一个简单的预测系统,在该系统中,向用户询问一系列是/否问题,并根据他们的回答,预先训练的模型(MLPClassifier)预测了一个类并询问用户是否预测是正确的。我不确定这是否可行,但是我希望然后更改预训练模型的权重(以某种在线学习的方式),以使网络(在该会话中)不会预测相同的权重下课。目前,我只是在字典中添加不良响应,如果网络预测该类已经列入黑名单,则将其忽略,但是我觉得必须有一个比这更好的方法!我的分类器代码是:

mlp = MLPClassifier(hidden_layer_sizes=(128,), max_iter=500, alpha=1e-4,
                    solver='sgd', verbose=10, tol=1e-4, random_state=1,
                    learning_rate_init=.1, )
x_train, x_test, y_train, y_test = train_test_split(df.values[:, 0:8], df.label_idx, test_size=0.33,
                                                    random_state=42)

预测的代码是:

def receive_input():
responses = []
bad_guesses = []
print("Answer questions (Yes/No) or enter END to make prediction")
count = 0
while count < len(questions):
    print(questions[count])
    response = input().lower().strip()
    if response == 'end':
        break
    elif response == 'yes':
        responses.append(1)
    elif response == 'no':
        responses.append(0)
    else:
        print('Invalid Input')
        continue
    count += 1

    padded_responses = np.pad(np.array(responses), (0, 8 - len(responses)), 'constant', constant_values=(0, -1))
    prob_pred = mlp.predict_proba(padded_responses.reshape(1, -1)).flatten()
    index = np.argmax(prob_pred)
    best_score = prob_pred[index]
    guess = labels[index]
    if best_score > 0.8 and guess not in bad_guesses:
        print('Early guess is: ' + labels[index] + ' is this right ? (Yes/No)')
        correct = input()
        if correct == 'Yes':
            break
        elif correct == 'No':
            bad_guesses.append(labels[index])

pred = mlp.predict(np.array(responses).reshape(1, -1))
print('Prediction is: ' + labels[pred[0]])

1 个答案:

答案 0 :(得分:1)

mlp.coefs_为您提供了一个列表,其中ith元素表示与图层i相对应的 权重矩阵 。 / p>

此外,mlp.intercepts_为您提供了一个列表,其中ith元素表示与图层i + 1相对应的 bias向量

因此您可以尝试看看这些属性是否可更改。