«Помочь» дереву решений, связав вместе 2 объекта - PullRequest
0 голосов
/ 31 октября 2018

Предполагая, что в моем наборе данных есть 2 (или более) функций, которые наверняка связаны (например, функция B указывает на значимость функции A), есть ли способ, которым я мог бы разработать дерево решений, которое связывает оба функции вместе (очевидное разделение было бы, если бы функция B была достаточно большой, разделенной на A, и если не игнорировать A)? Другими словами: я ищу способ «помочь» моему дереву решений не тестировать функцию A перед тестированием функции B. Кроме того, я обращаю внимание не на улучшение каждой функции в отдельности, а на улучшение «B и послесловий». А ". Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

У вас есть несколько возможностей,

Добавление новых функций, кодирующих то, что вы хотите сказать

Вы можете задать третью функцию, которая представляет собой линейную, полиномиальную или логическую комбинацию функций A и B, и надеяться, что система сама все поймет. Для этого sklearn предлагает класс полиномов класса и все составляющие модули numpy.

Например, если функция B кодирует величину релевантности функции A. Предположим, что B переходит от 0 до 10, кодируя величину релевантности. Вы можете создавать новые функции A_0, A_2, A_i, ..., A_9 , которые являются значением A, если B> i и -10000 повсюду в другом месте.

Вы также можете создать третью функцию: A + B или A B или A B ^ 2. Проблема в том, что им сложнее дать хорошую интерпретацию результатов после подбора дерева решений.

Разделите ваши данные перед рукой

Вы можете разделить ваши данные, используя критерии, которые вы хотите, а затем подогнать разные деревья для каждого поднабора данных. Например, вы можете разделить ваши данные на две группы, B> 5 ​​и B <= 5 </p>

Создание разных деревьев

Вы можете уместить первичное дерево только для объектов из B, а затем для каждого листа дерева решений теперь можно уместить новое дерево с учетом функций из A и B. С точки зрения кода, это может привести к путанице, так как вам потребуется обработать несколько классификаторов и обеспечить достаточное количество выборок для каждого листа, чтобы можно было разместить другие деревья.

Создайте свою собственную функцию сплиттера

Если вы действительно хотите узнать, как дерево решает каждый шаг, вам нужно будет сделать то, что предлагает Aditya, в этом случае вам нужно будет создать свою собственную функцию сплиттера.

В sklearn реализован сплиттер по умолчанию здесь

Вам нужно будет изменить его, чтобы учесть все переменные вашей проблемы

0 голосов
/ 31 октября 2018

Вы можете использовать параметр splitter для этого в DecisionTreeClassifier.
Для этого создайте свою собственную реализацию.

И использовать:

my_decision_tree = sklearn.tree.DecisionTreeClassifier(splitter=mySplitter)
...