两种树已经创建完毕,现在我们就进行预测: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
上面是两种树模型的预测方法,当选择回归树时选择第一个函数,当选择模型树时选择第二个函数,第三个函数的输入参数中默认的是回归树模型,若使用模型树需要改变第三个参数,这个函数会自上向下遍历整棵树,直到命中。最后一个是调用函数。