C# 使用Ml.net软件包错误“;System.ArgumentOutOfRangeException“;
使用ML.net包时,出现错误“System.ArgumentOutOfRangeException:“Features”列的架构不匹配:预期向量,获取向量 参数名称:inputSchema“”被抛出到行“var model=trainingPipeline.Fit(trainData);”上。在理解错误的同时,我无法理解为什么会为代码抛出错误C# 使用Ml.net软件包错误“;System.ArgumentOutOfRangeException“;,c#,ml.net,C#,Ml.net,使用ML.net包时,出现错误“System.ArgumentOutOfRangeException:“Features”列的架构不匹配:预期向量,获取向量 参数名称:inputSchema“”被抛出到行“var model=trainingPipeline.Fit(trainData);”上。在理解错误的同时,我无法理解为什么会为代码抛出错误 class Program { static void Main(string[] args) {
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;
}
}
其中仅使用了部分数据 数据中有一些小数;将您的ModelInput和ModelOutput更改为使用浮点数(同样,预测分数在回归中是浮点数)
希望有帮助 您可能不需要数据,但尝试添加ModelInput类中缺少的项。我只向其中输入了这5个值,因此不再显示该类:)我的意思是在类中添加缺少的项,看看这是否修复了错误。:)这难道不像添加一个从未调用过的类,或者设置从未使用过的变量吗?我一定会尝试,因为我还在学习,但我不确定它能完成全部任务!当这样做的时候,我需要转换所有的数据以便处理吗?如果数据看起来像你的样本,你应该很好,整数很容易被转换成浮点数,所以LoadFromTextFile方法可以处理它。我发现在完成数据的同时转换每一位数据更容易
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
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;
}