sklearn 中 DecisionTreeRegressor 的自定义标准
Custom Criterion for DecisionTreeRegressor in sklearn
我想使用 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
可能的解决方案是创建一个标准 class 模仿 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_criterion.pyx#L976
中的现有标准(例如 MAE)
但是,如果你仔细看代码,你会发现所有关于权重的变量都是“one weight-set”,不针对任务。
所以要自定义,您可能需要破解很多代码,包括:
破解拟合函数以接受二维权重数组
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*
修改条件 class 以接受二维权重数组
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_criterion.pyx#L976
在初始化、重置和更新中,您必须保留 self.weighted_n_node_samples 特定于输出(任务)的属性。
TBH,我觉得真的很难实现。也许我们需要为 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
可能的解决方案是创建一个标准 class 模仿 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_criterion.pyx#L976
中的现有标准(例如 MAE)但是,如果你仔细看代码,你会发现所有关于权重的变量都是“one weight-set”,不针对任务。
所以要自定义,您可能需要破解很多代码,包括:
破解拟合函数以接受二维权重数组 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*
修改条件 class 以接受二维权重数组 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_criterion.pyx#L976
在初始化、重置和更新中,您必须保留 self.weighted_n_node_samples 特定于输出(任务)的属性。
TBH,我觉得真的很难实现。也许我们需要为 scikit-learn 组提出一个问题。