kro*_*ike 8 python machine-learning scikit-learn
我想知道是否有办法在sklearn/python中指定自定义成本函数?我的真正问题有7个不同的类,但为了使它更清楚,我们假设我想为3个不同类的问题指定错误分类的不同成本,我主要感兴趣的是我的模型将正确区分1类和3类.
所以惩罚矩阵看起来如下:
Class 1 Class 2 Class 3
Class 1 0 1 2
Class 2 1 0 1
Class 3 2 1 0
Run Code Online (Sandbox Code Playgroud)
我假设sklearn中的'class_weight'参数执行类似但接受字典而不是矩阵.传递class_weight = {1:2,1:1,1:2}只会增加错误分类1级和3级的权重,但是,我希望我的模型在选择1级时真正获得更大的惩罚,真正的类是3级,反之亦然.
是否有可能在sklearn中做这样的事情?可能是其他一些库/学习算法允许不等的错误分类成本?
首先,在 sklearn 中无法使用自定义损失来训练模型。但是,您可以实现自己的评估函数并调整模型的超参数来优化该指标。
其次,您可以使用神经网络优化任何自定义损失,例如使用 Keras。但为了这个目的,你的函数应该是平滑的。首先想到的是加权交叉熵。在这次讨论中,人们正在研究这个函数的实现。
第三,您自己的问题的结构表明类标签的顺序才是真正重要的。如果是这种情况,您可以尝试有序逻辑回归(其实现示例)。
此外,在你的问题中,成本恰好是sum(abs(predicted-fact))。因此,如果您不需要概率预测,您可以简单地使用优化 MAE 的回归器(例如具有“epsilon_insensitive”损失的 SGDRegressor 或具有 mae 标准的 DecisionTreeRegressor)。求解回归后,您只需找到优化成本函数的阈值。
| 归档时间: |
|
| 查看次数: |
1258 次 |
| 最近记录: |