- 签证留学 |
- 笔译 |
- 口译
- 求职 |
- 日/韩语 |
- 德语
骑自行车的速度
图1 人们骑自行车的速度和他们智商之间的关系数据。该数据用于比较树回归模型和普通的线性回归模型
下面将为图1 的数据构建三个模型。首先,将程序清单1中的代码保存为regTrees.py,然后在Python提示符下输人以下命令:
>>> reload(regTrees)
接下来,利用该数据创建一棵回归树:
>>> trainMat=mat (regTrees.loadDataSet('bikeSpeedVsIq_train.txt'))
>>> testMat=mat (regTrees.loadDataSet('bikeSpeedVsIq_test.txt'))
>>> myTree=regTrees.createTree(trainMat, ops=(1/20))
>>> YHat = regTrees.createForeCast (myTree, testMat [:,0])
>>> corrcoef (yHat, testMat [:,1],rowvar=0) [0,1]
0.96408523182221306
同样地,再创建一棵模型树:
>>> myTree=regTrees.createTree(trainMat, regTrees.modelLeaf, regTrees.modelErr, (1,20))
>>> yHat = regTrees.createForeCast (myTree, testMat[:,0], regTrees.modelTreeEval)
>>> corrcoef (yHat, testMat[:,1],rowvar=0) [0,1]
0.9760412191380623
我们知道,R²值越接近1.0越好,所以从上面的结果可以看出,这里模型树的结果比回归树好。下面再看看标准的线性回归效果如何,这里无须导入任何代码,实现一个线性方程求解函数linearsolve():
>>> ws,X,Y=regTrees.linearSolve (trainMat)
>>> WS
matrix([[ 37.58916794],
[ 6.18978355]])
为了得到测试集上所有的yHat预测值,在测试数据上循环执行:
>>> for i in range(shape(testMat) [0]):
…… yHàt [i]=testMat [i,0]*ws [1,0]+ws[0,0]
……
最后来看一下R²值:
>>> corrcoef (yHat, testMat [:,1],rowvar=0) [0,1]
0.94346842356747584
可以看到,该方法在R²值上的表现上不如上面两种树回归方法。所以,树回归方法在预测复杂数据时会比简单的线性模型更有效,相信读者对这个结论也不会感到意外。
责任编辑:admin