首页 > 解决方案 > ML.net 中多类多标签分类的每类加权损失

问题描述

我想对几个类进行分类,比如说 A、B、C 和 D,但数据集是不平衡的(A 类可以有 60% 的案例)。因此,ML.NET 中的多类分类算法倾向于预测 A.

这种不平衡的情况在我的问题的人群中很常见:A比其他人更频繁,B比C更频繁,C比D更频繁。现在,我对上/下采样不感兴趣数据集或增加数据集的大小来解决这个问题(除非没有其他选择)。

在我的问题中,成功预测 B 比预测 A 更有价值,预测 C 比 B 更有价值,预测 D 比 C 更有价值。所以我有兴趣按顺序给予 B、C 和 D 类更多的权重告诉算法承担更多风险并尝试预测其他类别。

但是我在 ML.Net 中找不到方法。我知道它可以用损失函数来完成,但没有太多关于它的信息,我在 ML.net 中找不到任何示例。我尝试实现自定义损失函数(类 CustomLoss:ISupportSdcaClassificationLoss、ISupportSdcaLoss、IScalarLoss、ILossFunction<float、float>、IClassificationLoss)并尝试将其注入(MulticlassClassification.Trainers.SdcaNonCalibrated)但没有成功,因为基本事实始终为 1 (它不代表真值类,所以我不知道我在计算哪个类)

有什么想法可以用 ML.net 解决这个问题吗?如果没有,C# 中是否有一些好的替代 ML.net 来解决这个问题?

标签: machine-learningml.net

解决方案


试试 Tensorflow.NET 作为一个很好的选择https://github.com/SciSharp/TensorFlow.NET


推荐阅读