機器學習

隨機森林 - 樹與預測變數

  • July 16, 2019

這個問題與金融中隨機森林的使用以及特徵數量、觀察結果和樹木數量之間的關係有關。

考慮 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)

最後,我們可以觀察熱圖中的關係:

關係

引用自:https://quant.stackexchange.com/questions/46657