wierzę, jest to możliwe poprzez modyfikację estimators_
i n_estimators
atrybutów obiektu RandomForestClassifier. Każde drzewo w lesie jest przechowywane jako obiekt DecisionTreeClassifier, a lista tych drzew jest przechowywana w atrybucie estimators_
. Aby upewnić się, że nie ma przerwy, należy zmienić liczbę estymatorów w n_estimators
.
Zaletą tej metody jest to, że można zbudować kilka małych lasów równolegle na wielu maszynach i połączyć je.
Oto przykład wykorzystując dane tęczówki Zestaw:
from sklearn.ensemble import RandomForestClassifier
from sklearn.cross_validation import train_test_split
from sklearn.datasets import load_iris
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
iris = load_iris()
X, y = iris.data[:, [0,1,2]], iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.33)
# in the line below, we create 10 random forest classifier models
rfs = [generate_rf(X_train, y_train, X_test, y_test) for i in xrange(10)]
# in this step below, we combine the list of random forest models into one giant model
rf_combined = reduce(combine_rfs, rfs)
# the combined model scores better than *most* of the component models
print "rf combined score", rf_combined.score(X_test, y_test)
Czy istnieje sposób uogólnić to do korzystania z innych modeli - regresji logistycznej, Guasian NB, SVM – Merlin
@mgoldwasser hi, ja po prostu czytać cię odpowiedź i mam bardziej ogólne pytanie. Czy mogę korzystać z funkcji, które nie mają tej samej długości? Czy na przykład jedna może mieć 300 próbek, a druga 200? Przykro nam z tego tematu, ale czytając odpowiedź, myślę, aby zbudować las dla każdej funkcji. – DimKoim
@DimKoim Myślę, że to zadziała – mgoldwasser