Вычисление orig, norm атрибутов NormContinous в PMML - PullRequest
0 голосов
/ 25 сентября 2018

Обзор

В настоящее время я работаю над исполнителем PMML-модели нормализации в c #.

Эти модели нормализации 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, norm в значения min, max.Но я просто не могу понять, как рассчитываются эти значения оригинала / нормы и как они соотносятся с мин / макс.

Вопрос

Поэтому я спрашиваю, знают ли некоторые уравнениепреобразовать ориг / норму в мин / макс и обратно.Или кто-то может объяснить, как напрямую использовать значения orig / norm для нормализации / денормализации моих полей?

Дальнейшее объяснение

РЕДАКТИРОВАТЬ: Это выглядит так, как будто я не ясно указал, в чем проблематочно так же, вот другой подход:

Я пытаюсь получить атрибут набора данных нормализованный в диапазоне от 0-1 , используя Минор-Макс метод нормализации (он же Feature Scaling).Используя инструмент анализа данных Knime, я могу сделать это и экспортировать мое «масштабирование» как модель PMML.(Примером этого является приведенный выше XML)

С этими нормализованными атрибутами я тренирую свою модель MLP.Теперь, если я экспортирую свою модель MLP как PMML, мне нужно ввести нормализованные значения и получить нормализованный вывод при расчете прогноза.(Вычисление сети MLP уже работает)

В развернутом сценарии, когда Knime не может выполнить эту нормализацию для меня, я хочу использовать мою модель нормализации.Как уже было сказано, я знаю теорию о Feature Scaling и могу легко вычислить де-нормализацию , если мне предоставлены min и max моего атрибута.Проблема в том, что в PMML есть еще одна, скажем, «нотация» для сохранения этой минимально-максимальной информации, которая каким-то образом находится внутри значений orig и norm.

Так что в конечном итоге я ищу способконвертируйте orig / norm в min / max или как «кодируется» информация min / max в значения orig / norm.

Дополнительная информация

[Почему эта «кодировка» выполняется в первую очередь, по-видимому, из-за соображений скорости вычислений (что не важно в моем сценарии) и более простого кодирования мин / макс нормализацииинформация для диапазонов, отличных от 0-1.]

Пример # 1

Для примера: допустим, я хочу нормализовать массив [0, 1, 2, 4, 8]в диапазоне 0-1.Ясно, что ответом является [0, 0,125, 0,25, 0,5, 1], вычисленное как Feature Scaling с min = 0, max = 8. Легко.Но теперь, если я посмотрю на модель нормализации PMML:

<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>

Пример # 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.3333333333333333"/>
      <LinearNorm orig="1.0" norm="0.0"/>
    </NormContinuous>
  </DerivedField>
</TransformationDictionary>

Вопрос

Так как мне масштабировать с помощью orig / norm или вычислять min / max из этих значений?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Нашел ответ.Внимательно прочитав еще раз через Документацию (что крайне смущает ИМО), я наткнулся на это предложение:

Последовательность элементов LinearNorm определяет последовательность точек для пошаговой линейной интерполяциифункция.Последовательность должна содержать как минимум два элемента.Внутри NormContinous элементы LinearNorm должны быть строго отсортированы по возрастанию значения orig.

Что в основном объясняет все это.Нормализация в PMML выполняется с помощью ступенчатой ​​интерполяции только с 2 точками.Так что на самом деле это просто простая функция преобразования.

В случае нормализации в диапазоне 0-1 это даже становится проще, так как две точки всегда будут в x1=0 и x2=1 (значения оригинала).И поэтому всегда будет иметь их пересечение оси y при orig = 0 norm-value .Что касается наклона функции, ее также очень легко вычислить по slope = (y2-y1)/(x2-x1) = (y2-y1)/(1-0) = y2-y1, которые являются просто 2-мя нормальными значениями.

Таким образом, чтобы получить нашу интерполяционную функцию, которая всегда будет полиномом 1-го рангамы просто вычисляем:

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)) Этоиспользуется для отмены нормализации

Надеюсь, это поможет всем, кто когда-нибудь также переживет трудности с реализацией собственного механизма исполнения PMML и застрянет в этой теме.

0 голосов
/ 25 сентября 2018

То, что я собираюсь сказать, зависит от того, что вы подразумеваете под (min, max).

Я собираюсь предположить, что min равно значению, где 0,5% от общего значения лежит ниже, а max равно значениюгде 0,5% от общего числа лежит выше.

Если мы согласимся с этим, среднее симметричное распределение будет иметь среднее значение приблизительно mean ~ (max+min)/2.(Вы называете среднее происхождение.)

Шесть стандартных отклонений охватывают 99% нормального распределения, поэтому стандартное отклонение составляет приблизительно sigma ~ (max-min)/6.

Определение нормализованных z = (x - mean)/sigma.

С этими значениями вы можете вернуться к денормализованному распределению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...