【发布时间】:2018-09-14 09:54:52
【问题描述】:
我正在尝试构建一个决策树分类器,我有以下代码:
def dtree(data, attrs, target):
data = data[:]
vals = []
for entry in data:
entry_index = attrs.index(target)
vals.append(entry[entry_index])
major = majority(data, attrs, target)
if not data or (len(attrs) - 1) <= 0:
return major
elif vals.count(vals[0]) == len(vals):
return vals[0]
else:
pick = choose(data, attrs, target)
tree = {pick:{}}
for each in get_vals(data, attrs, pick):
new_d = get_data(data, attrs, pick, each)
newAttr = attrs[:]
newAttr.remove(pick)
subtree = dtree(new_d, newAttr, target)
tree[pick][each] = subtree
return tree
地点:
-
data是我的训练数据(33582 x 21)的pandas数据框, -
attrs是数据帧头的列表, -
target是目标属性的字符串名称。 -
vals是一个列表
当我调用此方法时,出现以下错误:
File "dtree_classifier.py", line 176, in dtree
vals.append(entry[entry_index])
IndexError: string index out of range
我不确定那条线是怎么引发错误的,我不知道我应该做些什么来诊断它。
【问题讨论】:
-
你能给我们完整的定义
attrs和vals方法吗?还要给出数据示例,以便您的情况可以重现。 -
@GrigoriyMikhalkin 我有,它在第一个代码块下。我使它更容易阅读。还添加了一些数据的图像
-
我知道了,
attrs是一个列表,那么entry_index = attrs(target)是什么意思? python调用list数据结构的语法无效 -
另外,你给我们
dtree方法的完整定义了吗?因为错误日志中提到的vals.append(entry[entry_index])行不存在 -
@GrigoriyMikhalkin 我已经用其余的方法更新了它。作为记录,您无法找到的行存在于原始代码块中,它在 for 循环中
标签: python pandas anaconda spyder