Я считаю, что это возможно путем изменения атрибутов estimators_
и n_estimators
на объекте RandomForestClassifier. Каждое дерево в лесу хранится как объект DecisionTreeClassifier, а список этих деревьев сохраняется в атрибуте estimators_
. Чтобы убедиться, что нет разрыва, также имеет смысл изменить количество оценок в n_estimators
.
Преимущество этого метода заключается в том, что вы можете построить кучу небольших лесов параллельно на нескольких машинах и объединить их.
Вот пример, используя данные диафрагмы набора:
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)
Есть ли способ обобщить это использовать другие модели - логистическая регрессия, Guasian NB, SVM – Merlin
@mgoldwasser привет, я только что прочитал вас ответ, и у меня есть более общий вопрос. Могу ли я использовать функции, которые не имеют одинаковой длины? Может, например, один из 300 образцов, а другой 200? Извините, вне темы, но, читая ваш ответ, я собираюсь создать лес для каждой функции. – DimKoim
@DimKoim Я думаю, что работала бы – mgoldwasser