我目前正在使用一个简单的预测系统,在该系统中,向用户询问一系列是/否问题,并根据他们的回答,预先训练的模型(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]])
答案 0 :(得分:1)
mlp.coefs_
为您提供了一个列表,其中ith
元素表示与图层i
相对应的 权重矩阵 。 / p>
此外,mlp.intercepts_
为您提供了一个列表,其中ith
元素表示与图层i + 1
相对应的 bias向量 。
因此您可以尝试看看这些属性是否可更改。