ML.NET 中的多标签分类

Multilabel classification in ML.NET

我希望使用 ML.NET 实现多标签分类。我读过几篇文章,它们说直接不可能,而是通过将问题转换为多个二元分类问题来进行问题转换。 所以基本上如果我的数据集有 n 标签,我将需要创建 n 分类器。我试图通过明智地拆分数据集标签来做到这一点。但是 fit 方法抛出以下异常。对于给定标签的所有条目,我将标签列的值作为 1 传递。

System.ArgumentOutOfRangeException: 'Must be at least 2. Parameter name: numClasses'

这可以通过添加带有特定标签的条目作为 1 和所有其他条目作为 0 来解决,但是由于每个标签的条目数量较少,我认为这会稀释学习并可能导致准确性降低。

有人可以建议使用 ML.NET 实现多标签分类的任何其他方法吗?

创建 N 个布尔值列。命名模式示例:Label01、Label02、...LabelNN。

训练管道,添加N组:(每个布尔标签一组)

.Append(mlContext.BinaryClassification.Trainers.LightGbm(labelColumnName: "Label01", featureColumnName: "Features"))
.Append(mlContext.Transforms.CopyColumns("Score01", "Score")) // Copy to a unique name so the following models won't shadow (replace) the column. PredictedLabel column can also be saved.              

.Append(mlContext.BinaryClassification.Trainers.LightGbm(labelColumnName: "Label02", featureColumnName: "Features"))
.Append(mlContext.Transforms.CopyColumns("Score02", "Score"))

...

.Append(mlContext.BinaryClassification.Trainers.LightGbm(labelColumnName: "LabelNN", featureColumnName: "Features"))
.Append(mlContext.Transforms.CopyColumns("ScoreNN", "Score"))  

然后照常调用.fit()。管道中的所有模型都将适合。然后您可以访问每个 ScoreXX 列以获得每个 class.

的分数

要评估每个模型的质量,您可以根据每个得分列及其输入的 LabelXX 列创建指标。