Ошибка, когда метка классификации мультикласса является строкой типа
Я только начинаю с 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