/ / Dopasowywanie sekwencyjne Random Forest - python, nauka maszynowa, nauka scikit

Kolejno dopasowywany losowy las sklearn - python, uczenie maszynowe, nauka scikit

Trenuję klasyfikatora losowego lasupython używający sklearn na korpusie danych obrazu. Ponieważ wykonuję segmentację obrazu, muszę przechowywać dane każdego piksela, co kończy się ogromną matrycą, podobnie jak matryca danych o długości 100 000 000, a więc podczas uruchamiania klasyfikatora RF na tej macierzy, mój komputer otrzymuje błąd przepełnienia pamięci i trwa wiecznie.

Jednym z pomysłów, jakie miałem, było przeszkolenie klasyfikatorasekwencyjne małe partie zbioru danych, dlatego ostatecznie szkolą się na całości, ale za każdym razem poprawiając dopasowanie klasyfikatora. Czy to pomysł, który mógłby zadziałać? Czy dopasowanie po prostu zastąpi ostatnie dopasowanie przy każdym uruchomieniu?

Odpowiedzi:

3 dla odpowiedzi № 1

Możesz użyć warm_start w celu wstępnego obliczenia drzew:

# First build 100 trees on X1, y1
clf = RandomForestClassifier(n_estimators=100, warm_start=True)
clf.fit(X1, y1)

# Build 100 additional trees on X2, y2
clf.set_params(n_estimators=200)
clf.fit(X2, y2)

Alternatywnie

def generate_rf(X_train, y_train, X_test, y_test):
rf = RandomForestClassifier(n_estimators=5, min_samples_leaf=3)
rf.fit(X_train, y_train)
print "rf score ", rf.score(X_test, y_test)
return rf

def combine_rfs(rf_a, rf_b):
rf_a.estimators_ += rf_b.estimators_
rf_a.n_estimators = len(rf_a.estimators_)
return rf_a

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.33)
# Create "n" random forests classifiers
rf_clf = [generate_rf(X_train, y_train, X_test, y_test) for i in range(n)]
# combine classifiers
rf_clf_combined = reduce(combine_rfs, rfs)