0

我刚从 ML.Net 开始,发现自己对基于各种 API 版本的 API 和示例的快速发展感到困惑。

我的目标是读取几个数字特征列和一个指定标签(“品牌”)的文本列,但我在这个片段的最后一行收到错误

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' 的架构不匹配:预期的浮点数、双精度或 KeyType,得到文本'

为什么标签不期望/不允许是文本,我该怎么做才能修复它?

4

1 回答 1

3

您需要将标签转换为键类型,算法需要数字作为输入。代替: .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

于 2019-02-13T21:56:14.503 回答