ML.NET 0.8特性简介
本周.NET生态圈内的更新源源不断,除了.NET Core 2.2,ASP.NET Core 2.2和Entity Framework Core 2.2之外,ML.NET 0.8也一并登上舞台。
新的推荐场景
ML.NET使用基于矩阵分解(Matrix Factorization)和场感知分解机(Field-aware Factorization Machine)的方法来作推荐。一般而言,场感知分解机是矩阵分解更通用的例子,它允许传入额外的元数据。
在ML.NET 0.8中新加了运用矩阵分解的推荐场景。
推荐场景 | 推荐方案 | 示例链接 |
---|---|---|
基于产品Id,评价,用户Id和诸如产品描述,用户特征(年龄,国家)的额外元数据的产品推荐 | 场感知分解机 | ML.NET 0.3 |
基于产品Id,评价,用户Id的产品推荐 | 矩阵分解 | ML.NET 0.7 |
基于产品Id和与其一同购买的产品Id的产品推荐 | One Class矩阵分解 | ML.NET 0.8 |
在新的推荐场景中,即使没有可用的评价,也可以通过历史购买数据为用户构建"经常一起购买的产品"(Frequently Bought Together)的列表。
通过预览数据改进调试功能
在多数例子里,当开始运行你的机器学习管道(pipeline),且加载数据时,能看到已经载入的数据是很有用的功能。尤其是在某些中间转换过程之后,需要确保数据如预期的一样发生变化。
现在当你想要预览DataView的数据模式(Schema)时,可以悬停鼠标在IDataView对象上,展开它,观察它的数据模式属性。
而要查看DataView中已加载的实际数据,通过以下三步可以达成目标。
在调试模式中打开观察窗口
输入DataView对象的变量名,调用它的Preview方法
点开想看的某行,这样就能显示其中实际加载的数据
默认情况下,只会显示100行的数据,但可以在Preview方法里传入参数,比如Preview(500),以获得更多的数据。
模型可解释性
为了让模型更具可解释性,ML.NET 0.8引入了新的API,用以帮助理解模型的特征重要性(整体特征重要度(Overall Feature Importance))以及创建能被其他人解释的高效模型(广义加性模型(Generalized Additive Models))。
整体特征重要度用于评判在模型中哪些特性是整体上最重要的。它帮助理解哪些特征是最有价值的,从而得到更好的预测结果。例如,当预测汽车价格时,一些特性比如里程数和生产商品牌是更重要的,而其它特性,如汽车颜色,则是影响甚小。
模型的整体特征重要度可以通过"排列特征重要度"(Permutation Feature Importance)(PFI)技术来获得。PFI借由"如果特征值设为随机数,会怎样影响模型"这一问题以测量特征重要度。
PFI方法的好处是其与模型无关,任何模型都可以用它作评估,并且它还可以使用任意数据。
使用PFI的方法如下例代码所示:
// Compute the feature importance using PFIvar permutationMetrics = mlContext.Regression.PermutationFeatureImportance(model, data);// Get the feature names from the training setvar featureNames = data.Schema.GetColumns().Select(tuple => tuple.column.Name) // Get the column names.Where(name => name != labelName) // Drop the Label.ToArray();// Write out the feature names and their importance to the model's R-squared valuefor (int i = 0; i < featureNames.Length; i++)Console.WriteLine($"{featureNames[i]}\t{permutationMetrics[i].rSquared:G4}");
生成的结果包括了特征名与它的重要度。
Console output:Feature Model Weight Change in R - Squared--------------------------------------------------------RoomsPerDwelling 50.80 -0.3695EmploymentDistance -17.79 -0.2238TeacherRatio -19.83 -0.1228TaxRate -8.60 -0.1042NitricOxides -15.95 -0.1025HighwayDistance 5.37 -0.09345CrimesPerCapita -15.05 -0.05797PercentPre40s -4.64 -0.0385PercentResidental 3.98 -0.02184CharlesRiver 3.38 -0.01487PercentNonRetail -1.94 -0.007231
广义加性模型拥有很好的预测可解释性。在便于理解上,它类似于线性模型,但更加灵活,并具有更佳的性能以及利于分析的可视化能力。
更多的API增强
在DataView中过滤行
有时你会需要对数据集过滤一部分数据,比如那些离群值(outlier)。ML.NET 0.8中新加入了FilterByColumn()API可以帮助解决类似问题。
使用方法如下面的代码所示:
IDataView trainingDataView = mlContext.Data.FilterByColumn(baseTrainingDataView, "FareAmount", lowerBound: 1, upperBound: 150);
缓存功能的API
当对同一数据作多次迭代处理时,通过缓存数据可以大幅减少训练时间。
以下例子可以减少50%的训练时间:
var dataProcessPipeline = mlContext.Transforms.Conversion.MapValueToKey("Area", "Label").Append(mlContext.Transforms.Text.FeaturizeText("Title", "TitleFeaturized")).Append(mlContext.Transforms.Text.FeaturizeText("Description", "DescriptionFeaturized")).Append(mlContext.Transforms.Concatenate("Features", "TitleFeaturized", "DescriptionFeaturized")) //Example Caching the DataView .AppendCacheCheckpoint(mlContext) .Append(mlContext.BinaryClassification.Trainers.AveragedPerceptron(DefaultColumnNames.Label, DefaultColumnNames.Features,numIterations: 10));
以IDataView二进制格式保存读取数据
将经过转换的数据保存为IDataView二进制格式相较普通的文本格式,可以极大地提升效率。同时,由于此格式保留了数据模式,所以可以方便读取而不需要再指定列类型。
读取与保存的API如下所示,十分简单:
mlContext.Data.ReadFromBinary("pathToFile");
mlContext.Data.SaveAsBinary("pathToFile");
用于时间序列问题的状态性预测引擎
ML.NET 0.7里可以基于时间序列处理异常检查问题。然而,其预测引擎是无状态的,这意味着每次要指出最新的数据点是否是异常的,需要同时提供历史数据。
新的引擎中可以保留时间序列的状态,所以现在只要有最新的数据点,即可以进行预测。需要改动的地方是将CreatePredictionFunction()
方法替换成CreateTimeSeriesPredictionFunction()
。
原文地址:https://www.cnblogs.com/kenwoo/p/10090881.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
ML.NET 0.8特性简介相关推荐
- ML.NET 0.9特性简介
ML.NET 0.9已于上周发布,距离上次0.8版本的发布只有一个多月,此次增加的新特性主要包括特征贡献计算,模型可解释性增强,ONNX转换对GPU的支持,Visual Studio ML.NET项目 ...
- ML.NET 0.10特性简介
IDataView被单独作为一个类库包 IDataView组件为表格式数据提供了非常高效的处理方式,尤其是用于机器学习和高级分析应用.它被设计为可以高效地处理高维数据和大型数据集.并且也适合处理属于更 ...
- mysql8.0创建属性,MySQL 8.0新特性 — 管理端口的使用简介
前言 下面这个报错,相信大多数童鞋都遇见过:那么碰到这个问题,我们应该怎么办呢?在MySQL 5.7及之前版本,出现"too many connection"报错,超级用户root ...
- 蓝牙1.1~5.0不同版本特性简介
下面对现阶段主要版本蓝牙技术的特性做一个详细的介绍: 1.版本1.1: 传输率约在748~810kb/s,因是早期设计,容易受到同频率之间的类似通信产品干扰,影响通讯质量.这个初始版本支持Stereo ...
- mysql3819错误,MySQL 8.0新特性 ― 检查性约束的使用简介
前言 在MySQL 8.0版本中,引入了一个非常有用的新特性 ― 检查性约束,它可以提高对非法或不合理数据写入的控制能力:接下来我们就来详细了解一下. 检查性约束 创建.删除与查看 (1)可以在建表时 ...
- Maven 学习 (0) Maven 简介
2019独角兽企业重金招聘Python工程师标准>>> Maven 学习 (0) Maven 简介 什么是 Maven? Apache Maven 是一个软件项目的管理和理解工具.M ...
- python简述列表特征_python高级特性简介
Python中的五种特性:切片,迭代,列表生成式,生成器,迭代器. 切片 切片就相当于其他语言中的截断函数,取部分指定元素用的. L = list(range(100)) #利用切片取部分元素 pri ...
- mysql 直方图统计_MySQL 8.0 新特性之统计直方图
原标题:MySQL 8.0 新特性之统计直方图 | 译者简介 译者 韩杰·沃趣科技MySQL数据库工程师 熟悉mysql体系架构.主从复制,熟悉问题定位与解决 出品 沃趣科技 原文链接: https: ...
- Redis 6.0新特性——ACLs
简介 Redis在6版本之前是没有权限的概念的,所以所有连接的客户端都可以对Redis里面的数据进行操作,也可以使用所有高危命令,这样就可能存在Redis直接down掉或者数据被全部清空的情况. 当执 ...
最新文章
- [iOS Animation]-CALayer 图层几何学
- 【转载】YOLOV详解
- electron 样式不加载_electron-vue,启动之后没了样式和图片是什么原因呢,请大佬帮忙康康...
- 干货 | 算法工程师入门第一期——罗恒讲深度学习
- 利用linux的df和du命令查看文件和目录的内存占用
- oo面向对象第一单元总结
- Pytorch高阶API示范——DNN二分类模型
- 和Hibernate3.6相比,Hibernate 5.x中的增删改性能降低了
- 今天的天气好热哦!!!
- [C++] 前置++与后置++
- 锐明部标视频设备和博实结设备对部标1078协议支持程度评测对比
- vue前端使用xlsx和 xlsx-style 导出excel,并修改样式
- python基础打卡(9/18)
- VOT2016目标跟踪使用教程
- c语言字符码,C语言字符转ASII码
- rust腐蚀帧数_腐蚀游戏怎么提高帧数 Rust设置隐藏画质提高FPS教程
- centos8 安装kvm
- PHP ab 压力并发测试
- phpstudy端口被占用
- matlab生成任意区间的随机数
热门文章
- Java并发编程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable
- eclipse 运行MapReduce程序错误异常汇总(解决Map not fount)
- Beta版本发布报告
- ubuntu下搭建java web开发环境的详细步骤
- jenkins代理设置
- [笔记].STM32 BOOT[0:1]启动设置
- 百叶窗效果显示图片源码(c#)
- 如何在宝塔面板启用 ASP.NET CORE 网站并自动申请 HTTPS 证书
- .NET 6新特性试用 | ArgumentNullException卫语句
- 使用 Windbg 分析一个 异步操作 引发的 Crash 异常