ML.NET Cookbook:(12)我想看看模型的系数

通常,一旦一个模型被训练出来,我们也会对“它学到了什么”感兴趣。

例如,如果线性模型为我们认为重要的特征赋予零权重,则可能表明建模存在一些问题。线性模型的权重也可用作对“特征重要性”的估计。

这是我们可以从训练的模型中提取学习到的参数的方法:


// 第一步:将数据加载为IDataView。
//  检索训练数据。
var trainData = mlContext.Data.LoadFromTextFile<IrisInput>(irisDataPath,
    // 默认分隔符是tab,但数据集使用逗号。
    separatorChar: ','
);

// 建立学习管道。
var pipeline =
    // 将所有特征串联到一列“Features”中。
    mlContext.Transforms.Concatenate("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")
    // 请注意,标签是文本,因此需要将其转换为键。
    .Append(mlContext.Transforms.Conversion.MapValueToKey("Label"), TransformerScope.TrainTest)
    // 在缓存检查点阶段之后的步骤中缓存内存中的数据。
    .AppendCacheCheckpoint(mlContext)
    // 利用多类SDCA模型对标签进行预测。
    .Append(mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy());

// 训练模型。
var trainedModel = pipeline.Fit(trainData);

// 检查模型参数。
var modelParameters = trainedModel.LastTransformer.Model as MaximumEntropyModelParameters;

// 现在我们可以使用“modelParameters”来查看权重。
// “weights”是一个权重向量数组,每个类一个向量。
// 我们的问题有3个类,所以numclass将是3,权重将包含3个向量(每个向量有4个值)。
VBuffer<float>[] weights = default;
modelParameters.GetWeights(ref weights, out int numClasses);

// numClasses
// 3
// weights
// {float[4]}       { float[4]}         { float[4]}
// 2.45233274       0.181766108         -3.05772042
// 4.61404276       0.0578986146        -4.85828352
// - 6.934741       -0.0424297452       6.63682
// - 3.64960361     -4.072106           7.55050659

// 同样,我们也可以检查3个类的偏差。
var biases = modelParameters.GetBiases();
//   [0] 1.151999 float
//      [1] 8.337694 float
//   [2] -9.709775 float

欢迎关注我的个人公众号”My IO“

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值