在scikit学习中实现自定义丢失功能



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

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,我应该用什么代替y_pred

好吧,这里有三件事:

1) 训练时有一个损失函数,用于调整你的模型参数

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

3) 有超参数调整,它使用评分函数来优化您的超参数。

所以。。。如果你试图调整超参数,那么你就在正确的轨道上定义了一个"损失fxn"。然而,如果您正试图调整整个模型,使其在召回测试中表现良好,那么您需要一个召回优化器来参与培训过程。这很棘手,但你可以做到…

1) 打开分类器。让我们以RFC为例:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

2) 点击[来源]

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

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

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

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

这就是你的模型在准确性方面的训练。如果你想把你的模型训练成"召回模型"、"精度模型"或任何模型,你就需要在这一点上注入。这一准确性指标已融入SKlearn。总有一天,一个比我更好的人会让这个参数成为模型可以接受的参数,但与此同时,你必须进入你的sklearn安装,并将这个精度_核心调整为你想要的任何值。

祝你好运!

make_scorer的文档如下:

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

因此,它不需要您在调用函数时传递参数。这是你问的吗?

my_custom_fonc_loss的参数与真正的标签labm没有任何联系。你可以保持现在的方式。

内部GridSearchCV将调用评分函数,因此您的真实标签不会在那里发生冲突。y_pred将是根据模型的输出生成的预测值。CCD_ 8将被分配有CCD_ 9的值。

相关内容

  • 没有找到相关文章

最新更新