Lorsqu'il est enregistré sur le disque à l'aide de cPickle: /programming/20662023/save-python-random-forest-model-to-file , ma forêt aléatoire est de 6,57 Go.
with open('rforest.cpickle', 'wb') as f:
cPickle.dump(rforest, f)
Je veux utiliser la forêt elle-même pour faire des prédictions via une API python hébergée sur Heroku - bien sûr, cette taille de fichier est inacceptable.
Pourquoi la taille du fichier est-elle si grande? Il y a 500 arbres dans l'ensemble - tout ce que je veux sauver, ce sont les arbres achevés eux-mêmes, car ils seront utilisés comme prédiction. Est-ce que ce sont les nœuds et les bords réels qui composent chacune des 500 arbres qui nécessitent près de 7 Go d'espace sur le disque?
J'ai utilisé randomforestregressor de scikitlearn:
def buildForest(self, X_train, y_train):
rf = RandomForestRegressor(n_estimators=500, verbose=1)
rf.fit_transform(X_train, y_train)
return rf
De plus, s'il existe un meilleur moyen de rendre mon modèle accessible via l'API, ce serait également bon à savoir.
Mise à jour: je l'ai réduit à 100 arbres sans perdre beaucoup de puissance prédictive, et maintenant la taille enregistrée est de 1,3 Go - beaucoup plus gérable, mais toujours pas génial.
la source
Réponses:
La taille de chaque arbre dépend beaucoup de sa profondeur. Ainsi, changez la profondeur maximale (
max_depth
). Essayez de le définir sur un nombre fini (par opposition à la valeur par défaut "Aucun"), puis essayez de réduire ce nombre. De plus (ou comme alternative) essayez d'augmentermin_samples_split
oumin_samples_split
.Vous pouvez également analyser vos fonctionnalités et n'en conserver que les plus importantes. La façon la plus simple serait de jeter un œil à la
clf.feature_importances_
forêt. (En général, trouver des éléments importants est un art et une science en soi.) Exclure les éléments non pertinents et reconstruire la forêt.la source
Essaye ça:
Remarque: avec le paramètre "-1", la taille du fichier modèle sera largement réduite.
Selon la documentation:
la source