Я могу динамически обучать и создавать свою регрессионную модель очень хорошо из string[]
имен столбцов.Однако, когда я пытаюсь передать динамический объект с теми же именами параметров, что и свойства пары ключей словаря, он выдает ошибку:
System.ArgumentOutOfRangeException: 'Could not find input column '<MyColumn>''
Где <MyColumn>
- первый параметр, который ищет модель.
private static void TestSinglePrediction(MLContext mlContext, dynamic ratingDataSample, int actual)
{
ITransformer loadedModel;
using (var stream = new FileStream(_modelPath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
loadedModel = mlContext.Model.Load(stream);
}
var predictionFunction = loadedModel.MakePredictionFunction<dynamic, RatingPrediction>(mlContext);
var prediction = predictionFunction.Predict(ratingDataSample);
Console.WriteLine($"**********************************************************************");
Console.WriteLine($"Predicted rating: {prediction.Rating:0.####}, actual rating: {actual}");
Console.WriteLine($"**********************************************************************");
}
Я подозреваю, что это потому, что динамический объект не содержит атрибутов [Column]
, которые есть у стандартного объекта класса, который я обычно передаю.
Однако в конечном итоге я получусотни столбцов, которые автоматически генерируются путем транспонирования SQL-запросов, поэтому ручная ввод каждого столбца не является подходящим подходом в будущем.
Можно ли как-нибудь применить атрибут во время выполнения?Или каким-то другим способом я могу в общих чертах подойти к этой ситуации?Спасибо!