代码之家  ›  专栏  ›  技术社区  ›  thelittlewozniak

MLContext不了解我的体温类型

  •  0
  • thelittlewozniak  · 技术社区  · 6 年前

    我是ml.net的初学者,我的数据有点问题。当我将它们放入mlcontext.fit(…);这是我收到的错误:

    Column 'Temperature' has values of I4which is not the same as earlier observed type of R4.
    

    以下是我的代码:

    try
                {
                    var mlContext = new MLContext();
                    var reader = mlContext.Data.CreateTextReader<TrainData>(separatorChar: ',', hasHeader: false);
                    var trainData = _context.Datas.Last();
                    IDataView trainingdataView = reader.Read(Path.Combine(hostingEnvironment.WebRootPath, "data010220192341.txt"));
                    var pipeline = mlContext.Transforms.Conversion.MapValueToKey("Delay")
                        .Append(mlContext.Transforms.Categorical.OneHotEncoding("StationDepart"))
                        .Append(mlContext.Transforms.Categorical.OneHotEncoding("StationArrival"))
                        .Append(mlContext.Transforms.Categorical.OneHotEncoding("Day"))
                        .Append(mlContext.Transforms.Categorical.OneHotEncoding("Train"))
                        .Append(mlContext.Transforms.Categorical.OneHotEncoding("WeatherText"))
                        .Append(mlContext.Transforms.Categorical.OneHotEncoding("HasPrecipitation"))
                        .Append(mlContext.Transforms.Categorical.OneHotEncoding("PrecipitationType"))
                        .Append(mlContext.Transforms.Concatenate("Features", "StationDepart", "StationArrival", "Day", "Train", "WeatherText", "Temperature", "Humidity", "HasPrecipitation", "PrecipitationType", "Time"))
                        .Append(mlContext.MulticlassClassification.Trainers.StochasticDualCoordinateAscent(labelColumn: "Delay", featureColumn: "Features"))
                        .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedTime"));
                    var model = pipeline.Fit(trainingdataView);
                    var prediction = model.CreatePredictionEngine<TrainData, TrainPrediction>(mlContext).Predict(
                        new TrainData()
                        {
                            StationDepart = "Charleroi-Sud",
                            StationArrival = "Mons",
                            Day = "Friday",
                            Train = "BE.NMBS.IC3825",
                            WeatherText = "Partly cloudy",
                            Temperature = -1,
                            Humidity=0,
                            HasPrecipitation = false,
                            PrecipitationType=null,
                            Time=0444
                        });
                    return prediction.PredictedTime.ToString();
                }
                catch (Exception e)
                {
                    return e.Message;
                }
    

    所以当我得到一个文本文件上的数据之后,我对字符串列进行编码,在我尝试训练模型之后,但此时我收到了错误。 我的数据是:

    Charleroi Sud,Mons,Thurday,Be.NMBS.IC3831,部分 晴天,-2,0,假,,1044,0 Charleroi Sud,Mons,Thurday,Be.nmbs.ic932,多云,-2,0,假,,1112,0 Charleroi Sud,Mons,Thurday,be.nmbs.ic3832,多云,-1,0,假,,1144,0 Charleroi Sud,Mons,Thurday,Be.nmbs.ic933,多云,-1,0,假,,1212,0 Charleroi Sud,Mons,Thurday,be.nmbs.ic3842,多云,-1,0,假,,2144,0 Charleroi Sud,Mons,Thurday,Be.nmbs.ic943,多云,-1,0,假,,2212,0 Charleroi Sud,Mons,Thurday,Be.nmbs.ic3843,多云,-1,0,假,,2247,0 Charleroi Sud,Mons,Friday,Be.nmbs.ic3825,部分多云,-1,0,假,,0444,0 Charleroi Sud,Mons,Friday,Be.nmbs.ic3826,多云,-1,0,假,,0544,0 Charleroi Sud,Mons,Friday,Be.nmbs.ic927,多云,-1,0,假,,0612,0

    如你所见,数据之间的每一个“,”和温度是一个整数。 在特兰达达,就像这样:

    public class TrainData
        {
            [LoadColumn(0)]
            public string StationDepart { get; set; }
            [LoadColumn(1)]
            public string StationArrival { get; set; }
            [LoadColumn(2)]
            public string Day { get; set; }
            [LoadColumn(3)]
            public string Train { get; set; }
            [LoadColumn(4)]
            public string WeatherText { get; set; }
            [LoadColumn(5)]
            public int Temperature { get; set; }
            [LoadColumn(6)]
            public int Humidity { get; set; }
            [LoadColumn(7)]
            public bool HasPrecipitation { get; set; }
            [LoadColumn(8)]
            public string PrecipitationType { get; set; }
            [LoadColumn(9)]
            public int Time { get; set; }
            [LoadColumn(10)]
            public int Delay { get; set; }
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   thelittlewozniak    6 年前

    问题是时间、延迟和温度都需要浮动,而不是int。

    public class TrainData
        {
            [LoadColumn(0)]
            public string StationDepart { get; set; }
            [LoadColumn(1)]
            public string StationArrival { get; set; }
            [LoadColumn(2)]
            public string Day { get; set; }
            [LoadColumn(3)]
            public string Train { get; set; }
            [LoadColumn(4)]
            public string WeatherText { get; set; }
            [LoadColumn(5)]
            public float Temperature { get; set; }
            [LoadColumn(6)]
            public float Humidity { get; set; }
            [LoadColumn(7)]
            public bool HasPrecipitation { get; set; }
            [LoadColumn(8)]
            public string PrecipitationType { get; set; }
            [LoadColumn(9)]
            public float Time { get; set; }
            [LoadColumn(10)]
            public float Delay { get; set; }
        }