我想使用自定义损失函数在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)
如何修改损失函数?
答案 0 :(得分:0)
我不认为您可以直接修改损失函数,因为在分类器的构造中没有参数,documentation明确指定它正在使用对数损失函数进行优化。如果您愿意灵活一点,则可以通过在训练之前对y
值进行转换,然后使用逆变换来恢复预测的{{测试后的1}} s。
例如,将y
和y_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