Jumlah minimum pohon untuk klasifikasi Hutan Acak

8

Saya mencari estimasi teoretis atau eksperimental dari batas bawah untuk jumlah pohon dalam klasifikasi Hutan Acak.

Saya biasanya menguji kombinasi yang berbeda dan memilih salah satu yang (menggunakan validasi silang) memberikan median hasil terbaik.

Namun, saya pikir mungkin ada batas bawah pada jumlah pohon yang akan digunakan, mengingat m pengamatan dan nfitur, untuk mengurangi kontribusi varians terhadap kesalahan. Apakah ada beberapa tes atau referensi yang dapat saya periksa untuk menyetel classifier saya dengan benar?

gc5
sumber
3
Aku meragukan itu. Tapi saran: area pembelajaran mesin yang mempelajari kinerja pembelajaran mesin disebut minimalisasi risiko empiris . Anda dapat mencoba menambahkan kata kunci tersebut ke pencarian Anda.
Ricardo Cruz

Jawaban:

7

Ini belum tentu merupakan jawaban untuk pertanyaan Anda. Hanya pemikiran umum tentang memvalidasi silang jumlah pohon keputusan dalam hutan acak.

Saya melihat banyak orang di kaggle dan stackexchange memvalidasi jumlah pohon di hutan acak. Saya juga bertanya kepada beberapa rekan kerja dan mereka memberi tahu saya bahwa penting untuk melakukan validasi silang untuk menghindari overfitting.

Ini tidak pernah masuk akal bagi saya. Karena setiap pohon keputusan dilatih secara independen, menambahkan lebih banyak pohon keputusan hanya akan membuat ansambel Anda semakin kuat.

(Ini berbeda dari gradient boosting tree, yang merupakan kasus khusus ada boosting, dan oleh karena itu ada potensi overfitting karena setiap pohon keputusan dilatih untuk menimbang residu lebih banyak.)

Saya melakukan percobaan sederhana:

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()

kinerja

Saya tidak mengatakan Anda melakukan kesalahan ini karena berpikir lebih banyak pohon dapat menyebabkan overfitting. Anda jelas bukan karena Anda telah meminta batas bawah. Ini hanya sesuatu yang telah mengganggu saya untuk sementara waktu, dan saya pikir penting untuk diingat.

(Tambahan: Elemen Pembelajaran Statistik membahas hal ini di halaman 596, dan menyetujui hal ini dengan saya. «Memang benar bahwa peningkatan B [B = jumlah pohon] tidak menyebabkan urutan hutan acak menjadi terlalu cocok». Penulis tidak membuat pengamatan bahwa «batas ini dapat melebihi data». Dengan kata lain, karena hiperparameter lain dapat menyebabkan overfitting, menciptakan model yang kuat tidak menyelamatkan Anda dari pakaian berlebihan. )

Untuk menjawab pertanyaan Anda, menambahkan pohon keputusan akan selalu bermanfaat bagi ansambel Anda. Itu akan selalu membuatnya semakin kuat. Tapi, tentu saja, meragukan apakah pengurangan varians 0,00000001 marginal bernilai waktu komputasi.

Karena itu pertanyaan Anda, seperti yang saya pahami, adalah apakah Anda entah bagaimana dapat menghitung atau memperkirakan jumlah pohon keputusan untuk mengurangi varians kesalahan hingga di bawah ambang tertentu.

Saya sangat meragukannya. Kami tidak memiliki jawaban yang jelas untuk banyak pertanyaan luas dalam penggalian data, apalagi pertanyaan spesifik seperti itu. Seperti yang ditulis Leo Breiman (penulis hutan acak), ada dua budaya dalam pemodelan statistik , dan hutan acak adalah jenis model yang menurutnya memiliki sedikit asumsi, tetapi juga sangat spesifik data. Itu sebabnya, katanya, kita tidak bisa menggunakan pengujian hipotesis, kita harus pergi dengan validasi silang brute-force.

Ricardo Cruz
sumber
Mh, saya berpikir bahwa meningkatkan jumlah pohon akan menyebabkan peningkatan komponen bias dari kesalahan (yang entah bagaimana diimbangi dengan varians yang menurun dari model).
gc5
1
Saya selalu berpikir bahwa menambahkan pohon tidak akan pernah menyakiti, tetapi dalam The Elements of Statistics Learning halaman 596, mereka mengklaim bahwa terlalu kaya hutan dapat menyebabkan variabilitas ekstra, jadi saya pikir jawaban Anda masih benar, tetapi dengan sebutir garam kecil: )
TBSRounder
1
@TBSRounder Terima kasih atas tautannya. Penulis membahas terlalu banyak hal dalam teks yang begitu singkat, sehingga sulit untuk menyaringnya, terutama membingungkan karena ia berbicara tentang kedalaman pohon dan jumlah pohon pada saat yang sama. Tetapi, berkenaan dengan B (= # pohon), dia mengatakan bahwa lebih banyak pohon membuat model yang dihasilkan lebih dekat dengan pohon rata-rata, dan, tentu saja, pohon rata-rata mungkin bias, sehingga Anda dapat berakhir dengan model yang bias. Saya tidak pernah mengklaim sebaliknya. Saya hanya mengatakan bahwa B, dengan sendirinya, tidak meningkatkan bias. Itu hanya membuat model Anda lebih kuat (= mengurangi varians).
Ricardo Cruz
Ah ya, itu agak membingungkan, terima kasih atas klarifikasi. Untuk beberapa alasan saya pikir penulis berbicara tentang B, bukan kedalaman pohon.
TBSRounder