- 簽證留學(xué) |
- 筆譯 |
- 口譯
- 求職 |
- 日/韓語 |
- 德語
對于模型樹、回歸樹和一般的回歸方法,下面測試一下哪個模型最好。首先給出一些函數(shù),它們可以在樹構(gòu)建好的情況下對給定的輸入進(jìn)行預(yù)測,之后利用這些函數(shù)來計(jì)算三種回歸模型的測試誤差。這些模型將在某個數(shù)據(jù)上進(jìn)行測試,該數(shù)據(jù)涉及人的智力水平和自行車的速度的關(guān)系。
這里的數(shù)據(jù)是非線性的,不能簡單地使用全局線性模型建模。當(dāng)然這里也需要聲明一下,此數(shù)據(jù)純屬虛構(gòu)。
下面先給出在給定輸入和樹結(jié)構(gòu)情況下進(jìn)行預(yù)測的幾個函數(shù)。打開regTrees.py并加入如下代碼。
程序清單1 用樹回歸進(jìn)行預(yù)測的代碼
對于輸入的單個數(shù)據(jù)點(diǎn)或者行向量,函數(shù)treeForeCast()會返回一個浮點(diǎn)值。在給定樹結(jié)構(gòu)的情況下,對于單個數(shù)據(jù)點(diǎn),該函數(shù)會給出一個預(yù)測值。調(diào)用函數(shù)treeForeCast()時需要指定樹的類型,以便在葉節(jié)點(diǎn)上能夠調(diào)用合適的模型。參數(shù)modelEval是對葉節(jié)點(diǎn)數(shù)據(jù)進(jìn)行預(yù)測的函數(shù)的引用。函數(shù)treeForeCast()自頂向下遍歷整棵樹,直到命中葉節(jié)點(diǎn)為止。一旦到達(dá)葉節(jié)點(diǎn),它就會在輸入數(shù)據(jù)上調(diào)用modelEval()函數(shù),而該函數(shù)的默認(rèn)值是regTreeEval()。
要對回歸樹葉節(jié)點(diǎn)進(jìn)行預(yù)測,就調(diào)用函數(shù)regTreeEval();要對模型樹節(jié)點(diǎn)進(jìn)行預(yù)測時,就調(diào)用modelTreeEval()函數(shù)。它們會對輸入數(shù)據(jù)進(jìn)行格式化處理,在原數(shù)據(jù)矩陣上增加第0列,然后計(jì)算并返回預(yù)測值。為了與函數(shù)modelTreeEval()保持一致,盡管regTreeEval()只使用一個輸入,但仍保留了兩個輸入?yún)?shù)。
最后一個函數(shù)是createForCast(),它會多次調(diào)用treeForeCast()函數(shù)。由于它能夠以向量形式返回一組預(yù)測值,因此該函數(shù)在對整個測試集進(jìn)行預(yù)測時非常有用。下面很快會看到這一點(diǎn)。
接下來考慮圖1所示的數(shù)據(jù)。該數(shù)據(jù)是我從多個騎自行車的人那里收集得到的。圖中給出騎自行車的速度和人的智商之間的關(guān)系。下面將基于該數(shù)據(jù)集建立多個模型并在另一個測試集上進(jìn)行測試。對應(yīng)的訓(xùn)練集數(shù)據(jù)保存在文件bikeSpeedVslq_train.txt中,而測試集數(shù)據(jù)保存在文件bikeSpeedVslq_test.txt中。