Я строю дерево решений, следуя следующему руководству и базовому коду:
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 фруктовым примером, с которым он пришел, этого не произошло, я просто не понимаю. Вся помощь очень ценится!