Пишу программа которая будет строить деревья решений. По книжке Тоби Сегарана “Программируем коллективный разум”. Там весь код есть. Я его собрал, программа работает. Вот только одна процедура, а именно отсечения ветвей не работает. Так как я про Python вообще ничего не знаю(Мне нужна программа ивсе), я не могу отладить ошибку.
Прошу помощи, ошибка в процедуре “prune”.
Для того чтобы долго не разбиратся в коде, вот команды по очереди:
import treepredict - это понятно
tree=treepredict.buildtree(treepredict.my_data) - это, собственно построение дерева.
treepredict.prune(tree,0.1) - а это и есть отсечение и тут у меня ошибки.
Надеюсь на вашу помощь. Код прилагается.
А вот код процедуры.
def prune(tree,mingain): if tree.tb.results==None: prune(tree.tb,mingain) if tree.fb.results==None: prune(tree.fb,mingain) if tree.tb.results!=None and tree.fb.results!=None: tb=[] fb=[] for v,c in tree.tb.results.items( ): tb+=[[v]]*c for v,c in tree.fb.results.items( ): fb+=[[v]]*c delta=entropy(tb+fb)-(entropy(tb)+entropy(fb)/2) if delta<mingain: tree.tb,tree.fb=None,None tree.results=uniquecounts(tb+fb)
А Python пишет
Traceback (most recent call last):
File “<pyshell#22>”, line 1, in <module>
treepredict.prune(tree,0.1)
File “C:\Python26\treepredict.py”, line 974, in prune
prune(tree.tb,mingain)
File “C:\Python26\treepredict.py”, line 974, in prune
prune(tree.tb,mingain)
File “C:\Python26\treepredict.py”, line 974, in prune
prune(tree.tb,mingain)
File “C:\Python26\treepredict.py”, line 986, in prune
delta=entropy(tb+fb)-(entropy(tb)+entropy(fb)/2)
UnboundLocalError: local variable ‘tb’ referenced before assignment