- 簽證留學(xué) |
- 筆譯 |
- 口譯
- 求職 |
- 日/韓語(yǔ) |
- 德語(yǔ)
程序清單1 CART算法的實(shí)現(xiàn)代碼
上述程序清單包含3個(gè)函數(shù):第一個(gè)函數(shù)是loadDataset(),這里我們把目標(biāo)變量數(shù)據(jù)存放在一起。該函數(shù)讀取一個(gè)以tab鍵為分隔符的文件,然后將每行的內(nèi)容保存成一組浮點(diǎn)數(shù)。
第二個(gè)函數(shù)是binSplitDataset(),該函數(shù)有3個(gè)參數(shù):數(shù)據(jù)集合、待切分的特征和該特征的某個(gè)值。在給定特征和特征值的情況下,該函數(shù)通過(guò)數(shù)組過(guò)濾方式將上述數(shù)據(jù)集合切分得到兩個(gè)子集并返回。
最后一個(gè)函數(shù)是樹構(gòu)建函數(shù)createTree(),它有4個(gè)參數(shù):數(shù)據(jù)集和其他3個(gè)可選參數(shù)。這些可選參數(shù)決定了樹的類型:leafType給出建立葉節(jié)點(diǎn)的函數(shù);errType代表誤差計(jì)算函數(shù);而ops是一個(gè)包含樹構(gòu)建所需其他參數(shù)的元組。
函數(shù)createTree()是一個(gè)遞歸函數(shù)。該函數(shù)首先嘗試將數(shù)據(jù)集分成兩個(gè)部分,切分由函數(shù)chooseBestSplit()完成(這里未給出該函數(shù)的實(shí)現(xiàn))。如果滿足停止條件,chooseBestSplit()將返回None和某類模型的值。如果構(gòu)建的是回歸樹,該模型是一個(gè)常數(shù)。如果是模型樹,其模型是一個(gè)線性方程。后面會(huì)看到停止條件的作用方式。如果不滿足停止條件,chooseBestSplit()將創(chuàng)建一個(gè)新的Python字典并將數(shù)據(jù)集分成兩份,在這兩份數(shù)據(jù)集上將分別繼續(xù)遞歸調(diào)用createTree()函數(shù)。
程序清單1的代碼很容易理解,但其中的方法chooseBestSplit()現(xiàn)在暫時(shí)尚未實(shí)現(xiàn),所以函數(shù)還不能看到createTree()的實(shí)際效果。但是下面可以先測(cè)試其他兩個(gè)函數(shù)的效果。將程序清單1的代碼保存在文件regTrees.py中并在Python提示符下輸人如下命令:
>>> import regTrees
>>> testMat=mat (eye(4))
>>> testMat
matrix([[ 1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
這樣就創(chuàng)建了一個(gè)簡(jiǎn)單的矩陣,現(xiàn)在按指定列的某個(gè)值來(lái)切分該矩陣。
>>> mat0,matl=regTrees.binSplitDataSet (testMat,1,0.5)
>>>mato
matrix([[ 0., 1., 0., 0.]])
>>> mat1
matrix([[ 1., 0., 0., 0.],
[0.,0.,1.,0.],
[ 0., 0.,0., 1.]])
很有趣吧。下面給出回歸樹的chooseBestsplit()函數(shù),還會(huì)看到更有趣的結(jié)果。
責(zé)任編輯:admin