.net 怎么循环得到数组里的值_提升ML.NET模型的准确性
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模型的准确性相关推荐
- .net 怎么循环得到数组里的值_HashMap 底层实现、加载因子、容量值及死循环
写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址:abel-max/Java-Study ...
- 微信小程序如何从数组里取值_微信小程序获取各种数据值跟设置数据值
微信小程序获取各种数据值跟设置数据值. 修改设置data数组中的某个值://小程序接收后台数据若为数组时,下标最好为默认索引数组,从0开始排序 var articleId ='1'//对应数组中的索引 ...
- 微信小程序如何从数组里取值_微信小程序数据存储与取值详解
在小程序开发的过程,经常要需要这个页面输入的数据,在下一个页面中进行取值赋值. 比如: 在A页面input输入框,输入电话号码,点击添加.需要在B页面电话区域中,显示刚刚输入的电话号码. 因为这是两个 ...
- java 数组的索引值_按索引访问Java数组位置的值
我是 Java的新手,我只是在努力使用数组.我有一段代码,我在编写教程时已经编写过,但我很难理解它,如果有人能向我解释,我会很高兴. 我尝试过各种不同的方法(向我的鸭子解释,写下来等等)并且仍然无法理 ...
- arr数组怎么取值_【JavaScript】Array数组常规使用小结(持续更新......)
一.概述 JavaScript的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象. 二.创建数组四种方式 2.1.字面-隐式创建数组 var movieList = [" ...
- java数组包含某个值_如何检查Java数组是否包含值?
java数组包含某个值 如何检查Java数组是否包含值? (How to Check if Java Array Contains a Value?) There are many ways to c ...
- 微信小程序循环输出数组里的取值
在做的时候,发现小程序是有自己的语法封装的 1,我先通过js获取到后端返回的值 如下: 2,在wxml的显示,是用它的语法循环输出显示,除了语法,这和php数据显示格式一样方便:
- setdata改数组里的值 微信小程序_今日艰难笔记redux小程序随记
redux的前身Flux https://zhuanlan.zhihu.com/p/38050036 Flux的一整套抽象(action,dispatcher,store),在单向数据流的基础上可以提 ...
- html里获取数组里的值,如何从HTML数组获取textarea的值
我想获得下面显示的html表单的数组的值,并使用php进行显示.但我的代码似乎有问题. 请协助.如何从HTML数组获取textarea的值 HTML阵列 <?php echo ''; ?> ...
最新文章
- 杨振宁:宇宙有没有造物者?
- 题目1254:N皇后问题(DFS)
- linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统
- iservice list方法_MyBatis-Plus 通用IService使用详解
- boost::serialization模块实现测试 shared_ptr 序列化的测试程序
- c# 中Stopwatch 类的运用
- Java LocalDate类| ofYearDay()方法与示例
- repcached配置与简单測试
- 车载电脑中控软件_数字图书馆智能化系统集成-ipad中控软件
- python+OpenCV图像处理(十二)车牌定位中对图像的形态学组合操作处理
- 脚本自动定时打开链接_自动化构建系统
- 没有第三个变量的前提下交换两个变量_JavaScript 交换值的方法,你能想到几种?
- c语言课后作业答案指针,C语言程序基础练习题带答案
- SK-Learn之决策树
- 单片机c语言 开方函数,单片机C语言求平方根函数
- 权限管理实现——权限过滤器
- error while loading shared libraries解决办法
- Excel中文本替换函数
- Flutter免费视频第二季-常用组件讲解
- shopee首站入驻哪个国家?哪个国家更好卖?