![](/img/trans.png)
[英]Use sklearn.neural_network.MLPClassifier with ndarray of csr_matrices
[英]How to use a custom loss function in a Neural Network with MLPClassifier Sklearn?
我想使用自定义损失函数在scikit学习中训练神经网络; 使用MLPClassifier。 我想更加重视更大的价值观。 因此,我想使用诸如均方误差之类的方法,但将分子乘以y。 因此,它看起来像:
1 /nΣy(YI-γ(帽)ⅰ)^ 2
这是我模型的代码:
mlp10 = MLPClassifier(hidden_layer_sizes=(150,100,50,25,10), max_iter=1000,
random_state=42)
mlp10.fit(X_train, y_train)
如何修改损失函数?
我不认为您可以直接修改损失函数,因为在分类器的构造中没有针对它的参数,并且文档中明确指定使用对数损失函数进行优化。 如果您愿意灵活一点,则可以通过在训练之前对y
值进行变换,然后在测试后使用逆变换来恢复预测的y
s来简单地获得所需的效果。
例如,将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
:
y_predict = model.predict(x)
y_predict = map(inverse_transform, y_predict)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.