ML.NET 在不拟合的情况下转换数据

ML.NET Transform data without fitting

简介

嗨,我想做一些数据准备操作,然后将 DataView 放到另一个方法中,或者在多个地方使用它。

因此,我创建了一个 IEstimator<ITransformer> 对象来保存管道,例如:

var textEstimator = mlContext.Transforms.Text.NormalizeText("Description")
    .Append(mlContext.Transforms.Text.TokenizeIntoWords("Description"))
    .Append(mlContext.Transforms.Text.RemoveDefaultStopWords("Description"))
    .Append(mlContext.Transforms.Conversion.MapValueToKey("Description"))
    .Append(mlContext.Transforms.Text.ProduceNgrams("Description"))
    .Append(mlContext.Transforms.NormalizeLpNorm("Description"));

(复制自 docs.microsoft

但是现在,我想获得 DataView,请记住,这 还不是 学习管道。


问题

那么为什么我必须在 Tranform 之前 Fit 管道?

// Fit data to estimator
// Fitting generates a transformer that applies the operations of defined by estimator
ITransformer textTransformer = textEstimator.Fit(data);

// Transform data
IDataView transformedData = textTransformer.Transform(data);

调用 Fit 会根据您使用 MLContext 上的便捷方法设置的估计器链构建变换器链。转换器执行转换数据的实际工作。

你是对的,你的大多数 Estimator 除了返回它们相应的 Transformer 之外几乎没有做任何工作,但是当在某个时候将其转变为学习管道时,类似的结构将使你受益匪浅。