#machine-learning #random-forest #decision-tree #embedding #pmml
Вопрос:
Следуя этой статье: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7712003/ У меня есть вопрос о том, как применить, например, XSLT, для изменения файла PMML со случайным лесом, чтобы выполнить следующее:-
- встраивание на основе дерева
- пометьте каждый лист дерева идентификатором
- возвращает идентификатор листа, используемый для прогнозирования
- «индивидуализируйте» деревья в лесу: используйте, например, multipleModelMethod=»Цепочка моделей» для создания индивидуальных выходных данных из каждого дерева
поэтому, если у меня есть случайный лес с 2 деревьями, каждое из которых имеет 5 конечных листьев, я хотел бы получить результат
один горячий код «t.l», где t=идентификатор дерева и l=идентификатор листа 0.0 0.1 0.2 0.3 0.4 1.0 1.1 1.2 1.3 1.4 1 0 0 0 0 0 1 0 0 0
Спасибо
Ответ №1:
как применить, например, XSLT, для изменения файла PMML
Подумайте об использовании для этого соответствующей библиотеки PMML, такой как JPMML-модель. Он предоставляет API для посетителей специального назначения для обхода и изменения структур данных PMML.
возвращает идентификатор листа, используемый для прогнозирования
Добавьте следующий OutputField
элемент ко всем TreeModel/Output
элементам:
<OutputField name="id(node)" feature="entityId" dataType="string" optype="categorical"/>
При этом используется механизм «идентификатор сущности» для извлечения идентификатора выигрышного Node
элемента.
Нет необходимости вручную помечать узлы. Если Node@id
атрибут отсутствует, то возвращаются неявные индексы на основе 1.
«индивидуализируйте» деревья в лесу
Деревья в модели случайного леса могут быть идентифицированы с помощью Segment@id
атрибута.
Например, следующий OutputField
элемент вернет идентификатор выигрышного узла седьмого дерева решений:
<OutputField name="id(node, 7)" segmentId="7" feature="entityId" dataType="string" optype="categorical"/>
Комментарии:
1. Спасибо — это ценная информация! Этот последний бит теперь отсутствует: как я могу определить все идентификаторы конечных элементов, чтобы поместить их все в вывод. Я знаю, что это дает мне огромное количество пустых столбцов, но мне нужно одно горячее кодирование всех конечных листьев.
2. Вам не нужно однократно кодировать идентификаторы узлов на уровне PMML. Просто настройте свою сетевую модель так, чтобы она принимала категориальные целочисленные функции — по одной функции на дерево, и допустимый диапазон значений указанных функций известен заранее. Например, при использовании случайных лесов sciikit-learn вы получаете сбалансированные бинарные деревья, которые имеют очень жесткую древовидную структуру. Если вы подумаете об этом, то сеть действительно должна быть в состоянии самостоятельно определить «внутреннюю структуру» функций во время обучения.
3. Этот вопрос SO следует сформулировать следующим образом: «Как я могу подключить вывод модели ансамбля дерева решений к входу модели нейронной сети (с использованием конструкций языка PMML)». Одно горячее кодирование-это слишком низкоуровневое решение. С PMML вы работаете на гораздо более высоком уровне (например, категориальные функции можно использовать как есть), и решение концептуально отличается/лучше.
4. Еще раз спасибо — я думаю, что решение найдено : О )