MlContext не понимает тип моей температуры
Я начинающий в 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, False,, 1112,0 Charleroi-Sud, Mons, четверг,BE.NMBS.IC3832, облачно, -1,0, False,, 1144,0 Charleroi-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, Неверно, 2212,0 Шарлеруа-Суд, Монс, Четверг,BE.NMBS.IC3843, Облачно, -1,0, Неверно,2247,0 Шарлеруа-Суд, Монс В пятницу,BE.NMBS.IC3825, переменная облачность, -1,0, False,, 0444,0 Charleroi-Sud, Mons, в пятницу,BE.NMBS.IC3826, переменная облачность,-1,0,False,,0544,0 Charleroi-Sud,Mons, пятница,BE.NMBS.IC927, переменная облачность, -1,0, ложно,,0612,0
Итак, как вы можете видеть, между данными и температурой есть все ",". А внутри 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 ответ
Проблема заключалась в том, что Время, задержка и температура должны быть в плавании, а не в 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; }
}