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 列创建指标。
我希望使用 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 列创建指标。