我想在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
值进行变换,然后在测试后使用逆变换来恢复预测的y
s,从而获得你想要的效果。
例如,在将transform
和inverse_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)