Beispiel #1
0
def gbm(X, Y, M=50, gradient=gradient_quad):
    N = len(Y)
    Model = [np.mean(Y)]
    for m in range(M):
        print '%d:%f' % (m, RSS(Model, X, Y))
        residual = np.zeros(N)
        for i in range(N):
            residual[i] = gradient(Model, X[i], Y[i])
        #print residual
        new_tree = RegressionTree.buildtree(X, residual, max_depth=1)
        print 'New tree builded.'
        #fit(Model, new_tree)
        print 'Tree fited.'
        Model.append(new_tree)
    print '%d:%f' % (m, RSS(Model, X, Y))
    return Model
Beispiel #2
0
def predict(Model, x, v=0.05):
    f = Model[0]
    for model in Model[1:]:
        res = RegressionTree.predict(x, model)
        f += res*v
    return f
Beispiel #3
0
        right = x+(w1+w2)/2
        
        draw.text((x-20,y-10), str(tree.col)+':'+str(tree.value), (0, 0, 0))
        
        draw.line((x, y, left+w1/2, y+100), fill=(255, 0, 0))
        draw.line((x, y, right-w2/2, y+100), fill=(255, 0, 0))
        
        drawnode(draw, tree.left_child, left+w1/2, y+100)
        drawnode(draw, tree.right_child, right-w2/2, y+100)
    else:
        txt = '%d' % tree.result
        draw.text((x-20, y), txt, (0, 0, 0))

if __name__ == '__main__':
    inputs, output, Ttype = prostate.loaddata()
    train_data, train_out, test_data, test_out = RegressionTree.cookdata(inputs, output, Ttype)
    P = len(train_data[0])
    print 'Training...'
    Model = gbm(train_data, train_out)
    print 'Trained!'
    total = 0.
    for i in range(len(test_data)):
        res = predict(Model, test_data[i])
        print res, test_out[i]
        total += (res-test_out[i])**2
    print total/len(test_out)
    
    print '**************************'
    im = relative_importance(Model, P)
    for key in im.keys():
        print key, im[key]