MlContext не понимает тип моей температуры - PullRequest
0 голосов
/ 02 февраля 2019

Я новичок в 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;
            }

Поэтому, когда я получаю Данные в текстовом файле, после этого я кодирую строку Column и после того, как пытаюсьПоездить модель, но именно в этот момент я получил ошибку.и мои данные:

Charleroi-Sud, Mons, четверг, BE.NMBS.IC3831, переменная облачность, -2,0, False, 1044,0 Charleroi-Sud, Mons, четверг,BE.NMBS.IC932, облачно, -2,0, ложно, 1112,0 Шарлеруа-Суд, Монс, четверг, BE.NMBS.IC3832, облачно, -1,0, ложно, 1144,0 ШарлеруаSud, Mons, четверг, BE.NMBS.IC933, облачно, -1,0, False ,, 1212,0 Charleroi-Sud, Mons, четверг, BE.NMBS.IC3842, облачно, -1,0, False ,,2144,0 Charleroi-Sud, Mons, четверг, BE.NMBS.IC943, облачно, -1,0, False, 2212,0 Charleroi-Sud, Mons, четверг, BE.NMBS.IC3843, облачно, -1, 0, False ,, 2247,0 Charleroi-Sud, Mons, пятница, BE.NMBS.IC3825, переменная облачность, -1,0, False ,, 0444,0 Charleroi-Sud, Mons, пятница, BE.NMBS.IC3826Облачно, -1,0, Ложно, 0544,0 Шарлеруа-Суд, Монс, Пятница, BE.NMBS.IC927, Облачно, -1,0, Ложно, 0612,0

Так что, как вы можете видеть, между данными и температурой есть каждое ',' - это int.А внутри TrainData это сделано так:

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 Ответ

0 голосов
/ 04 февраля 2019

Проблема заключалась в том, что время, задержка и температура должны быть в плавающем, а не в целых числах.

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; }
    }
...