iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0

原理

昨天有提到 Bagging 最有名的例子就是隨機森林,它是集合多棵決策樹來進行預測,很多樹就成為了森林,稱之為隨機森林。每一棵樹只能看見部分特徵,但透過多顆樹來蒐集和統合資料,可以比決策樹不容易過度擬合,並且讓預測能力提升。

從訓練集使用 Bootstrap 抽後放回,抽 n‘ 筆資料後隨機選 m 個 特徵作為訓練資料樣本。重複 k 次之後可以產生 k 顆決策樹,最後再用投票機制來進行預測。

特色

  • 多顆決策樹可以彌平單一決策樹會過度擬合的缺點
  • 每棵樹的資料和特徵都是隨機
  • 每棵樹都是獨立,因此可以平行化運算
  • 利用群眾智慧提供預測準確率

實作程式碼

一樣套用上次的模板,我們將資料進行切割後餵給模型

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators = 1000, criterion = 'entropy', random_state = 0 )
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

print(cm)
>>> [[58  9]
     [ 6 27]]
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

視覺化

如果你拿前天的決策樹對比之下,會發現隨機森林的決策邊界比較平滑(smooth)。也就是代表說,進行集成式學習可以將決策邊界可以變得更適應資料的長相。

樹狀圖

# 選擇決策樹數量和最大層數
t = 5
max_depth = 2
model = RandomForestClassifier(n_estimators=t, max_depth=max_depth)
model.fit(dx_train, dy_train)
predict = model.predict(dx_test)
test_score = model.score(dx_test, dy_test) * 100
print(f'Accuracy: {test_score:.1f}%')

# 走訪和繪製隨機森林的所有決策樹
plt.figure(figsize=(128, 64))
for idx, dec_tree in enumerate(model.estimators_):
    plt.subplot(1, t, idx+1)
    tree.plot_tree(dec_tree, 
                   filled=True, rounded=True, proportion=True,
                   feature_names=feature_names,
                   class_names=class_names)
plt.savefig('forest.jpg')

可以放大仔細看看哦/images/emoticon/emoticon37.gif

github 程式碼

更詳細可以請參考連結


上一篇
Day 23 : 集成式學習
下一篇
Day 25 : XGBoost
系列文
Python資料分析學習地圖30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言