ランダムフォレスト分類器の最小ツリー数


8

ランダムフォレスト分類器のツリー数の下限の理論的または実験的推定を探しています。

私は通常、さまざまな組み合わせをテストし、(交差検証を使用して)中央値の最良の結果を提供する組み合わせを選択します。

ただし、観測値とn個の特徴がある場合、エラーへの分散の寄与を減らすために、使用する木の数には下限があると思います。分類子を正しく調整するために確認できるテストまたは参照はありますか?メートル


3
疑わしい。しかし、提案:機械学習のパフォーマンスを研究する機械学習の領域は、経験的リスク最小化と呼ばれます。これらのキーワードを検索に追加してみてください。
Ricardo Cruz

回答:


7

これは必ずしもあなたの質問に対する答えではありません。ランダムフォレスト内の決定木の数を交差検証することについての一般的な考えだけです。

ランダムフォレスト内のツリーの数を相互検証する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つの文化があります。ランダムフォレストは、仮定がほとんどないが、非常にデータ固有であると彼が言っているモデルのタイプです。そのため、仮説検定に頼ることはできず、ブルートフォースの相互検証を行う必要があります。


ええと、私は木の数を増やすとエラーのバイアス成分が増えると思いました(モデルの分散の減少によって、どういうわけか相殺されます)。
gc5

1
木を追加しても害はないと思っていましたが、The Elements of Statistical Learningの 596ページで、森が多すぎると余分な変動が生じる可能性があると言われているので、あなたの答えは正しいと思いますが、小さな粒の塩で: )
TBSRounder 2016

1
@TBSRounderリンクをありがとう。著者はそのような短いテキストであまりにも多くのことを話し合っているので、彼を蒸留することは困難です。特に、ツリーの深さとツリーの数について同時に話しているので、混乱を招きます。しかし、B(=#trees)に関しては、ツリーが多いほど、結果のモデルは平均的なツリーに近づき、当然、平均的なツリーはバイアスされる可能性があるため、モデルがバイアスされる可能性があります。私は他に主張したことはありません。私は、B自体はバイアスを増加させないと述べました。モデルをより堅牢にする(=分散を減らす)だけです。
Ricardo Cruz

ああ、わかりました。わかりやすく説明してくれてありがとう。どういうわけか、著者は木の深さではなくBについて話していると思いました。
TBSRounder 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.