如何在带有MLPClassifier Sklearn的神经网络中使用自定义损失函数?

时间:2018-11-29 04:17:24

标签: python scikit-learn neural-network loss-function

我想使用自定义损失函数在scikit学习中训练神经网络;使用MLPClassifier。我想更加重视更大的价值观。因此,我想使用诸如均方误差之类的方法,但将分子乘以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)

如何修改损失函数?

1 个答案:

答案 0 :(得分:0)

我不认为您可以直接修改损失函数,因为在分类器的构造中没有参数,documentation明确指定它正在使用对数损失函数进行优化。如果您愿意灵活一点,则可以通过在训练之前对y值进行转换,然后使用逆变换来恢复预测的{{测试后的1}} s。

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

inverse_transform

将导致更大的def transform(y): return y ** 2 def inverse_transform(y_prime): return math.sqrt(y_prime) 值对训练产生更大的影响。显然,您可以尝试不同的转换,以查看哪种方法最适合您的用例。关键只是确保y是超线性的。

在训练之前,您需要做的事情:

transform

在致电y_train = map(transform, y_train) 之后:

predict