Ketika disimpan ke disk menggunakan cPickle: /programming/20662023/save-python-random-forest-model-to-file , hutan acak saya adalah 6,57 GB.
with open('rforest.cpickle', 'wb') as f:
cPickle.dump(rforest, f)
Saya ingin menggunakan hutan itu sendiri untuk membuat prediksi melalui API python yang dihosting di Heroku - tentu saja, ukuran file itu tidak dapat diterima.
Mengapa ukuran file begitu besar? Ada 500 pohon di ansambel - yang ingin saya selamatkan adalah pohon yang sudah selesai, karena akan digunakan sebagai prediksi. Apakah node dan tepi sebenarnya yang menyusun masing-masing dari 500 pohon yang membutuhkan hampir 7 GB ruang pada disk?
Saya menggunakan randomforestregressor scikitlearn:
def buildForest(self, X_train, y_train):
rf = RandomForestRegressor(n_estimators=500, verbose=1)
rf.fit_transform(X_train, y_train)
return rf
Juga, jika ada cara yang lebih baik untuk membuat model saya dapat diakses melalui API, itu juga baik untuk diketahui.
Pembaruan: Saya menguranginya menjadi 100 pohon tanpa kehilangan banyak daya prediksi, dan sekarang ukuran yang disimpan adalah 1,3 GB - jauh lebih mudah dikelola, tetapi masih belum terlalu bagus.
sumber
Jawaban:
Ukuran setiap pohon sangat tergantung pada kedalamannya. Jadi, ubah kedalaman maksimal (
max_depth
). Cobalah untuk mengaturnya ke nomor yang terbatas (sebagai lawan dari "Tidak Ada" default) dan kemudian mencoba untuk mengurangi nomor ini. Selain itu (atau sebagai alternatif) cobalah untuk menambahmin_samples_split
ataumin_samples_split
.Anda juga dapat menganalisis fitur Anda dan hanya menyimpan yang penting. Cara paling sederhana adalah dengan melihat
clf.feature_importances_
hutan Anda. (Secara umum, menemukan fitur-fitur penting adalah seni dan sains pada dirinya sendiri.) Mengecualikan fitur yang tidak relevan dan membangun kembali hutan.sumber
Coba ini:
Perhatikan: dengan parameter "-1" ukuran file model sebagian besar akan berkurang.
Menurut dokumentasi:
sumber