如何使用MLP分类器Sklearn在神经网络中使用自定义损失函数



我想在scikit-learn中使用自定义损失函数来训练神经网络;使用MLPC分类器。我想更加重视更大的价值观。因此,我想使用类似于均方误差的东西,但将分子乘以y。因此,它看起来像:

1/n∑y(yi-y(hat(i(^2

这是我的型号代码:

mlp10 = MLPClassifier(hidden_layer_sizes=(150,100,50,25,10), max_iter=1000, 
random_state=42)
mlp10.fit(X_train, y_train)

如何修改损失函数?

我不认为您可以直接修改loss函数,因为在分类器的构造中没有用于它的参数,并且文档明确指定它正在使用log loss函数进行优化。如果你愿意灵活一点,你可以在训练前简单地对y值进行变换,然后在测试后使用逆变换来恢复预测的ys,从而获得你想要的效果。

例如,在将transforminverse_transform定义为的每个值上映射y_prime = transform(y)y = inverse_transform(y_prime)

def transform(y):
return y ** 2
def inverse_transform(y_prime):
return math.sqrt(y_prime)

将导致CCD_ 7的较大值在训练中具有更大的影响。显然,您可以尝试不同的转换,看看什么最适合您的用例。关键是要确保transform是超线性的。

在训练之前,你需要做:

y_train = map(transform, y_train)

并且在调用predict:之后

y_predict = model.predict(x)
y_predict = map(inverse_transform, y_predict)

最新更新