PMML中NormContinous的orig,norm属性的计算

时间:2018-09-25 14:09:47

标签: c# math pmml

概述

我目前正在使用c#开发规范化PMML-Model执行器。

这些PMML规范化模型如下所示:

 <TransformationDictionary>
    <DerivedField displayName="BU01" name="BU01*" optype="continuous" dataType="double">
      <Extension name="summary" extender="KNIME" value="Min/Max (0.0, 1) normalization on 17 column(s)"/>
      <NormContinuous field="BU01">
        <LinearNorm orig="0.0" norm="-0.6148417019560395"/>
        <LinearNorm orig="1.0" norm="-0.6140350877192982"/>
      </NormContinuous>
    </DerivedField>
(...)

我确实知道理论上使用min-max规范化是如何工作的

z_i = (x_i - min(x)) / (max(x) - min(x))

将数据集归一化为0-1范围,显然不难逆转此方程。

问题

因此要执行规范化和非规范化,我必须以某种方式将此orig规范值转换为最小,最大值。但是我无法弄清楚这些orig / norm值是如何计算的以及它们与min / max的关系。

问题

所以我要问的是,是否有人知道将orig / norm转换为min / max并返回的方程。还是有人能够解释如何直接使用orig / norm值对我的字段进行规范化/非规范化?

进一步的解释

编辑:好像我没有清楚说明问题到底是什么一样,所以这是另一种方法:

我尝试使用Min-Max normalization method(又称{},将数据集的属性 归一化到0-1的范围内。 {1}})。使用数据分析工具Knime可以执行此操作,并导出“缩放” 作为PMML模型。 (示例就是上面提供的XML)

使用这些规范化的属性,我训练了我的MLP模型。现在,如果将我的MLP模型导出为PMML,则在计算预测时必须输入归一化值并获得归一化输出。 (计算MLP网络已经可以了)

在Knime无法为我执行此规范化的部署方案中,我想使用我的规范化模型。如前所述,我确实了解Feature Scaling的理论,并且可以轻松地计算出归一化/归一化(如果我提供了属性的min和max )。问题在于,PMML还有另一个“符号”用于保存此最小-最大信息,该信息以某种方式位于Feature Scalingorig值内。

因此,我最终要寻找的是一种将orig / norm转换为min / max或如何将min / max信息“编码”为orig / norm值的方法。

其他信息

[为什么首先进行这种“编码”似乎是因为计算速度原因(在我的场景中这并不重要),并且更容易编码除0-1以外的范围的最小/最大规范化信息。] < / p>

示例1

举个例子: 假设我想将[0、1、2、4、8]的数组标准化为0-1的范围。显然答案是[{,0.125,0.25,0.5,1],由norm计算得出,最小值= 0,最大值= 8。但是现在,如果我看一下PMML标准化模型:

Feature Scaling

示例#2

[1,2,4,8]-> [0,0.333,0.667,1] 使用:

<TransformationDictionary>
  <DerivedField displayName="column1" name="column1*" optype="continuous" dataType="double">
    <Extension name="summary" extender="KNIME" value="Min/Max (0.0, 1) normalization on 1 column(s)"/>
    <NormContinuous field="column1">
      <LinearNorm orig="0.0" norm="0.0"/>
      <LinearNorm orig="1.0" norm="0.125"/>
    </NormContinuous>
  </DerivedField>
</TransformationDictionary>

问题

那么我应该如何用orig / norm进行缩放或从这些值计算min / max?

2 个答案:

答案 0 :(得分:0)

我要说的话取决于(min, max)的意思。

我将假设min等于总值的0.5%的值低于最大值,max等于总值的0.5%的值高于值。

如果我们对此表示同意,则对称正态分布的平均值约为mean ~ (max+min)/2。 (您称平均值为原点。)

六个标准偏差包含正态分布的99%,因此标准偏差约为sigma ~ (max-min)/6

归一化的z = (x - mean)/sigma的{​​{3}}。

有了这些值,您就可以回到非正规分布。

答案 1 :(得分:0)

找到了答案。在仔细阅读了Documentation(这使imo变得极为混乱)之后,我遇到了这句话:

  

LinearNorm元素的序列定义了逐步线性插值函数的点序列。该序列必须至少包含两个元素。在NormContinous中,必须按orig的升序严格对LinearNorm元素进行排序。

基本上解释了这一切。通过使用仅2个点的逐步插值来完成PMML中的归一化。所以实际上只是一个简单的转换函数。

在归一化为0-1的情况下,两个点将始终位于x1=0x2=1(原始值)处,会变得更加容易。因此,它们的y 轴截距始终为orig = 0 norm-value 。就函数的斜率而言,通过slope = (y2-y1)/(x2-x1) = (y2-y1)/(1-0) = y2-y1来计算也很容易,f(x) = ax + b = (y2-y1)x + y1 = (norm(orig=1)-norm(orig=0) * x + norm(orig=0)只是两个范数。

因此,要获得始终为多项式一年级的插值函数,我们只需计算:

x = (f(x) - norm(orig=0)) / (norm(orig=1)-norm(orig=0))用于标准化

现在我们可以计算逆数:

{{1}}用于去规范化

希望这可以帮助每个有一天还会遇到实施自己的PMML执行器引擎的麻烦并陷入这一话题的人。