Как предсказать множественные метки с ML.NET, используя задачу регрессии? - PullRequest
0 голосов
/ 14 февраля 2019

Я очень плохо знаком с машинным обучением и наткнулся на следующую проблему.Рассматривая официальный учебник по прогнозированию суммы тарифа Такси в Нью-Йорке , скажем, я хотел бы предсказать другую реальную стоимость, например 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 для выполнения этой задачи.Спасибо заранее за любую помощь.

1 Ответ

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

Возможно, это не работает, потому что Fit () возвращает только "Метка" и "Оценка"

Смотрите здесь: здесь

Ваша оценка от "TripTime" равнаперезаписано "FareAmount".

Я полагаю, вам нужно построить две модели.

отредактировано: вы можете попробовать это.Скопируйте «Оценка» в нужное место.

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