我是机器学习的新手,我偶然发现了以下问题。考虑到an official NYC Taxi fare amount prediction tutorial,假设我想预测另一个实际值,例如TripTime
。我修改了我的代码,如下所示:
public class TripFarePrediction // this class is used to store prediction result
{
[ColumnName("Score")]
public float FareAmount { get; set; }
[ColumnName("Score2")]
public float TripTime { get; set; }
}
private static ITransformer Train(MLContext mlContext, string trainDataPath)
{
IDataView dataView = _textLoader.Read(trainDataPath);
var pipelineForTripTime = mlContext.Transforms.CopyColumns("Label", "TripTime")
.Append(mlContext.Transforms.Categorical.OneHotEncoding("VendorId"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding("RateCode"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding("PaymentType"))
.Append(mlContext.Transforms.Concatenate("Features", "VendorId", "RateCode", "PassengerCount", "TripDistance", "PaymentType"))
.Append(mlContext.Regression.Trainers.FastTree());
var pipelineForFareAmount = mlContext.Transforms.CopyColumns("Label", "FareAmount")
.Append(mlContext.Transforms.Categorical.OneHotEncoding("VendorId"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding("RateCode"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding("PaymentType"))
.Append(mlContext.Transforms.Concatenate("Features", "VendorId", "RateCode", "PassengerCount", "TripDistance", "PaymentType"))
.Append(mlContext.Regression.Trainers.FastTree());
var model = pipelineForTripTime.Append(pipelineForFareAmount).Fit(dataView);
SaveModelAsFile(mlContext, model);
return model;
}
第一个值(FareAmount
)被“正确地”预测(值不是零),但是第二个值(TripTime
)为零。我的问题是如何一次或至少使用同一模型预测两个或多个标签?这有可能吗?我正在使用.NET Core 2.2和ML.NET 0.10.0来完成此任务。预先感谢您的任何帮助。
答案 0 :(得分:1)
可能不起作用,因为Fit()仅返回“ Label”和“ Score”
查看此处:here
您从“旅行时间”中获得的分数将被“票价金额”所覆盖。
我想,您必须构建两个模型。
编辑: 你可以试试看将“得分”复制到正确的位置。
public class TripFarePrediction // this class is used to store prediction result
{
[ColumnName("fareAmount")]
public float FareAmount { get; set; }
[ColumnName("tripTime")]
public float TripTime { get; set; }
}
private static ITransformer Train(MLContext mlContext, string trainDataPath)
{
IDataView dataView = _textLoader.Read(trainDataPath);
var pipelineForTripTime = mlContext.Transforms.CopyColumns("Label", "TripTime")
.Append(mlContext.Transforms.Categorical.OneHotEncoding("VendorId"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding("RateCode"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding("PaymentType"))
.Append(mlContext.Transforms.Concatenate("Features", "VendorId", "RateCode", "PassengerCount", "TripDistance", "PaymentType"))
.Append(mlContext.Regression.Trainers.FastTree())
.Append(mlContext.Transforms.CopyColumns(outputcolumn: "tripTime", inputcolumn: "Score"));
var pipelineForFareAmount = mlContext.Transforms.CopyColumns("Label", "FareAmount")
.Append(mlContext.Transforms.Categorical.OneHotEncoding("VendorId"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding("RateCode"))
.Append(mlContext.Transforms.Categorical.OneHotEncoding("PaymentType"))
.Append(mlContext.Transforms.Concatenate("Features", "VendorId", "RateCode", "PassengerCount", "TripDistance", "PaymentType"))
.Append(mlContext.Regression.Trainers.FastTree())
.Append(mlContext.Transforms.CopyColumns(outputcolumn: "fareAmount", inputcolumn: "Score"));
var model = pipelineForTripTime.Append(pipelineForFareAmount).Fit(dataView);
SaveModelAsFile(mlContext, model);
return model;
}