Как я могу создать индексированный фрейм данных после прогнозирования значений в дереве решений - PullRequest
0 голосов
/ 13 февраля 2019

Я создаю алгоритм дерева решений

У меня есть 4 объекта с 4 возможными значениями на каждом ('a', 'b', 'c', 'd')

Y (прогнозируемые значения) может быть 0 или 1 или 2

У меня есть одна функция для построения дерева, затем я использую функцию прогнозирования (я создаю ее на данный момент, поэтому я не публикую код) для прогнозирования значений на основе этого дерева решений.

Вот прототип моей функции

def dt_predict(x, features_label, tree):

, где:

  • x - пандх DataFrameсодержит все данные (4 столбца по 4 возможных значения в каждом)
  • features_label - заголовок каждого столбца данных
  • tree - обученное дерево решений a (вид связанного спискакласса узла)

node class:

class node:
    def __init__(self):
        self.level = 0
        self.option = ""
        self.feature = ""
        self.is_leaf_node = False
        self.is_pure_node = False
        self.max_value_item = ""
        self.max_value = 0
        self.possible_values_names = []
        self.possible_values_nodes = []

Все это должно было дать вам общее представление о проблеме.Теперь моя проблема не в том, как предсказать то или иное значение, а в том, как отслеживать индексы.

В моей функции прогнозирования я прохожу все дерево (узлы) и последовательно уменьшаю xDataFrame я передаю в качестве аргумента.Поэтому у меня всегда есть индекс каждой строки данных, но я не знаю, как создавать и вставлять в новую панду dataFrame значение y и индекса.

def dt_predict(x, features_label, tree):
   if tree.is_leaf_node == True:
       #return new pandas dataframe with x indexes and tree.max_value_item (in this case 0 or 1 or 2)
   #loop through possible values, filter x and call dt_predict recursively
   ...

Пожалуйста, дайте мне знать, если это не ясно.

РЕДАКТИРОВАТЬ:

, чтобы быть более понятным, представьте, что у меня есть

index | x1 | x2 | x3 | x4 |
 123  |  a |  c | a  |  b |
 ...
 35   |  b |  d | a  |  a |

Я хочу, чтобы это было:

index |  Y |
 123  |  2 |
 ...
 35   |  2 |

1 Ответ

0 голосов
/ 14 февраля 2019

Судя по комментариям, я не уверен, достаточно ли информации для продолжения.Но если вы dt_predict функция выводите только один прогноз, основанный на одной строке входных объектов, то его можно использовать для добавления столбца прогнозов обратно в исходный кадр данных, как показано ниже:

def dt_predict(df_row):
    features=df_row.values
    #magic goes here to predict based on features
    return predicted_class

df['prediction']=df.apply(dt_predict, axis=1)
...