ML.NET 0.9特性简介

ML.NET 0.9已于上周发布,距离上次0.8版本的发布只有一个多月,此次增加的新特性主要包括特征贡献计算,模型可解释性增强,ONNX转换对GPU的支持,Visual Studio ML.NET项目模板预览,以及API改进。

特征贡献计算

特征贡献计算(Feature Contribution Calculation)通过决定每个特征对模型分数的贡献,从而显示哪些特征在对特别个体的数据样本的模型预测最有影响力。

当你面临历史数据中有许多特征时而又想选择使用最重要的特征时,特征贡献计算显得十分重要。因为使用太多的特征(尤其是包含对模型没有影响的特征)会减少模型的性能与准确性。因此,使用特征贡献计算你可以从原始特征集中识别最有影响力的正向与负向的贡献。

示例代码:

// 创建特征贡献计算器
// 对已有训练模型参数的所有特征进行计算贡献

var featureContributionCalculator = mlContext.Model.Explainability.FeatureContributionCalculation(model.Model, model.FeatureColumn, numPositiveContributions: 11, normalize: false);

// FeatureContributionCalculatingEstimator可被用作管道中的一个步骤
// 被FeatureContributionCalculatingEstimator保存的特征将在FeatureContribution列中

var pipeline = mlContext.Model.Explainability.FeatureContributionCalculation(model.Model, model.FeatureColumn, numPositiveContributions: 11)
    .Append(mlContext.Regression.Trainers.OrdinaryLeastSquares(featureColumn: "FeatureContributions"));

输出结果可下:

The output of the above code is:

  Label   Score   BiggestFeature         Value   Weight   Contribution

  24.00   27.74   RoomsPerDwelling        6.58    98.55   39.95
  21.60   23.85   RoomsPerDwelling        6.42    98.55   39.01
  34.70   29.29   RoomsPerDwelling        7.19    98.55   43.65
  33.40   27.17   RoomsPerDwelling        7.00    98.55   42.52

对于特征选取的模型可解释性的增强

除了特征贡献计算之外,排列特征重要性(PFI)与广义加性模型(GAM)也有加强。

  • 排列特征重要性支持大多数学习任务:回归,二元分类,多元分类与排序。
  • 排列特征重要性允许你在特征重要性分数上计算置信区间,以便可以得到更好的平均值估计。
  • 广义加性模型支持特征贡献计算,以便你可以迅速看到哪些特征驱动个体的预测。

增加对ONNX转换的GPU支持

在ML.NET 0.9中通过集成高性能的ONNX运行时库添加了使用激活GPU的CUDA 10.0运行ONNX模型的功能。ONNX模型的GPU支持现在已经可以在Windows 64位系统上使用,不久之后将支持Linux与Mac系统。

新的Visual Studio ML.NET项目模板预览

Visual Studio项目模板现在推出了支持ML.NET的预览版本。下载地址

模板涵盖以下场景:

  • ML.NET控制台应用程序
  • ML.NET模型类库

其它API的改进

简化文本数据加载

ML.NET 0.9以前你需要显示的标明列名:

var mlContext = new MLContext();

var reader = mlContext.Data.CreateTextReader(new[] {
        new TextLoader.Column("IsOver50K", DataKind.BL, 0),
        new TextLoader.Column("Workclass", DataKind.TX, 1)
    },hasHeader: true
);
var dataView = reader.Read(dataPath);

现在你可以直接使用泛型:

var mlContext = new MLContext();

var dataView = mlContext.Data.ReadFromTextFile<InspectedRow>(dataPath, hasHeader: true);

private class InspectedRow
{
    [LoadColumn(0)]
    public bool IsOver50K { get; set; }
    [LoadColumn(1)]
    public string Workclass { get; set; }
}

获取预测置信因子

通过Calibrator Estimators,除了在评估模型质量时可以获得分数列之外,还可以得到置信因子。

例如,你可以获得每个预测值的概率:

Score - 0.458968    Probability 0.4670409
Score - 0.7022135   Probability 0.3912723
Score 1.138822      Probability 0.8703266

新的键-值匹配估测器及转换

新特性替换了TermLookupTransform,同时提供了指定值之间匹配的新方法。你可以指定键列与值列的匹配关系,但需保证两者数量一致。

其它的改进与变化

  • 允许ML.NET在Windows Nano容器及Windows机器上运行,而无需安装Visual C++运行时。
  • 在包含模型信息的DataView构造器中提供元数据支持,比如被编码为元数据的评估指标可以通过代码解析出来,由此能够使用任何工具进行可视化。
posted @ 2019-01-17 22:29  Ken.W  阅读(1253)  评论(0编辑  收藏  举报