使用 Ml.net 包错误 "System.ArgumentOutOfRangeException"
Using Ml.net package error "System.ArgumentOutOfRangeException"
在使用 ML.net 打包时出现错误“System.ArgumentOutOfRangeException: 'Schema mismatch for feature column 'Features': expected Vector, got Vector
参数名称:inputSchema'" 在行 "var model = trainingPipeline.Fit(trainData);" 上被抛出。在理解错误时我不明白为什么它被代码
抛出
class Program
{
static void Main(string[] args)
{
MLContext mlcontext = new MLContext();
IDataView trainData = mlcontext.Data.LoadFromTextFile<ModelInput>("StockTrain.csv", separatorChar: ',', hasHeader: false);
var dataProcessPipeline = mlcontext.Transforms.Concatenate(outputColumnName: "Features", "age", "blPressure", "BiSkinthck", "NoPreg");
var trainer = mlcontext.Regression.Trainers.LightGbm(labelColumnName: "bmi", featureColumnName: "Features");
var trainingPipeline = dataProcessPipeline.Append(trainer);
var model = trainingPipeline.Fit(trainData);
IDataView testData = mlcontext.Data.LoadFromTextFile<ModelInput>("StockTest.csv", separatorChar: ',', hasHeader: false);
IDataView predictions = model.Transform(testData);
var metrics = mlcontext.Regression.Evaluate(predictions, "bmi");
//(0) (2) (3) (5) (7)
var input = new ModelInput //<4>,144,<58>,<28>,140,<29.5>,0.287,<37>,0
{
NoPreg = 4,
blPressure = 58,
BiSkinthck = 28,
age = 37
};
var result = mlcontext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(model).Predict(input);
Console.WriteLine($"Predicted bmi " + $"{result.bmi}");
}
public class ModelOutput
{
[ColumnName("Score")]
public int bmi;
}
public class ModelInput
{
[LoadColumn(0)]
public int NoPreg;
[LoadColumn(2)]
public int blPressure;
[LoadColumn(3)]
public int BiSkinthck;
[LoadColumn(5)]
public int bmi;
[LoadColumn(7)]
public int age;
}
}
正在使用的一些示例数据是:
6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
0,137,40,35,168,43.1,2.288,33,1
5,116,74,0,0,25.6,0.201,30,0
其中仅使用了部分数据。
您的数据中有一些小数;将您的 ModelInput 和 ModelOutput 更改为使用浮点数(此外,预测的分数是回归中的浮点数)
public class ModelOutput
{
[ColumnName("Score")]
public float bmi;
}
public class ModelInput
{
[LoadColumn(0)]
public float NoPreg;
[LoadColumn(2)]
public float blPressure;
[LoadColumn(3)]
public float BiSkinthck;
[LoadColumn(5)]
public float bmi;
[LoadColumn(7)]
public float age;
}
希望对您有所帮助!
在使用 ML.net 打包时出现错误“System.ArgumentOutOfRangeException: 'Schema mismatch for feature column 'Features': expected Vector, got Vector 参数名称:inputSchema'" 在行 "var model = trainingPipeline.Fit(trainData);" 上被抛出。在理解错误时我不明白为什么它被代码
抛出 class Program
{
static void Main(string[] args)
{
MLContext mlcontext = new MLContext();
IDataView trainData = mlcontext.Data.LoadFromTextFile<ModelInput>("StockTrain.csv", separatorChar: ',', hasHeader: false);
var dataProcessPipeline = mlcontext.Transforms.Concatenate(outputColumnName: "Features", "age", "blPressure", "BiSkinthck", "NoPreg");
var trainer = mlcontext.Regression.Trainers.LightGbm(labelColumnName: "bmi", featureColumnName: "Features");
var trainingPipeline = dataProcessPipeline.Append(trainer);
var model = trainingPipeline.Fit(trainData);
IDataView testData = mlcontext.Data.LoadFromTextFile<ModelInput>("StockTest.csv", separatorChar: ',', hasHeader: false);
IDataView predictions = model.Transform(testData);
var metrics = mlcontext.Regression.Evaluate(predictions, "bmi");
//(0) (2) (3) (5) (7)
var input = new ModelInput //<4>,144,<58>,<28>,140,<29.5>,0.287,<37>,0
{
NoPreg = 4,
blPressure = 58,
BiSkinthck = 28,
age = 37
};
var result = mlcontext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(model).Predict(input);
Console.WriteLine($"Predicted bmi " + $"{result.bmi}");
}
public class ModelOutput
{
[ColumnName("Score")]
public int bmi;
}
public class ModelInput
{
[LoadColumn(0)]
public int NoPreg;
[LoadColumn(2)]
public int blPressure;
[LoadColumn(3)]
public int BiSkinthck;
[LoadColumn(5)]
public int bmi;
[LoadColumn(7)]
public int age;
}
}
正在使用的一些示例数据是:
6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
0,137,40,35,168,43.1,2.288,33,1
5,116,74,0,0,25.6,0.201,30,0
其中仅使用了部分数据。
您的数据中有一些小数;将您的 ModelInput 和 ModelOutput 更改为使用浮点数(此外,预测的分数是回归中的浮点数)
public class ModelOutput
{
[ColumnName("Score")]
public float bmi;
}
public class ModelInput
{
[LoadColumn(0)]
public float NoPreg;
[LoadColumn(2)]
public float blPressure;
[LoadColumn(3)]
public float BiSkinthck;
[LoadColumn(5)]
public float bmi;
[LoadColumn(7)]
public float age;
}
希望对您有所帮助!