ML.NET多阶段管道

时间:2019-03-25 17:33:23

标签: ml.net

我正在尝试使用ML.NET建立多阶段分类管道。我正在使用版本0.11.0。 ML.NET Cookbook中给出的示例可以很好地用于单阶段分类/回归任务。

For eg: Input --> Transformations --> BinaryClassification

我正在尝试建立多阶段分类管道,但遇到了问题。

我的情况是:

Stage I pipeline: 
  Input --> Transformations --> PrimaryClassifier (BinaryClassification) --> PrimaryOutput

Stage II pipeline: 
  PrimaryOutput --> Transformations --> SecondaryClassifier (BinaryClassification) --> SecondaryOutput

我的输入数据和主要输出类别定义为:

public class InputData
{
  [LoadColumn(0)]
  public string id;

  [LoadColumn(1) ColumnName("Label")]
  public bool Label;

  [LoadColumn(2,11), VectorType(10)]
  public float[] rawfeatures;
}

public class OutputData
{
  [ColumnName("PredictedLabel")]
  public bool PredictedLabel;
}

输入数据位于带有标题的简单逗号分隔值文件中。 我使用数据加载器加载它。

IDataView trainingDataView = Context.Data.LoadFromTextFile<InputData>(
                               path: Path + "\\" + fileName, 
                               hasHeader: true, 
                               separatorChar: ',');

第一阶段的管道定义为:

var pipeline1 = Context.Transforms.Normalize(outputColumnName: "Features",
                      inputColumnName: "rawfeatures",
                      mode: NormalizingEstimator.NormalizerMode.MinMax)
                .AppendCacheCheckpoint(Context)
                .Append(Context.BinaryClassification.Trainers.FastTree(
                   labelColumnName: "Label", 
                   featureColumnName: "Features"))
                .Append(Context.Transforms.CopyColumns(
                   outputColumnName: "NormalizedFeatures", 
                   inputColumnName: "Features"));

对于Stage II管道,我想从Stage I管道中获取PredictedLabel并将其与Label进行比较,以计算出名为“ IsGood”的列。然后,我想在“ IsGood”作为标签,在“ Features”作为功能列上训练辅助分类器。

Q1:计算“ IsGood”列的最佳方法是什么?是CustomMapping唯一的方法还是有更好的选择?

这个想法是建立一个分类器,该分类器学习将基于特征的输入划分为“好”集群和“坏”集群,然后对“好”和“坏”集群使用单独的自定义分类器。

Q2:如何使用统一的I&II阶段管道做到这一点?我唯一的选择是将列(阶段II的标签和功能)复制为唯一的名称,然后在其上训练二级分类器吗?

0 个答案:

没有答案