python - 在 scikit learn 中实现自定义损失函数

标签 python machine-learning scikit-learn data-science gridsearchcv

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

最佳答案

好的,这里发生了 3 件事:

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

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

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

所以...如果您尝试调整超参数,那么您为此目的定义“loss 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)

这是您的模型正在接受准确性训练。如果您想将模型训练为“召回模型”或“精确模型”或任何模型,则需要在此时进行注入(inject)。该准确度指标已融入 SKlearn 中。有一天,一个比我更好的人会将这个参数设置为模型接受的参数,但与此同时,你必须进入你的 sklearn 安装,并将这个 precision_score 调整为你想要的任何值。

祝你好运!

关于python - 在 scikit learn 中实现自定义损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54267745/

相关文章:

python - tensorflow 推理时的批量归一化

machine-learning - 使用 Weka 进行无监督聚类

python - 如何在Python(相当于R)中打印SVM的摘要?

python - 使用 scikit 决策树进行多输出分类

python - 从段落中提取热字符之间的多个字符串

python - 在 Python 中使用卡住数据类时如何使用属性 setter

Python Azure Web作业传递参数

python - 多处理2个不同的函数python3

machine-learning - TFLearn 模型评估

python - 相同的 Python 代码,相同的数据,不同机器上的结果不同