機器學習
隨機森林 - 樹與預測變數
這個問題與金融中隨機森林的使用以及特徵數量、觀察結果和樹木數量之間的關係有關。
考慮 RF、它所組成的樹的數量以及使用的特徵數量之間的關係:
- 您能否設想 RF 中所需的最小樹數與使用的特徵數之間的關係?
- 對於使用的特徵數量,樹的數量是否太少?
- 樹木的數量對於可用的觀察數量來說是否太高?
問題來自(AFML de Prado 2018)
以下關於交叉驗證的文章有一個很好的答案:
“隨機森林使用 bagging(選擇一個觀察樣本而不是所有這些)和隨機子空間方法(選擇一個特徵樣本而不是所有特徵,換句話說 - 屬性 bagging)來生長一棵樹。如果觀察的數量很大,但是樹的數量太少,那麼有些觀測值只會被預測一次,甚至根本不預測。如果預測變數的數量很大但樹的數量太少,那麼一些特徵可以(理論上) "
我進行了一些實證測試來驗證這一點。首先,我使用以下內容創建了合成數據:
# Create data X, y = make_classification(n_samples=20000, n_features=50, n_informative=10, n_redundant=0, random_state=42, shuffle=True, n_classes=2, class_sep=1.0) # Split data X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, shuffle=True, stratify=None)
有 50 個功能,其中只有 10 個提供資訊。有明確的類分離和 20000 個觀察值。
接下來,我擬合一個隨機森林,該森林受樹的數量和它可能使用的特徵數量(n_estimators,max_features)的限制。
max_trees = 100 max_feat_used = 50 store = [] for num_trees in range(2, max_trees, 2): print(num_trees) for num_feat in range(1, max_feat_used, 2): rnd_clf = RandomForestClassifier(criterion='entropy', n_estimators=num_trees, max_features=num_feat, n_jobs=-1) rnd_clf.fit(X_train, y_train) y_pred_rf = rnd_clf.predict(X_test) store.append([num_trees, num_feat, accuracy_score(y_test, y_pred_rf)]) # Pivot and save results results = pd.DataFrame(store, columns=['N', 'F', 'Score']) pivot_results = results.pivot(index='N', columns='F', values='Score') pivot_results = pivot_results.sort_index(ascending=False)
最後,我們可以觀察熱圖中的關係: