Ошибка, когда метка классификации мультикласса является строкой типа

Я только начинаю с 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);

"Несоответствие схемы для столбца метки" Метка ": ожидаемое число с плавающей запятой, двойное или тип ключа, получено текстовое"

Почему ярлык не ожидается / не может быть текстом и что я могу сделать, чтобы это исправить?

1 ответ

Решение

Вам нужно будет преобразовать вашу метку в тип ключа, для алгоритмов нужны числа в качестве входных данных. Заменить:.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

Другие вопросы по тегам