Вопрос по индексу в коде дерева решений в Python - PullRequest
0 голосов
/ 20 марта 2020

Я строю дерево решений, следуя следующему руководству и базовому коду:

https://www.youtube.com/watch?v=LDRbO9a6XPU и https://github.com/random-forests/tutorials/blob/master/decision_tree.py

Однако при загрузке моих собственных наборов данных в базу выдается следующая ошибка

  File "main.py", line 245, in find_best_split
  values = set([row[col] for row in rows])  # unique values in the column
  File "main.py", line 245, in <listcomp>
  values = set([row[col] for row in rows])  # unique values in the column
  IndexError: list index out of range

И я не совсем уверен, почему это происходит?

Код:


def find_best_split(rows):
    """Find the best question to ask by iterating over every feature / value
    and calculating the information gain."""

    print("All rows in find_best_split are: ",len(rows))
    best_gain = 0  # keep track of the best information gain
    best_question = None  # keep train of the feature / value that produced it
    current_uncertainty = gini(rows)
    n_features = len(rows[0]) - 1  # number of columns

    for col in range(n_features):  # for each feature

        values = set([row[col] for row in rows])  # unique values in the column
        print("Just read the col: ",col)
        print("All the values are: ",len(values))

        for val in values:  # for each value

            question = Question(col, val)

            # try splitting the dataset
            true_rows, false_rows = partition(rows, question)

            # Skip this split if it doesn't divide the
            # dataset.
            if len(true_rows) == 0 or len(false_rows) == 0:
                continue

            # Calculate the information gain from this split
            gain = info_gain(true_rows, false_rows, current_uncertainty)

            # You actually can use '>' instead of '>=' here
            # but I wanted the tree to look a certain way for our
            # toy dataset.
            if gain >= best_gain:
                best_gain, best_question = gain, question

    return best_gain, best_question

Я добавил отпечатки для ясности, он печатает:


Length of all rows in find_best_split are:  200
Just read the col:  0
All the values length are:  200

, но с базовым c фруктовым примером, с которым он пришел, этого не произошло, я просто не понимаю. Вся помощь очень ценится!

...