gri*_*ldi 6 python regression machine-learning decision-tree scikit-learn
我想使用 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
潜在的解决方案是创建一个模仿现有标准类(例如 MAE)的https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_criterion.pyx#L976
然而,如果你仔细查看代码,你会发现所有关于权重的变量都是“一个权重集”,这对于任务来说是不特定的。
因此,要进行定制,您可能需要破解大量代码,包括:
破解 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 这太糟糕了,有很多相关变量,你应该将双倍更改为双倍*
修改 Criterion 类以接受二维权重数组 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_criterion.pyx#L976
在 init、reset 和 update 中,您必须保留特定于输出(任务)的属性,例如 self.weighted_n_node_samples。
说实话,我认为实施起来确实很难。也许我们需要向 scikit-learn 小组提出一个问题。
| 归档时间: |
|
| 查看次数: |
2712 次 |
| 最近记录: |