C ++ хранилище дерева решений

У меня есть дерево решений.
Я передаю этому дереву решений некоторые входные значения.
Дерево решений затем возвращает значение.

Входными значениями могут быть «количество детей», «возраст в годах» и т. Д.
Дерево решений может затем возвратить (например) определенное значение, которое будет указывать, сколько автомобилей принадлежит семье или что-то в этом роде.

Это дерево решений (если преобразовано в оператор if-then) будет выглядеть так:

int i=0;

if (ownedHouses==0)
{
if (numberOfChildren==4)
{
if (ageFather==39)
{
if (incomeFamily==40000)
{
if (carsAlreadyCrashed==1)
{
i=3;
}
else
{
if (carsAlreadyCrashed==2)
{
if (insurancePaysForCrashes==1)
{
i=5;
}
}
else
{
i=4;
}
}
else
{
i=11;
}
}
}
else
{
i=2;
}
}
else
{
i=9;
}
}
else
{
i=22;
}
else
{
i=8;
}

Это всего лишь пример. На самом деле результирующее утверждение if-then будет абсолютно огромным. Хотя я могу анализировать данные и создавать из них такое if-then, я не могу использовать такой большой цикл if-then-loop в своем программном обеспечении.

Поэтому я ищу другой способ интеграции дерева решений в мое программное обеспечение.

Я видел подходы, в которых данные дерева решений (в какой бы форме они ни предоставлялись …) анализировались во время выполнения, а затем из него создавались классы с корнем, узлами и листьями.

Для моих целей это не достаточно быстро.

У кого-нибудь есть другая идея?

Спасибо вам за помощь.

Изменить: я изменил некоторые значения на реальные значения, чтобы сделать смысл более ясным.

0

Решение

Самая быстрая реализация, которую я знаю, реализована в ALGLIB.
Дерево решений хранится в виде массива двойников.

  • Конечный узел — два значения {-1, данные}.
  • Нелистовой узел — три значения {input_value_index, threshold, right_branch_offset}.

Вы можете найти реализацию этого подхода в dforest.dfprocessinternal

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]