LearningPipelineExtensions.WithOnFitDelegate<TTransformer> 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
给定估算器后,返回将调用委托的 Fit(IDataView) 包装对象。 估算器通常必须返回有关拟合情况的信息,这就是为什么 Fit(IDataView) 该方法返回特定类型化对象的原因,而不仅仅是常规 ITransformer对象。 但是,同时, IEstimator<TTransformer> 通常形成为包含许多对象的管道,因此,我们可能需要通过 EstimatorChain<TLastTransformer> 估算器链生成一系列估算器,以便我们要获取转换器的估算器被埋在此链中的某个位置。 对于这种情况,我们可以通过此方法附加调用一次将调用的委托。
public static Microsoft.ML.IEstimator<TTransformer> WithOnFitDelegate<TTransformer> (this Microsoft.ML.IEstimator<TTransformer> estimator, Action<TTransformer> onFit) where TTransformer : class, Microsoft.ML.ITransformer;
static member WithOnFitDelegate : Microsoft.ML.IEstimator<'ransformer (requires 'ransformer : null and 'ransformer :> Microsoft.ML.ITransformer)> * Action<'ransformer (requires 'ransformer : null and 'ransformer :> Microsoft.ML.ITransformer)> -> Microsoft.ML.IEstimator<'ransformer (requires 'ransformer : null and 'ransformer :> Microsoft.ML.ITransformer)> (requires 'ransformer : null and 'ransformer :> Microsoft.ML.ITransformer)
<Extension()>
Public Function WithOnFitDelegate(Of TTransformer As {Class, ITransformer}) (estimator As IEstimator(Of TTransformer), onFit As Action(Of TTransformer)) As IEstimator(Of TTransformer)
类型参数
- TTransformer
返回者 ITransformer 的类型 estimator
参数
- estimator
- IEstimator<TTransformer>
要包装的估算器
- onFit
- Action<TTransformer>
调用一次Fit(IDataView)使用生成的TTransformer
实例调用的委托。 由于 Fit(IDataView) 可以多次调用,因此也可以多次调用此委托。
返回
每当调用拟合时调用指示的委托的包装估算器
示例
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Transforms;
using static Microsoft.ML.Transforms.NormalizingTransformer;
namespace Samples.Dynamic
{
public class WithOnFitDelegate
{
public static void Example()
{
// Create a new ML context, for ML.NET operations. It can be used for
// exception tracking and logging, as well as the source of randomness.
var mlContext = new MLContext();
var samples = new List<DataPoint>()
{
new DataPoint(){ Features = new float[4] { 8, 1, 3, 0},
Label = true },
new DataPoint(){ Features = new float[4] { 6, 2, 2, 0},
Label = true },
new DataPoint(){ Features = new float[4] { 4, 0, 1, 0},
Label = false },
new DataPoint(){ Features = new float[4] { 2,-1,-1, 1},
Label = false }
};
// Convert training data to IDataView, the general data type used in
// ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// Create a pipeline to normalize the features and train a binary
// classifier. We use WithOnFitDelegate for the intermediate binning
// normalization step, so that we can inspect the properties of the
// normalizer after fitting.
NormalizingTransformer binningTransformer = null;
var pipeline =
mlContext.Transforms
.NormalizeBinning("Features", maximumBinCount: 3)
.WithOnFitDelegate(
fittedTransformer => binningTransformer = fittedTransformer)
.Append(mlContext.BinaryClassification.Trainers
.LbfgsLogisticRegression());
Console.WriteLine(binningTransformer == null);
// Expected Output:
// True
var model = pipeline.Fit(data);
// During fitting binningTransformer will get assigned a new value
Console.WriteLine(binningTransformer == null);
// Expected Output:
// False
// Inspect some of the properties of the binning transformer
var binningParam = binningTransformer.GetNormalizerModelParameters(0) as
BinNormalizerModelParameters<ImmutableArray<float>>;
for (int i = 0; i < binningParam.UpperBounds.Length; i++)
{
var upperBounds = string.Join(", ", binningParam.UpperBounds[i]);
Console.WriteLine(
$"Bin {i}: Density = {binningParam.Density[i]}, " +
$"Upper-bounds = {upperBounds}");
}
// Expected output:
// Bin 0: Density = 2, Upper-bounds = 3, 7, Infinity
// Bin 1: Density = 2, Upper-bounds = -0.5, 1.5, Infinity
// Bin 2: Density = 2, Upper-bounds = 0, 2.5, Infinity
// Bin 3: Density = 1, Upper-bounds = 0.5, Infinity
}
private class DataPoint
{
[VectorType(4)]
public float[] Features { get; set; }
public bool Label { get; set; }
}
}
}