前面我們知道決策樹演算法通過從決策樹根節點開始,對待檢測樣本的某乙個特徵進行測試,根據測試結果轉向左子樹或者右子樹,如此遞迴達到停止條件,葉節點所表示的類別,就是決策樹對該樣本的**結果。有的時候單一的決策樹並不能夠起到較好的效果,因此需要建立多棵決策樹來提公升模型效果。但是如果對於每一棵樹都使用全部的樣本進行訓練,那麼最終得到的樹都是一模一樣的。因此引入boostrap方法來生成每棵樹的訓練樣本,boostrap是一種隨機又放回的抽樣,這也是隨機森林中「隨機」的由來。至於森林,生成的多棵決策樹通過一定的規則組合起來就形成了最終的模型。
boostrap方法
boostrap方法是efron在20世紀70年代後期建立的一種抽樣方法,其抽樣方法為:假設已有乙個容量為
非引數boostrap方法一開始是用於對總體
def boostrap(self, train_data, train_label):
index = np.random.randint(0, len(train_data), (len(train_data)))
x = train_data[index]
y = train_label[index]
clf = decisiontreeclassifier(t=self.alpha)
clf.train(x, y)
return clf
袋外誤差根據boostrap方進行抽樣,最後大約有1/3的資料是沒有被抽取到的,即
因此對於隨機森林來說不需要對它進行交叉驗證,只需要計算器袋外誤差就可以評估隨機森林的效能。
決策樹
在隨機森林訓練過程中,每次迭代生成一棵決策樹,決策樹的訓練樣本為使用boostrap獲取的資料,決策樹前面已經講過了,可以參考從零實現機器學習演算法(二)決策樹。
回歸與分類規則
隨機森林的回歸規則是取所有樹回歸值的均值作為最終的回歸結果,這並不難理解。
def predict(self, test_data):
labels = np.zeros([len(test_data), self.tree_num])
for i in range(self.tree_num):
labels[:,i] = self.trees[i].predict(test_data)
prediction = np.mean(labels, axis=0)
self.prediction = prediction
return prediction
隨機森林分類的規則是採用投票機制,即少數服從多數的原則選取所有樹中類別最多的那一類作為最終的分類結果。
def vote(self, labels):
label_count = {}
# get the counts of each label
for c in labels:
label_count[c] = label_count.get(c, 0) + 1
# get the labels of the majority
predition = sorted(label_count.items(), key=op.itemgetter(1), reverse=true)
pred = predition[0][0]
return pred
隨機森林演算法能夠很好的應用於大規模資料和特徵維度較高的資料,但是隨機森林已經被證明在某些噪音較大的分類或回歸問題上會過擬合。最後貼一下本文實現的隨機森林與單個決策樹檢測效能的比較,這裡採用了三棵樹,結果如下圖所示
機器學習演算法之bagging與隨機森林演算法
前言 在整合學習演算法中,我們講到了整合學習主要有兩個流派,乙個是boosting流派,它的特點是各個弱學習器之間有依賴關係。另一種是bagging流派,它的特點是各個弱學習器之間沒有依賴關係,可以並行擬合。本文就對整合學習中bagging與隨機森林演算法做乙個總結。隨機森林是整合學習中可以和梯度提...
隨機森林演算法原理 機器學習演算法 隨機森林
隨機森林是一種通用的機器學習方法,能夠處理回歸和分類問題。它還負責資料降維 缺失值處理 離群值處理以及資料分析的其他步驟。它是一種整合學習方法,將一組一般的模型組合成乙個強大的模型 我們通過適用隨機的方式從資料中抽取樣本和特徵值,訓練多個不同的決策樹,形成森林。為了根據屬性對新物件進行分類,每個數都...
《機器學習演算法 6 隨機森林》
隨機森林演算法是通過訓練多個決策樹,綜合多個樹的結果進行投票,從而實現分類。1.生成單棵決策樹 2.生成t顆決策樹 3.部分 4 其他 sklearn randomforestclassifier n estimators 100 引數 隨機森林中需要訓練多個樹,所以決策樹有的引數它也有。n est...