0

我是机器学习和 ML.Net 的新手(从编码和模型构建器的角度来看)。我编写了代码来训练和预测(针对我们的数据的相对简单的示例),但我认为最好使用模型构建器,因为它会选择合适的模型进行训练。

我在模型构建器中使用数据分类场景。我有一个成功训练的数据集(来自 SQL Server),但我想使用不同版本的数据集(相同的架构,不同的数据)。创建此其他数据集时,我现在收到错误消息“试用 0 遇到错误消息:必须至少为 2”,并且我无法找到有关该错误的任何信息。我已经比较了这两个数据集(列类型、空值、检查了高级数据选项以确保它们相同) - 训练的原始数据集和引发此异常的新数据集,除了数据之外它们似乎相同本身。

我甚至使用 Telerik JustDecompile 来查看 ML 代码(Microsoft.ML.Trainers - LinearMulticlassModelParametersBase)中的哪个位置抛出了这个错误。我知道有 2 种不同类型的数据分类场景 - 二进制和多类。我有一列定义为标签,应该是 1 或 0。

我很感激任何帮助。希望有人能指出我正确的方向。我一直在分析有效的数据集和无效的数据集 # 天并且找不到差异。即使模式相同,模型是否也会根据正在训练的实际数据使用不同的算法?

我将尝试通过代码使用这两个相同的数据集(不使用模型构建器)。

谢谢。汤姆

4

1 回答 1

0

您的标签列在原始数据集中有两个以上的类别吗?您的综合类培训师可能需要至少 3 个类别。

至于算法的选择,模型构建者使用 AutoML 类根据准确度指标选择一种。但是你可以在代码中尝试不同的。一旦您在代码中选择了一个,它将使用该特定算法。如果您使用模型构建器,您将获得不同的算法,具体取决于您提供的数据集。

例如,您可以从此更改您的管道:

var pipeline = ctx.Transforms.Text
.FeaturizeText("Features", nameof(SentimentIssue.Text))
.Append(ctx.BinaryClassification.Trainers
    .LbfgsLogisticRegression("Label", "Features"));    

对此:

var pipeline = ctx.Transforms.Text
.FeaturizeText("Features", nameof(SentimentIssue.Text))
.Append (ctx.BinaryClassification.Trainers
            .SdcaLogisticRegression();    

或者甚至只是再次通过模型构建器运行新数据,然后查看它选择了哪个训练器。

于 2021-10-06T12:52:31.583 回答