Обзор
В настоящее время я работаю над исполнителем 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 из этих значений?