C# ML.NET-功能列的架构不匹配';功能';:期望向量<;单个>;,得到向量<;Int32>;

C# ML.NET-功能列的架构不匹配';功能';:期望向量<;单个>;,得到向量<;Int32>;,c#,classification,multiclass-classification,ml.net,C#,Classification,Multiclass Classification,Ml.net,我只是试着做我的第一个ML.NET项目,我以前用Azure ML、可视化界面、Python等构建过这个项目,但现在我想用C来做 我在学习教程,但使用了完全不同的数据集和目的 数据集有很多额外的列,但我的数据模型如下所示(指向数据集中列的索引): 错误来自培训功能: public static IEstimator<ITransformer> BuildAndTrainModel(IDataView trainingDataView, IEstimator<ITransforme

我只是试着做我的第一个ML.NET项目,我以前用Azure ML、可视化界面、Python等构建过这个项目,但现在我想用C来做

我在学习教程,但使用了完全不同的数据集和目的

数据集有很多额外的列,但我的数据模型如下所示(指向数据集中列的索引):

错误来自培训功能:

public static IEstimator<ITransformer> BuildAndTrainModel(IDataView trainingDataView, IEstimator<ITransformer> pipeline)
{
    var trainingPipeline = pipeline
        .Append(_mlContext.MulticlassClassification.Trainers
        .SdcaMaximumEntropy("Label", "Features"))
        .Append(_mlContext.Transforms.Conversion
        .MapKeyToValue("PredictedLabel"));

    _trainedModel = trainingPipeline.Fit(trainingDataView);
    _predEngine = _mlContext.Model
        .CreatePredictionEngine<Earthquake, DamagePrediction>(_trainedModel);

    Earthquake building = new Earthquake()
    {
        geo_level_1_id = 1,
        geo_level_2_id = 42,
        geo_level_3_id = 941,
        count_floors_pre_eq = 2,
        age = 0,
        area = 24,
        height = 4,
        count_families = 2,
        has_secondary_use = 0,
        square = 4.898979485566356,
        difference = 0.8989794855663558
    };

    var prediction = _predEngine.Predict(building);
    Console.WriteLine($"=============== Single Prediction just-trained-model - Result: {prediction.damage_grade} ===============");


    return trainingPipeline;
}
publicstaticiestimator BuildAndTrainModel(IDataView trainingDataView,IEstimator管道)
{
var培训管道=管道
.Append(mlContext.MulticlassClassification.Trainers
.sdcamaximummentropy(“标签”、“特征”))
.Append(_mlContext.Transforms.Conversion
.MapKeyToValue(“PredictedLabel”);
_trainedModel=trainingPipeline.Fit(trainingDataView);
_predEngine=\u mlContext.Model
.CreatePredictionEngine(_trainedModel);
地震建筑=新地震()
{
geo_level_1_id=1,
geo_level_2_id=42,
geo_level_3_id=941,
计数\u楼层\u预\u等式=2,
年龄=0,
面积=24,
高度=4,
count_families=2,
具有辅助用途=0,
正方形=4.898979485566356,
差异=0.89794855663558
};
var预测=_predEngine.Predict(构建);
Console.WriteLine($“========================================================================================”;
回流培训管道;
}
上面说:

引发异常:中的“System.ArgumentOutOfRangeException” Microsoft.ML.Data.dll类型的未处理异常 Microsoft.ML.Data.dll中出现“System.ArgumentOutOfRangeException” 功能列“功能”的架构不匹配:应为 向量,得到向量

我似乎不明白问题出在哪里,你能帮我想一想吗

我只处理数字数据,这就是为什么我没有添加转换或特征化,但标准化可能会有所帮助。。因为我有一些彩车


提前感谢您的所有想法

我认为问题在于,您在
地震
中声明了一些属性为
双属性
,而它们应该是
浮动
(又称
系统。单属性
)严重,就是这样吗O我今天晚些时候尝试一下,谢谢:)数据库和c代码之间的映射不匹配。您的Loadcolumn索引可能错误。索引可能从零开始,而你从一开始。@Eva我不确定,它只是一个guess@jdweng,我从0开始索引,我加载这样的列,它们在数据集中的位置,在索引0处,或者其他地方。。。但我会检查编号是否正确,谢谢:)
public static IEstimator<ITransformer> BuildAndTrainModel(IDataView trainingDataView, IEstimator<ITransformer> pipeline)
{
    var trainingPipeline = pipeline
        .Append(_mlContext.MulticlassClassification.Trainers
        .SdcaMaximumEntropy("Label", "Features"))
        .Append(_mlContext.Transforms.Conversion
        .MapKeyToValue("PredictedLabel"));

    _trainedModel = trainingPipeline.Fit(trainingDataView);
    _predEngine = _mlContext.Model
        .CreatePredictionEngine<Earthquake, DamagePrediction>(_trainedModel);

    Earthquake building = new Earthquake()
    {
        geo_level_1_id = 1,
        geo_level_2_id = 42,
        geo_level_3_id = 941,
        count_floors_pre_eq = 2,
        age = 0,
        area = 24,
        height = 4,
        count_families = 2,
        has_secondary_use = 0,
        square = 4.898979485566356,
        difference = 0.8989794855663558
    };

    var prediction = _predEngine.Predict(building);
    Console.WriteLine($"=============== Single Prediction just-trained-model - Result: {prediction.damage_grade} ===============");


    return trainingPipeline;
}