【问题标题】:Customising loss functions in scikit learn在 scikit learn 中自定义损失函数
【发布时间】:2019-06-13 00:47:08
【问题描述】:

如何在 scikit learn 中自定义损失函数?例如,我想使用 MSE 乘以样本的真实值,而不是使用均方误差。我使用了以下代码sn-p:

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

clf=RandomForestRegressor(criterion=my_custom_loss_func)
knn=clf.fit(feam,labm)

我收到以下错误:

KeyError: <function my_custom_loss_func at 0x000000002EA9CA60>

【问题讨论】:

  • @franco piccolo 传递给 my_custom_loss_func 的参数应该是什么? scikit learn 中是否预定义了 y_pred 和 y_true?我的标签矩阵是labm。如果我用labm代替y_true,我应该用什么代替y_pred?

标签: python python-3.x machine-learning scikit-learn loss-function


【解决方案1】:

您可以在 scikit learn 中自定义损失函数,为此您需要将 make_scorer 工厂应用于您的自定义损失函数,例如:

from sklearn.metrics import make_scorer
score = make_scorer(my_custom_loss_func, greater_is_better=False)

在您使用随机森林的特定情况下,尽管您无法自定义标准,但您可以做的是使用 GridSearchCV 优化超参数,然后您可以使用自定义损失。

【讨论】:

  • 你确定吗?我认为这只是 RandomForestRegressor 不接受自定义标准..
  • 没错,我只是笼统地回答了,现在我为他的特殊情况建议了 GridSearchCV。
  • make_scorer 工厂用于自定义指标(可能是潜在的损失函数)。我认为区分 (metric / loss ) 很重要,我会说在 scikit-learn 上您很少能轻松使用自定义损失函数(如果您触摸源代码除外),但您可以使用超参数搜索自定义指标。
  • 记分器和损失函数不同,所以这不是 OP 的答案
  • @FrancoPiccolo 传递给自定义损失函数的参数应该是什么? scikit learn 中是否预定义了 y_true 和 y_pred?我的标签矩阵被命名为“labm”。如果我用它代替 y_true,我应该用什么代替 y_pred?
猜你喜欢
  • 2019-06-13
  • 2018-07-06
  • 2021-01-23
  • 2014-10-24
  • 2020-12-19
  • 2017-04-04
  • 2017-12-18
  • 2020-03-27
  • 2020-11-16
相关资源
最近更新 更多