Quando salva em disco usando o cPickle: /programming/20662023/save-python-random-forest-model-to-file , minha floresta aleatória tem 6,57 GB.
with open('rforest.cpickle', 'wb') as f:
cPickle.dump(rforest, f)
Quero usar a própria floresta para fazer previsões por meio de uma API python hospedada no Heroku - é claro, esse tamanho de arquivo é inaceitável.
Por que o tamanho do arquivo é tão grande? Existem 500 árvores no conjunto - tudo o que quero salvar são as próprias árvores concluídas, pois serão usadas como previsão. São os nós e as bordas reais que compõem cada uma das 500 árvores que requerem quase 7 GB de espaço em disco?
Eu usei o randomforestregressor do scikitlearn:
def buildForest(self, X_train, y_train):
rf = RandomForestRegressor(n_estimators=500, verbose=1)
rf.fit_transform(X_train, y_train)
return rf
Além disso, se houver uma maneira melhor de tornar meu modelo acessível via API, também seria bom saber.
Atualização: reduzi-o para 100 árvores sem perder muito poder preditivo, e agora o tamanho salvo é de 1,3 GB - muito mais gerenciável, mas ainda não ótimo.
fonte
Respostas:
O tamanho de cada árvore depende muito de sua profundidade. Assim, altere a profundidade máxima (
max_depth
). Tente configurá-lo para número finito (em oposição ao padrão "Nenhum") e tente reduzir esse número. Além disso (ou como alternativa), tente aumentarmin_samples_split
oumin_samples_split
.Você também pode analisar seus recursos e manter apenas os importantes. A maneira mais simples seria dar uma olhada na
clf.feature_importances_
floresta. (Em geral, encontrar características importantes é uma arte e ciência por si só.) Exclua características não relevantes e reconstrua a floresta.fonte
Tente isto:
Nota: com o parâmetro "-1", o tamanho do arquivo do modelo será bastante reduzido.
De acordo com a documentação:
fonte