Cuando se guarda en el disco usando cPickle: /programming/20662023/save-python-random-forest-model-to-file , mi bosque aleatorio es de 6.57 GB.
with open('rforest.cpickle', 'wb') as f:
cPickle.dump(rforest, f)
Quiero usar el bosque mismo para hacer predicciones a través de una API de Python alojada en Heroku; por supuesto, ese tamaño de archivo es inaceptable.
¿Por qué el tamaño del archivo es tan grande? Hay 500 árboles en el conjunto; todo lo que quiero guardar son los árboles completos, ya que se usarán como predicción. ¿Son los nodos y bordes reales que componen cada uno de los 500 árboles que requieren casi 7 GB de espacio en el disco?
Utilicé el progreso aleatorio 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
Además, si hay una mejor manera de hacer que mi modelo sea accesible a través de API, también sería bueno saberlo.
Actualización: lo reduje a 100 árboles sin perder mucho poder predictivo, por lo que ahora el tamaño guardado es de 1.3 GB, mucho más manejable, pero aún no excelente.
fuente
Respuestas:
El tamaño de cada árbol depende mucho de su profundidad. Por lo tanto, cambie la profundidad máxima (
max_depth
). Intente establecerlo en un número finito (en oposición al "Ninguno" predeterminado) y luego intente reducir este número. Además (o como alternativa) intenta aumentarmin_samples_split
omin_samples_split
.También puede analizar sus características y conservar solo las importantes. La forma más sencilla sería echar un vistazo a
clf.feature_importances_
tu bosque. (En general, encontrar características importantes es un arte y una ciencia en sí mismo). Excluir características no relevantes y reconstruir el bosque.fuente
Prueba esto:
Aviso: con el parámetro "-1", el tamaño del archivo del modelo se reducirá en gran medida.
De acuerdo con la documentación:
fuente