微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sklearn中DecisionTreeRegressor的自定义标准

如何解决sklearn中DecisionTreeRegressor的自定义标准

我想使用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)

但是,如果您详细查看代码,则会发现所有关于权重的变量都是“一个权重集”,这与任务无关。

因此,要进行自定义,您可能需要破解很多代码,包括:

  1. 破解fit函数以接受二维权重数组 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_classes.py#L142

  2. 通过检查(否则继续破解...)

  3. 修改树构建器以允许权重 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_tree.pyx#L111 太糟糕了,相关变量很多,您应该将double更改为double *

  4. 修改Criterion类以接受二维权重数组 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_criterion.pyx#L976

  5. 在初始化,重置和更新中,必须保留特定于输出(任务)的属性,例如self.weighted_n_node_samples。

TBH,我认为这真的很难实施。也许我们需要为scikit-learn组提出一个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。