gpt4 book ai didi

python - sklearn 中 DecisionTreeRegressor 的自定义标准

转载 作者:行者123 更新时间:2023-12-04 15:18:17 70 4
gpt4 key购买 nike

我想使用 DecisionTreeRegressor 进行多输出回归,但我想为每个输出使用不同的“重要性”权重(例如,准确预测 y1 的重要性是预测 y2 的两倍)。
有没有办法将这些权重直接包含在 sklearn 的 DecisionTreeRegressor 中?如果没有,如何为 sklearn 中的每个输出创建一个具有不同权重的自定义 MSE 标准?

最佳答案

恐怕你合身只能提供一套配重
https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html#sklearn.tree.DecisionTreeRegressor.fit
更令人失望的是,由于只允许一个权重集,所以 sklearn 中的算法都是关于一个权重集。
至于自定义标准:
scikit-learn 中也有类似的问题
https://github.com/scikit-learn/scikit-learn/issues/17436
潜在的解决方案是创建一个标准类来模仿 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_criterion.pyx#L976 中的现有标准类(例如 MAE)。
但是,如果您详细查看代码,您会发现所有关于权重的变量都是“一个权重集”,这与任务无关。
所以要自定义,你可能需要破解很多代码,包括:

  • 破解 fit 函数以接受二维权重数组
    https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_classes.py#L142
  • 绕过检查(否则继续破解...)
  • 修改树生成器以允许权重
    https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_tree.pyx#L111
    太可怕了,有很多相关的变量,你应该把double改成double*
  • 修改 Criterion 类以接受二维权重数组
    https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_criterion.pyx#L976
  • 在 init、reset 和 update 中,您必须保留特定于输出(任务)的属性,例如 self.weighted_n_node_samples。

  • TBH,我觉得真的很难实现。也许我们需要为 scikit-learn 小组提出一个问题。

    关于python - sklearn 中 DecisionTreeRegressor 的自定义标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63925403/

    70 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com