是否有可能在sklearn中使用针对不同错误具有不同成本的成本矩阵来训练分类器?例如,在一个2类问题中,成本矩阵将是一个2乘2的方阵。例如,A_ij =将i分类为j的成本。
我使用的主要分类器是随机森林。
谢谢。
发布于 2014-08-01 14:15:04
您描述的成本敏感框架在scikit-learn中不受支持,在我们拥有的任何分类器中都不支持。
发布于 2018-09-06 22:24:20
您可以使用接受每个类或每个实例成本矩阵的自定义scoring function。以下是计算每个实例的错误分类成本的记分器的示例:
def financial_loss_scorer(y, y_pred, **kwargs):
import pandas as pd
totals = kwargs['totals']
# Create an indicator - 0 if correct, 1 otherwise
errors = pd.DataFrame((~(y == y_pred)).astype(int).rename('Result'))
# Use the product totals dataset to create results
results = errors.merge(totals, left_index=True, right_index=True, how='inner')
# Calculate per-prediction loss
loss = results.Result * results.SumNetAmount
return loss.sum()
得分者变成:
make_scorer(financial_loss_scorer, totals=totals_data, greater_is_better=False)
其中totals_data
是具有与训练集索引匹配的索引的pandas.DataFrame。
发布于 2015-08-01 07:35:41
你可以随时看看你的ROC曲线。ROC曲线上的每个点对应一个独立的混淆矩阵。因此,通过指定你想要的混淆矩阵,通过选择你的分类器阈值意味着某种类型的成本加权方案。然后,您只需选择混淆矩阵,该矩阵将隐含您正在寻找的成本矩阵。
另一方面,如果你真的用心去做,并且真的想用一个成本矩阵来“训练”一个算法,你可以在sklearn中“某种程度上”这样做。
虽然在sklearn中不可能直接训练一个对成本敏感的算法,但您可以使用成本矩阵之类的设置来调整您的超参数。我用遗传算法做过类似的事情。它确实做得不是很好,但它应该对性能有一定的促进作用。
https://stackoverflow.com/questions/25070910
复制相似问题