使用Scikit-learn实现自定义损失函数

2024-06-11 08:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在scikit learn中实现一个自定义的丢失函数。我使用以下代码片段:

def my_custom_loss_func(y_true,y_pred):
   diff3=max((abs(y_true-y_pred))*y_true)
   return diff3

score=make_scorer(my_custom_loss_func,greater_ is_better=False)
clf=RandomForestRegressor()
mnn= GridSearchCV(clf,score)
knn = mnn.fit(feam,labm) 

传递给my_custom_loss_func的参数是什么?我的标签矩阵叫做labm。我想计算实际产量和预测产量(按模型)乘以实际产量的差额。如果我用labm代替y_true,我应该用什么来代替{}?在


Tags: 函数truemycustomscikitlearnfuncscore
3条回答

make\u scorer的文档如下所示:

sklearn.metrics.make_scorer(score_func, greater_is_better=True, needs_proba=False, 
needs_threshold=False, **kwargs)

所以,它不需要你在调用函数时传递参数。 这就是你要问的吗?在

好吧,这里有三件事:

1)在用于调整模型参数的培训期间,存在一个损失函数

2)有一个评分函数,用于判断您的模型的质量

3)超参数调节,使用评分函数优化超参数。在

所以。。。如果您试图调整超参数,那么您在为此目的定义“loss fxn”时是正确的。但是,如果您试图调整整个模型,使其在召回测试中表现良好,那么您需要一个召回优化器作为培训过程的一部分。这很棘手,但你可以做到。。。在

1)打开分级机。让我们用一个RFC为例:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

2)点击[source]

3)看看它是如何从ForestClassifier继承的?就在类定义中。单击该单词可跳转到其父定义。在

4)看看这个新对象是如何从ClassifierMixin继承的?点击那个。在

5)看看ClassifierMixin类的底部是怎么说的?在

from .metrics import accuracy_score
return accuracy_score(y, self.predict(X), sample_weight=sample_weight)

那是你的模型在训练精确性。如果你想把你的模型训练成一个“召回模型”或“精确模型”或其他任何模型,你需要在这一点上注入。这个精度指标被放入SKlearn。总有一天,一个比我更好的人会把这个参数作为一个模型可以接受的参数,但是与此同时,你必须进入你的sklearn安装,并调整这个准确度_分数,以达到任何你想要的。在

祝你好运!在

“我的自定义”函数丢失的参数与真正的标签没有任何联系,它是labm。你可以保持现在的样子。在

在内部GridSearchCV将调用评分函数,因此您的真实标签不存在冲突。y_pred将是由模型输出生成的预测值。y_true将被赋予labm的值。在

相关问题 更多 >