模型樹——就是回歸樹的分段常數預測修改為線性回歸 對於非線性回歸有較好的預測效果
阿新 • • 發佈:2017-07-26
too 實現 ops ann targe class ast asi 最小
說完了樹回歸,再簡單的提下模型樹,因為樹回歸每個節點是一些特征和特征值,選取的原則是根據特征方差最小。如果把葉子節點換成分段線性函數,那麽就變成了模型樹,如(圖六)所示:
(圖六)
(圖六)中明顯是兩個直線組成,以X坐標(0.0-0.3)和(0.3-1.0)分成的兩個線段。如果我們用兩個葉子節點保存兩個線性回歸模型,就完成了這部分數據的擬合。實現也比較簡單,代碼如下:
[python] view plain copy- def linearSolve(dataSet): #helper function used in two places
- m,n = shape(dataSet)
- X = mat(ones((m,n))); Y = mat(ones((m,1)))#create a copy of data with 1 in 0th postion
- X[:,1:n] = dataSet[:,0:n-1]; Y = dataSet[:,-1]#and strip out Y
- xTx = X.T*X
- if linalg.det(xTx) == 0.0:
- raise NameError(‘This matrix is singular, cannot do inverse,\n\
- try increasing the second value of ops‘)
- ws = xTx.I * (X.T * Y)
- return ws,X,Y
- def modelLeaf(dataSet):#create linear model and return coeficients
- ws,X,Y = linearSolve(dataSet)
- return ws
- def modelErr(dataSet):
- ws,X,Y = linearSolve(dataSet)
- yHat = X * ws
- return sum(power(Y - yHat,2))
代碼和樹回歸相似,只不過modelLeaf在返回葉子節點時,要完成一個線性回歸,由linearSolve來完成。最後一個函數modelErr則和回歸樹的regErr函數起著同樣的作用。
謝天謝地,這篇文章一個公式都沒有出現,但同時也希望沒有數學的語言,表述會清楚。
數據ex00.txt:
0.036098 0.155096
xxx
轉載請註明來源:http://blog.csdn.net/cuoqu/article/details/9502711
參考文獻:
[1] machine learning in action.Peter Harrington
模型樹——就是回歸樹的分段常數預測修改為線性回歸 對於非線性回歸有較好的預測效果