Beim Speichern auf der Festplatte mit cPickle: /programming/20662023/save-python-random-forest-model-to-file beträgt meine zufällige Gesamtstruktur 6,57 GB.
with open('rforest.cpickle', 'wb') as f:
cPickle.dump(rforest, f)
Ich möchte die Gesamtstruktur selbst verwenden, um Vorhersagen über eine auf Heroku gehostete Python-API zu treffen - natürlich ist diese Dateigröße nicht akzeptabel.
Warum ist die Datei so groß? Es gibt 500 Bäume im Ensemble - alles, was ich retten möchte, sind die fertigen Bäume selbst, da sie als Vorhersage verwendet werden. Sind es die tatsächlichen Knoten und Kanten, aus denen jeder der 500 Bäume besteht, die fast 7 GB Speicherplatz auf der Festplatte benötigen?
Ich habe den Randomforestregressor von scikitlearn verwendet:
def buildForest(self, X_train, y_train):
rf = RandomForestRegressor(n_estimators=500, verbose=1)
rf.fit_transform(X_train, y_train)
return rf
Wenn es eine bessere Möglichkeit gibt, mein Modell über die API zugänglich zu machen, wäre dies ebenfalls gut zu wissen.
Update: Ich habe es auf 100 Bäume reduziert, ohne viel Vorhersagekraft zu verlieren. Die gespeicherte Größe beträgt jetzt 1,3 GB - viel besser handhabbar, aber immer noch nicht großartig.
quelle
Antworten:
Die Größe jedes Baumes hängt sehr stark von seiner Tiefe ab. Ändern Sie daher die maximale Tiefe (
max_depth
). Versuchen Sie, eine endliche Zahl festzulegen (im Gegensatz zur Standardeinstellung "Keine"), und versuchen Sie dann, diese Zahl zu verringern. Zusätzlich (oder alternativ) versuchen zu erhöhenmin_samples_split
odermin_samples_split
.Sie können Ihre Funktionen auch analysieren und nur wichtige behalten. Der einfachste Weg wäre, einen Blick auf
clf.feature_importances_
Ihren Wald zu werfen . (Im Allgemeinen ist das Finden wichtiger Merkmale eine Kunst und Wissenschaft für sich.) Schließen Sie nicht relevante Merkmale aus und bauen Sie den Wald wieder auf.quelle
Versuche dies:
Hinweis: Mit dem Parameter "-1" wird die Modelldateigröße stark reduziert.
Laut Dokumentation:
quelle