cart (classification and regression trees,分類回歸樹)_的樹構建演算法。該演算法既可以用於分類還可以用於回歸,因此非常值得學習。然後利用python來構建並顯示cart樹。**會保持足夠的靈活性以便能用於多個問題當中。接著,利用cart演算法構建回歸樹並介紹其中的樹剪枝技術(該技術的主要目的是防止樹的過擬合)。之後引人了乙個更高階的模型樹演算法。與回歸樹的做法(在每個葉節點上使用各自的均值做**)不同,該演算法需要在每個葉節點上都構建出乙個線性模型。在這些樹的構建演算法中有一些需要調整的引數,所以還會介紹如何使用python中的tkinter模組建立圖形互動介面。最後,在該介面的輔助下分析引數對回歸效果的影響。
樹構建**
from numpy import *
def loaddataset(filename): #general function to parse tab -delimited floats
datamat = #assume last column is target value
fr = open(filename)
for line in fr.readlines():
curline = line.strip().split('\t')
fltline = map(float,curline) #map all elements to float()
return datamat
def binsplitdataset(dataset, feature, value):
mat0 = dataset[nonzero(dataset[:,feature] > value)[0],:]
mat1 = dataset[nonzero(dataset[:,feature] <= value)[0],:]
return mat0,mat1
def regleaf(dataset):#returns the value used for each leaf
return mean(dataset[:,-1])
**執行
if __name__ == '__main__':
mydat = loaddataset('ex00.txt')
mymat = mat(mydat)
print(createtree(mymat))
得到結果
樹減枝一棵樹如果結點過多,表明該模型可能對資料進行了「過擬合」,如何判斷是否過擬合,前面已經介紹了使用測試集上的某種交叉驗證的方法來發現過擬合,決策樹也是。
通過降低樹的複雜度來避免過擬合的過程稱為剪枝(pruning)。我們也已經提到,設定tols和toln就是一種預剪枝操作。另一種形式的剪枝需要使用測試集和訓練集,稱作後剪枝(postpruning)。本節將分析後剪枝的有效性,但首先來看一下預剪枝的不足之處
預剪枝
引數tols為1時
將引數tols修改為10000後
雖然和上圖tols對誤差的數量級十分敏感。如果在選項中花費時間並對上述誤差容忍度取平均值,或許也能得到僅有兩個葉結點組成的樹,可以看到,將引數tols修改為10000後,構建的樹就是只有兩個葉結點。然而,顯然這個值,需要我們經過不斷測試得來,顯然通過不斷修改停止條件來得到合理結果並不是很好的辦法。事實上,我們常常甚至不確定到底需要尋找什麼樣的結果。因為對於乙個很多維度的資料集,你也不知道構建的樹需要多少個葉結點。
可見,預剪枝有很大的侷限性。接下來,我們討論後剪枝,即利用測試集來對樹進行剪枝。由於不需要使用者指定引數,後剪枝是乙個更理想化的剪枝方法。
後剪枝
使用後剪枝方法需要將資料集分成測試集和訓練集。首先指定引數,使得構建出的樹足夠大、足夠複雜,便於剪枝。接下來從上而下找到葉結點,用測試集來判斷這些葉結點合併是否能降低測試集誤差。如果是的話就合併。後剪枝可能不如預剪枝有效。一般地,為了尋求最佳模型可以同時使用兩種剪枝技術。
cart法可以用於構建二元樹並處理離散型或連續型資料的切分。若使用不同的誤差準則,
就可以通過cart演算法構建模型樹和回歸樹。該演算法構建出的樹會傾向於對資料過擬合。一棵過
擬合的樹常常十分複雜,剪枝技術的出現就是為了解決這個問題。兩種剪枝方法分別是預剪枝(在
樹的構建過程中就進行剪枝)和後剪枝(當樹構建完畢再進行剪枝),預剪枝更有效但需要使用者
定義一些引數。
機器學習實戰 09 樹回歸
機器學習實戰 第9章的樹回歸執行時頻繁出錯,這裡主要有兩點 出錯的 行是 for splitval in set dataset featindex 應改為 for splitval in set dataset featindex t a.tolist 0 具體分析過程檢視 出錯的 行是 def ...
機器學習實戰之樹回歸
線性回歸包含一些強大的方法,但是這些方法建立的模型需要擬合所有的樣本點 區域性線性回歸除外 當資料擁有眾多特徵,且特徵之間關係十分複雜時,構建全域性模型的想法顯得困難。並且,生活中很多問題都是非線性的,不可能使用全域性線性模型來擬合任何模型。一種可行的方法是將資料集切分成很多份易建模的資料,然後利用...
機器學習 回歸
有別於分類問題,回歸問題,主要是通過特徵來構造乙個函式,並用這個函式求得的值來近似的估計我們需要 的值。回歸的種類有很多,當然我一時之間不能夠完全的總結出所有的回歸分析方法,但是我們在以後的學習中慢慢的補充。作為乙個初學者,以下的總結可能有一些個人的誤區,所以如果出現什麼錯誤的話,我希望各個讀者能夠...