昨天有提到 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')
可以放大仔細看看哦
更詳細可以請參考連結