c# - ML.NET 中的多标签分类
问题描述
我希望使用 ML.NET 实现多标签分类。我读了几篇文章说这是不可能的,而是通过将问题转换为多个二进制分类问题来实现的。所以本质上,如果我的数据集有标签,我将需要创建n
分类器。n
我试图通过明智地拆分我的数据集标签来做到这一点。但是fit
方法抛出异常。我正在传递标签列的值,就像1
给定标签的所有条目一样。
System.ArgumentOutOfRangeException:'必须至少为 2。参数名称: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 列以获取每个班级的分数。
要评估每个模型的质量,您可以从每个分数列与它们的输入 LabelXX 列创建指标。
推荐阅读
- objective-c - 在后台线程中保存数据不起作用
- python - 无法将视频转换为灰度
- python - 无法与 Eel 一起使用窗口大小和应用程序选项
- javascript - 如何阻止 Javascript 将我的日期转换为部门?
- css - 相同的 16kb genericons.css 文件在移动设备上的运行速度怎么会比桌面设备慢得多?我能做些什么呢?
- javascript - 允许移动用户滑动滑块
- xslt-2.0 - 动态替换给定数据中的子字符串(XML 到固定长度)
- django - 我如何在一个页面中显示用户帖子,同时用户可以在他们的页面中看到其他帖子?喜欢 Facebook 的工作方式吗?
- php - 从数据库中获取数据并匹配静态数组
- php - Laravel:仅为相关模型加载嵌套关系