- 簽證留學(xué) |
- 筆譯 |
- 口譯
- 求職 |
- 日/韓語 |
- 德語
騎自行車的速度
圖1 人們騎自行車的速度和他們智商之間的關(guān)系數(shù)據(jù)。該數(shù)據(jù)用于比較樹回歸模型和普通的線性回歸模型
下面將為圖1 的數(shù)據(jù)構(gòu)建三個(gè)模型。首先,將程序清單1中的代碼保存為regTrees.py,然后在Python提示符下輸人以下命令:
>>> reload(regTrees)
接下來,利用該數(shù)據(jù)創(chuàng)建一棵回歸樹:
>>> 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
同樣地,再創(chuàng)建一棵模型樹:
>>> 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
我們知道,R2值越接近1.0越好,所以從上面的結(jié)果可以看出,這里模型樹的結(jié)果比回歸樹好。下面再看看標(biāo)準(zhǔn)的線性回歸效果如何,這里無須導(dǎo)入任何代碼,實(shí)現(xiàn)一個(gè)線性方程求解函數(shù)linearsolve():
>>> ws,X,Y=regTrees.linearSolve (trainMat)
>>> WS
matrix([[ 37.58916794],
[ 6.18978355]])
為了得到測試集上所有的yHat預(yù)測值,在測試數(shù)據(jù)上循環(huán)執(zhí)行:
>>> for i in range(shape(testMat) [0]):
…… yHàt [i]=testMat [i,0]*ws [1,0]+ws[0,0]
……
最后來看一下R2值:
>>> corrcoef (yHat, testMat [:,1],rowvar=0) [0,1]
0.94346842356747584
可以看到,該方法在R2值上的表現(xiàn)上不如上面兩種樹回歸方法。所以,樹回歸方法在預(yù)測復(fù)雜數(shù)據(jù)時(shí)會(huì)比簡單的線性模型更有效,相信讀者對這個(gè)結(jié)論也不會(huì)感到意外。
責(zé)任編輯:admin