Питон, Построение Статистических Деревьев. Структура для хранения переходов и рекурсии - PullRequest
0 голосов
/ 10 мая 2019

Я новичок в python и пытаюсь на основе некоторых переходов (цифры используются для обозначения переходов), чтобы рассчитать возможные переходы и их процент (как часто они происходят).

Я нашел много кода и библиотек в python для визуализации деревьев, но пока ничего не нужно для обрезки деревьев, чтобы вернуть оставшиеся листья.

Итак, я начал кодировать это сам, начиная с небольшой таблицы в качестве набора данных, который также можно использовать в этом посте.

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

Итак, давайте предположим, что набор данных называется smallData, а входной вектор имеет длину 2. На входе обозначены узлы пройденного дерева.

smallData=pd.DataFrame(np.array([[1,2,3,4,5],[4,5,6,7,8],[1,2,3,3,3],[1,2,2,3,3],[1,2,3,5,3]]),columns=range(0,5))
inputs=[1,2]

Для таблицы выше первой строки [1,2,3,4,5] означает, что после перехода 1 произошел переход 2, затем переход 3 и так далее. Кроме того, каждая строка строки соответствует отдельному пользователю, и разрешены все типы переходов (оставаясь в том же состоянии перехода или изменяясь)

Затем я сделал простую функцию, которая на основе ввода возвращает вам статистику следующего перехода.

def nextStep(inputs):
    i=len(inputs)
    # The statement below only works with input of length 2. How to make it work for different input lengths?
    subTable = smallData[(smallData[0]==inputs[0]) & (smallData[1]==inputs[1])]
    nextIndexes=subTable.loc[:,i+1].value_counts(normalize=True)
    return nextIndexes

затем вызывая функцию как:

step=nextStep(inputs)
print(step)

Я получаю результаты, что три перехода могут произойти с их статистикой

Out[265]: 
3    0.50
5    0.25
4    0.25

Теперь прибывает часть, которую я застреваю, для этих трех выходов мне нужно сохранить три новых списка, которые показывают потенциальные переходы. Я делаю это в настоящее время вручную :(

inputs1=inputs+[step.index.values[0]]
inputs2=inputs+[step.index.values[1]]
inputs3=inputs+[step.index.values[2]]

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

  1. Проблема в том, что функция nextStep работает только с двумя аргументов а не три.
  2. Тогда я не знаю, как я могу динамически создавать списки и подсписки, чтобы сохранить эту древовидную структуру (а. Переходы с листьев с их б. соответствующая статистика).
  3. Я думаю, что проблема не может быть решена с помощью циклов for, поскольку она больше напоминает мне рекурсивные проблемы.

Не могли бы вы помочь мне разобраться с этими тремя недостающими частями?

Я хотел бы заранее поблагодарить вас за ваш ответ. С уважением Alex

P.S Я постарался написать этот пост как можно лучше P.S2 Я «ожидал», что у питона уже есть такая библиотека для построения статистических деревьев, а также для ее использования для вывода.

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