ML.NET是一个面向.NET开发人员的开源、跨平台的机器学习框架。

使用ML.NET,您可以轻松地为诸如情绪分析、价格预测、销售分析、推荐、图像分类等场景构建自定义机器学习模型。

ML.NET从0.8版开始,支持评估特性的重要性,从而了解哪些列对于预测最终值更重要。

排列特征的重要性在于,突出最重要的特征,以便理解哪些特征必须包括,哪些不用包括;从数据集中排除一些特性意味着减少噪音,结果会更好。

因此,通过PFI,我们可以了解在我们的学习pipeline中什么是最重要的列,并使用它们来预测值。

Pipeline

第一步与预测值的步骤相同,因此必须构建pipeline。

例如,一个标准pipeline可以是这样的:

var mlContext = new MLContext();var dataView = MlContext.Data.LoadFromTextFile(dataPath, separator, hasHeader: false);var pipeline = MlContext.Transforms.CopyColumns("Label", _predictedColumn.ColumnName).Append(MlContext.Transforms.Concatenate(_featureColumn, _concatenatedColumns));

这是一个非常简单的pipeline,从文件中加载数据,复制label列并添加feature列。

现在pipeline已经配置好了,我们可以构建模型了。

Model

建立模型意味着获取pipeline、附加选择算法,对其进行拟合和变换。

var tranformedDataView = pipeline.Append(MlContext.Regression.Trainers.LbfgsPoissonRegression()).Fit(DataView).Transform(DataView);

结果是一个转换后的数据视图,其中应用了pipeline转换所有数据,我们将在Permutation Feature Importance方法中使用这些转换。

Metrics

为了获得PFI指标,除了转换后的数据视图,我们还需要一个转换器:

var transformer = pipeline.MlContext.Regression.Trainers.LbfgsPoissonRegression().Fit(tranformedDataView);

现在我们可以得到度量:

var permutationMetrics = pipeline.MlContext.Regression.PermutationFeatureImportance(transformer, transformedDataView, permutationCount: 3);

使用permutation count参数,我们可以指定希望为回归度量执行的观察次数。

结果是一个回归度量统计数据的数组,并在一个特定的度量上可用的排序,比如平均值:

var regressionMetrics = permutationMetrics.Select((metric, index) => new { index, metric.RSquared }).OrderByDescending(features => Math.Abs(features.RSquared.Mean));

有了循环,我们现在可以打印的指标:

foreach (var metric in regressionMetrics){    if (metric.index >= transformedData.Schema.Count || (transformedData.Schema[metric.index].IsHidden || transformedData.Schema[metric.index].Name == "Label" || transformedData.Schema[metric.index].Name == "Features"))    continue;    Console.WriteLine($"{transformedData.Schema[metric.index].Name,-20}|\t{metric.RSquared.Mean:F6}");}

在这个示例的情况下,输出是:

有了这个统计数据,我们可以了解什么是最重要的特性,并将更改应用到pipeline构建中。

这篇文章的源代码可以在GitHub项目上找到。

.net 怎么循环得到数组里的值_提升ML.NET模型的准确性相关推荐

  1. .net 怎么循环得到数组里的值_HashMap 底层实现、加载因子、容量值及死循环

    写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址:abel-max/Java-Study ...

  2. 微信小程序如何从数组里取值_微信小程序获取各种数据值跟设置数据值

    微信小程序获取各种数据值跟设置数据值. 修改设置data数组中的某个值://小程序接收后台数据若为数组时,下标最好为默认索引数组,从0开始排序 var articleId ='1'//对应数组中的索引 ...

  3. 微信小程序如何从数组里取值_微信小程序数据存储与取值详解

    在小程序开发的过程,经常要需要这个页面输入的数据,在下一个页面中进行取值赋值. 比如: 在A页面input输入框,输入电话号码,点击添加.需要在B页面电话区域中,显示刚刚输入的电话号码. 因为这是两个 ...

  4. java 数组的索引值_按索引访问Java数组位置的值

    我是 Java的新手,我只是在努力使用数组.我有一段代码,我在编写教程时已经编写过,但我很难理解它,如果有人能向我解释,我会很高兴. 我尝试过各种不同的方法(向我的鸭子解释,写下来等等)并且仍然无法理 ...

  5. arr数组怎么取值_【JavaScript】Array数组常规使用小结(持续更新......)

    一.概述 JavaScript的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象. 二.创建数组四种方式 2.1.字面-隐式创建数组 var movieList = [" ...

  6. java数组包含某个值_如何检查Java数组是否包含值?

    java数组包含某个值 如何检查Java数组是否包含值? (How to Check if Java Array Contains a Value?) There are many ways to c ...

  7. 微信小程序循环输出数组里的取值

    在做的时候,发现小程序是有自己的语法封装的 1,我先通过js获取到后端返回的值 如下: 2,在wxml的显示,是用它的语法循环输出显示,除了语法,这和php数据显示格式一样方便:

  8. setdata改数组里的值 微信小程序_今日艰难笔记redux小程序随记

    redux的前身Flux https://zhuanlan.zhihu.com/p/38050036 Flux的一整套抽象(action,dispatcher,store),在单向数据流的基础上可以提 ...

  9. html里获取数组里的值,如何从HTML数组获取textarea的值

    我想获得下面显示的html表单的数组的值,并使用php进行显示.但我的代码似乎有问题. 请协助.如何从HTML数组获取textarea的值 HTML阵列 <?php echo ''; ?> ...

最新文章

  1. 杨振宁:宇宙有没有造物者?
  2. 题目1254:N皇后问题(DFS)
  3. linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统
  4. iservice list方法_MyBatis-Plus 通用IService使用详解
  5. boost::serialization模块实现测试 shared_ptr 序列化的测试程序
  6. c# 中Stopwatch 类的运用
  7. Java LocalDate类| ofYearDay()方法与示例
  8. repcached配置与简单測试
  9. 车载电脑中控软件_数字图书馆智能化系统集成-ipad中控软件
  10. python+OpenCV图像处理(十二)车牌定位中对图像的形态学组合操作处理
  11. 脚本自动定时打开链接_自动化构建系统
  12. 没有第三个变量的前提下交换两个变量_JavaScript 交换值的方法,你能想到几种?
  13. c语言课后作业答案指针,C语言程序基础练习题带答案
  14. SK-Learn之决策树
  15. 单片机c语言 开方函数,单片机C语言求平方根函数
  16. 权限管理实现——权限过滤器
  17. error while loading shared libraries解决办法
  18. Excel中文本替换函数
  19. Flutter免费视频第二季-常用组件讲解
  20. shopee首站入驻哪个国家?哪个国家更好卖?

热门文章

  1. 重磅!2020中国高校毕业生月薪排名:清华第1,共计24高校月薪过万
  2. Linux停用“黑名单”,因为这是敏感词,涉嫌种族歧视
  3. 中国 83 所高校上榜,清华位列第 15!QS 2021 年世界大学排名出炉
  4. golang源码分析:调度器chan调度
  5. Flask开发服务器启动方式
  6. 线性回归之梯度下降法介绍
  7. 使用OpenCV进行图像全景拼接
  8. 基础知识——操作列表(三)
  9. JavaScript 复制对象与Object.assign方法无法实现深复制
  10. IntelliJ IDEA详细配置