回答:
これは必ずしもあなたの質問に対する答えではありません。ランダムフォレスト内の決定木の数を交差検証することについての一般的な考えだけです。
ランダムフォレスト内のツリーの数を相互検証するKaggleおよびStackexchangeで多くの人々を目にします。何人かの同僚にも尋ねましたが、過剰適合を避けるために相互検証することが重要であると彼らは言っています。
これは私には意味がありませんでした。各決定木は個別にトレーニングされるため、決定木を追加しても、集合はますます堅牢になります。
(これは、adaブースティングの特定のケースである勾配ブースティングツリーとは異なります。したがって、各決定木は残差をより大きく重み付けするようにトレーニングされているため、過剰適合の可能性があります。)
私は簡単な実験をしました:
from sklearn.datasets import load_digits
from sklearn.ensemble import RandomForestClassifier
from sklearn.grid_search import GridSearchCV
import numpy as np
import matplotlib.pyplot as plt
plt.ioff()
df = load_digits()
X = df['data']
y = df['target']
cv = GridSearchCV(
RandomForestClassifier(max_depth=4),
{'n_estimators': np.linspace(10, 1000, 20, dtype=int)},
'accuracy',
n_jobs=-1,
refit=False,
cv=50,
verbose=1)
cv.fit(X, y)
scores = np.asarray([s[1] for s in cv.grid_scores_])
trees = np.asarray([s[0]['n_estimators'] for s in cv.grid_scores_])
o = np.argsort(trees)
scores = scores[o]
trees = trees[o]
plt.clf()
plt.plot(trees, scores)
plt.xlabel('n_estimators')
plt.ylabel('accuracy')
plt.savefig('trees.png')
plt.show()
私はあなたがこのより多くの木が過剰適合を引き起こす可能性があると考えることについてこの誤りを犯しているとは言っていません。あなたは下限を求めてきたので、あなたは明らかにそうではありません。これはしばらくの間私を悩ませてきたものであり、心に留めておくことが重要だと思います。
(補遺:Statistical Learningの要素は 596ページでこれについて議論しており、私とこれに同意しています。«B [B =木の数]の増加がランダムフォレストシーケンスを過剰適合させないことは確かに本当です»。作者は、「この制限がデータをオーバーフィットする可能性がある」という観察をします。つまり、他のハイパーパラメーターはオーバーフィットにつながる可能性があるため、ロバストなモデルを作成してもオーバーフィットから救われることはありません。他のハイパーパラメーターを交差検証する場合は注意が必要です。 )
あなたの質問に答えるために、決定木を追加することは常にあなたの集団に有益です。それは常にそれをますます堅牢にします。しかし、もちろん、わずかな0.00000001の分散の減少が計算時間に値するかどうかは疑わしいものです。
したがって、私が理解しているように、あなたの質問は、決定木の量を何らかの方法で計算または推定して、エラー分散を特定のしきい値未満に減らすことができるかどうかです。
私はそれを非常に疑っています。データマイニングにおける多くの幅広い質問に対する明確な回答はありません。Leo Breiman(ランダムフォレストの作成者)が書いたように、統計的モデリングには2つの文化があります。ランダムフォレストは、仮定がほとんどないが、非常にデータ固有であると彼が言っているモデルのタイプです。そのため、仮説検定に頼ることはできず、ブルートフォースの相互検証を行う必要があります。