介紹:創建一個模擬數據集,構建一個包含 5 棵決策樹的隨機森林分類模型,可視化每棵樹和集成分類器的決策邊界,比較研究。
from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_moons from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import mglearn # 生成一個用於模擬的二維數據集 X, y = make_moons(n_samples=100, noise=0.25, random_state=3) # 訓練集和測試集的划分 X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42) # 初始化一個包含 5 棵決策樹的隨機森林分類器 forest = RandomForestClassifier(n_estimators=5, random_state=2) # 在訓練數據集上進行學習 forest.fit(X_train, y_train) # 可視化每棵決策樹的決策邊界 fig, axes = plt.subplots(2, 3, figsize=(20, 10)) for i, (ax, tree) in enumerate(zip(axes.ravel(), forest.estimators_)): ax.set_title('Tree {}'.format(i)) mglearn.plots.plot_tree_partition(X_train, y_train, tree, ax=ax) # 可視化集成分類器的決策邊界 mglearn.plots.plot_2d_separator(forest, X_train, fill=True, ax=axes[-1, -1], alpha=0.4) axes[-1, -1].set_title('Random Forest') mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], y_train) plt.show()
從圖中看,每一棵單獨的決策樹都有不同程度的過擬合和錯誤,而隨機森林模型的過擬合程度較小,給出的決策邊界也較為平滑。