树回归预测

两种树已经创建完毕,现在我们就进行预测:train.txt (提取码:405c) test.txt (提取码:72d9)

def regTreeEval(model, inDat):
    return float(model)

def modelTreeEval(model, inDat):
    n = shape(inDat)[1]
    X = mat(ones((1,n+1)))
    X[:,1:n+1]=inDat
    return float(X*model)

def treeForeCast(tree, inData, modelEval=regTreeEval):
    if not isTree(tree): return modelEval(tree, inData)
    if inData[tree['spInd']] > tree['spVal']:
        if isTree(tree['left']): return treeForeCast(tree['left'], inData, modelEval)
        else: return modelEval(tree['left'], inData)
    else:
        if isTree(tree['right']): return treeForeCast(tree['right'], inData, modelEval)
        else: return modelEval(tree['right'], inData)
        
def createForeCast(tree, testData, modelEval=regTreeEval):
    m=len(testData)
    yHat = mat(zeros((m,1)))
    for i in range(m):
        yHat[i,0] = treeForeCast(tree, mat(testData[i]), modelEval)
    return yHat

上面是两种树模型的预测方法,当选择回归树时选择第一个函数,当选择模型树时选择第二个函数,第三个函数的输入参数中默认的是回归树模型,若使用模型树需要改变第三个参数,这个函数会自上向下遍历整棵树,直到命中。最后一个是调用函数。

点赞