代码之家  ›  专栏  ›  技术社区  ›  Eric J.

多类分类标签为字符串类型时出错

  •  0
  • Eric J.  · 技术社区  · 5 年前

    我刚刚从ml.net开始,发现自己被基于各种api版本的api和示例的快速发展弄糊涂了。

    我的目标是读入几个数字特征列和一个指定标签(“brand”)的文本列,但在这段代码的最后一行出现错误

    var trainingDataView = mlContext.Data.ReadFromTextFile<PurchaseData>
        (path: trainDataPath, hasHeader: true, separatorChar: ',');
    
    var dataProcessPipeline = mlContext.Transforms
        .Concatenate(DefaultColumnNames.Features,
                                    nameof(PurchaseData.AgeBracket),
                                    nameof(PurchaseData.Gender),
                                    nameof(PurchaseData.IncomeBracket),
                                    )                               
        .Append(mlContext.Transforms.CopyColumns("Label", nameof(PurchaseData.Brand)))
        .AppendCacheCheckpoint(mlContext);
    
    var trainer = mlContext.MulticlassClassification.Trainers
        .StochasticDualCoordinateAscent(featureColumn: DefaultColumnNames.Features);
    var trainingPipeline = dataProcessPipeline.Append(trainer);
    
    var trainedModel = trainingPipeline.Fit(trainingDataView);
    

    “label列的架构不匹配”:应为float、double或keytype,get text”

    为什么标签不应该/不允许是文本,我可以做些什么来修复它?

    0 回复  |  直到 5 年前
        1
  •  1
  •   amy8374    5 年前

    您需要将标签转换为密钥类型,算法需要数字作为输入。 替换: .Append(mlContext.Transforms.CopyColumns("Label", nameof(PurchaseData.Brand)))

    用:

    mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: DefaultColumnNames.Label,inputColumnName:nameof(PurchaseData.Brand))

    看看这个,例如: https://github.com/dotnet/machinelearning-samples/blob/master/samples/csharp/end-to-end-apps/MulticlassClassification-GitHubLabeler/GitHubLabeler/GitHubLabelerConsoleApp/Program.cs

    推荐文章