在ML.NET中,我们公开了许多参数和非参数算法[1]

通常,参数学习器对训练数据持有一定的假设,如果不满足这些假设,训练就会受到极大的阻碍(有时甚至完全不可能)。

最常见的假设是

  • 所有特征的值大致相同;

  • 特征值不太大,也不太小。

违反上述第一个假设会导致学习器训练一个次优模型(甚至是一个完全无用的模型)。违反第二个假设会导致算术错误累积,这通常会完全中断训练过程。

一般来说,如果您使用参数化学习器,您需要确保您的训练数据正确缩放

ML.NET提供了几种内置的缩放算法或“规范化器”:

  • MinMax 规范化器:对于每个特征,我们学习它的最小值和最大值,然后线性地重新缩放它,使值在-1和1之间。

  • 均值-方差规范化器:对于每个特征,计算均值和方差,然后将其线性重缩放为零均值、单位方差。

  • CDF 规范化器:对于每个特征,计算均值和方差,然后将每个值x替换为Cdf(x),其中Cdf是具有这些均值和方差的正态分布的累积密度函数。

  • 装箱规范化器:将特征值离散化为“N”个桶,然后用桶的索引替换每个值,除以“N-1”。

这些规范化器都有不同的属性和权衡,但如果您要用一个来代替另一个,那也没什么大不了的。只需确保在训练线性模型或其他参数化模型时使用规格化器。

ML.NET规范化器的一个重要参数称为fixZero。如果fixZero为true,则零输入始终映射到零输出。在处理稀疏数据时,这一点非常重要:如果不保留零,则会将所有稀疏数据转换为密集数据,这通常是个坏主意。

将规范化器直接包含在ML.NET学习管道中是一种很好的做法:这样可以确保规范化

  • 只是训练数据,而不是你的测试数据,

  • 正确应用于所有新传入的数据,而无需在预测时进行额外的预处理。

下面是演示学习管道规范化的代码片段。它使用Iris数据集:

//Iris类的数据模型private class IrisInputAllFeatures
{[ColumnName("Label"), LoadColumn(4)]public string IgnoredLabel { get; set; }[LoadColumn(0, 3)]public float Features { get; set; }
}// 加载训练数据。
var trainData = mlContext.Data.LoadFromTextFile<IrisInputAllFeatures>(dataPath,// 默认分隔符是tab,但数据集使用逗号。separatorChar: ','
);// 对原始特征应用MinMax规范化。
var pipeline =mlContext.Transforms.NormalizeMinMax("MinMaxNormalized", "Features");// 让我们训练规范化器管道,然后将其应用于相同的数据。
var normalizedData = pipeline.Fit(trainData).Transform(trainData);// 检查结果数据集的一列。
var minMaxValues = normalizedData.GetColumn<float[]>(normalizedData.Schema["MinMaxNormalized"]).ToArray();

欢迎关注我的个人公众号”My IO“参考资料

[1]

参数和非参数算法: https://machinelearningmastery.com/parametric-and-nonparametric-machine-learning-algorithms/

ML.NET Cookbook:(16)什么是规范化?为什么我需要关心?相关推荐

  1. ML.NET Cookbook:(17)如何在分类数据上训练模型?

    一般来说,所有的ML.NET学习器都希望这些特征是一个浮点向量.因此,如果您的一些数据不是一个float,您需要将其转换为float. 如果我们的数据包含"分类"特征(比如&quo ...

  2. ML.NET Cookbook:(7)如何训练回归模型?

    通常,为了在ML.NET中训练任何模型,您将经历三个步骤: 弄清楚训练数据如何以IDataView形式进入ML.NET. 将"学习管道"构建为一系列基本的"运算符&quo ...

  3. ML.NET Cookbook:(18)如何在文本数据上训练模型?

    一般来说,所有的ML.NET学习器都希望这些特征是一个浮点向量.因此,如果您的一些数据不是一个float,您需要将其转换为float. 如果我们想学习文本数据,我们需要从文本中"提取特征&q ...

  4. ML.NET Cookbook:(20)我如何定义自己的数据转换?

    ML.NET有很多内置的转换器,但是我们不可能涵盖所有内容.不可避免地,您将需要执行自定义的用户定义操作.为此,我们添加了MLContext.Transforms.CustomMapping就是为了这 ...

  5. ML.NET Cookbook:(11)如果我的训练数据不在文本文件中怎么办?

    对于ML.NET,通常演示的用例是当训练数据驻留在磁盘的某个地方时,我们使用TextLoader来加载它.然而,在真实的训练场景中,训练数据可以在其他地方:在一堆SQL表中,从日志文件中提取,甚至动态 ...

  6. ML.NET Cookbook:(10)如何使用模型做出一个预测?

    因为任何ML.NET模型都是一个转换器,所以您当然可以使用model.Transform将该模型应用于"数据视图"并以这种方式获得预测. 不过,更典型的情况是,没有我们想要预测的& ...

  7. ML.NET Cookbook:(5)如何查看中间过程数据?

    通常,当我们构建实验时,我们希望确保"到某一时刻"的数据处理产生我们想要的结果.对于ML.NET来说,这不是很容易做到的:因为所有的ML.NET操作都是延迟执行的,所以我们构造的对 ...

  8. ML.NET Cookbook:(4)如何调试实验或预览管道?

    大多数ML.NET数据操作都是'延迟执行'的:声明时,操作符不会立即处理数据,而是验证该操作是否可行.执行被推迟到实际请求输出数据为止.这意味着架构不匹配将在声明时抛出,但是直到执行时才抛出数据错误. ...

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

    通常,一旦一个模型被训练出来,我们也会对"它学到了什么"感兴趣. 例如,如果线性模型为我们认为重要的特征赋予零权重,则可能表明建模存在一些问题.线性模型的权重也可用作对" ...

最新文章

  1. 语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程。...
  2. python自动华 (十四)
  3. AIX系统管理--关于unsuccessful login attempts和account_locked
  4. 记录一下提取文件夹中所有文件名字
  5. visual studio 2005占用cpu100% -_-...
  6. PHP变量的变量——可变变量
  7. linux服务器用户组和权限管,linux 用户管理,用户权限管理,用户组管理
  8. python将excel文件变成txt文件
  9. MySQL5.6多实例安装
  10. python抓包模块
  11. C语言编译-嵌入式系统
  12. 栈空间不够会报错吗_c++如何解决大数组栈内存不够的问题
  13. 计算机培训中学语文研修计划,初中语文个人研修计划书
  14. Java 邮政EMS快递面打印实现 笔记
  15. LaText Error:Environment aligned undefined.
  16. 关于华硕主板的图像输出设置
  17. C++内存管理机制—Primitives笔记
  18. Springboot,SSM及SSH的概念、优点、区别及缺点
  19. CEF3:用CEF3实现最简单的浏览器
  20. 查询2021年甘肃高考成绩位次,2021年甘肃高考位次排名查询,甘肃高考位次所对应的学校...

热门文章

  1. nc65右键生成菜单_DbSchema生成表单和报表,原来如此简单
  2. Arrays.asList 使用细节
  3. Element.shadowRoot
  4. 【NOIP必备攻略】 基本noilinux使用方法
  5. virtualenv模块使用
  6. spring cloud连载第一篇之bootstrap context
  7. [asp.net mvc 奇淫巧技] 04 - 你真的会用Action的模型绑定吗?
  8. iOS duplicate symbol for architecture arm64 解决办法
  9. Bootstrap入门(八)组件2:下拉菜单
  10. 极速理解设计模式系列:2.观察者模式(Observer Pattern)