我想在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
,我应该用什么来代替{
make\u scorer的文档如下所示:
所以,它不需要你在调用函数时传递参数。 这就是你要问的吗?在
好吧,这里有三件事:
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类的底部是怎么说的?在
那是你的模型在训练精确性。如果你想把你的模型训练成一个“召回模型”或“精确模型”或其他任何模型,你需要在这一点上注入。这个精度指标被放入SKlearn。总有一天,一个比我更好的人会把这个参数作为一个模型可以接受的参数,但是与此同时,你必须进入你的sklearn安装,并调整这个准确度_分数,以达到任何你想要的。在
祝你好运!在
“我的自定义”函数丢失的参数与真正的标签没有任何联系,它是
labm
。你可以保持现在的样子。在在内部GridSearchCV将调用评分函数,因此您的真实标签不存在冲突。
y_pred
将是由模型输出生成的预测值。y_true
将被赋予labm
的值。在相关问题 更多 >
编程相关推荐