简介
您好,我想进行一些数据准备操作,然后将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
,请记住,这还不是学习管道。
问题
那么,为什么我必须在Transform
之前Fit
管道呢?
// 拟合数据到估计器// 拟合会生成一个变换器,用于应用估计器定义的操作ITransformer textTransformer = textEstimator.Fit(data);// 转换数据IDataView transformedData = textTransformer.Transform(data);
回答:
调用Fit
会从您使用MLContext
上的便捷方法设置的估计器链中构建变换器链。变换器实际执行转换数据的工作。
您说的没错,大多数估计器除了返回相应的变换器外几乎不做其他工作,但当您将来将其转化为学习管道时,类似的结构将大大有益于您。