我正在Python中使用sklearn在图像数据的语料库上训练随机森林分类器。因为我正在执行图像分割,所以我必须存储每个像素的数据,最终形成一个巨大的矩阵,例如100,000,000个长的数据点矩阵,因此当在该矩阵上运行RF分类器时,我的计算机出现内存溢出错误,并永远运行。顺序拟合随机森林sklearn
我的一个想法是在序列小批量数据集上训练分类器,因此最终要对整体进行训练,但每次都要改进分类器的匹配度。这是一个可以工作的想法吗?每次运行时,配合是否会覆盖最后一个配合?
我正在Python中使用sklearn在图像数据的语料库上训练随机森林分类器。因为我正在执行图像分割,所以我必须存储每个像素的数据,最终形成一个巨大的矩阵,例如100,000,000个长的数据点矩阵,因此当在该矩阵上运行RF分类器时,我的计算机出现内存溢出错误,并永远运行。顺序拟合随机森林sklearn
我的一个想法是在序列小批量数据集上训练分类器,因此最终要对整体进行训练,但每次都要改进分类器的匹配度。这是一个可以工作的想法吗?每次运行时,配合是否会覆盖最后一个配合?
您可以使用warm_start
为了预先计算树:
# 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)
或者
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)
这是有帮助的!如果我使用warm_start,我可以设置n_jobs = -1来平行拟合和预测吗? –
在某些文档中指出:“将'warm_start'构造参数设置为'True'将禁用对并行集成的支持,但对于在训练过程中跟踪OOB错误轨迹是必需的。” –
是的,谢谢你,你的回应是有帮助的! –
你尝试调整图像以较低的分辨率即大幅减少每个图像的像素数? – miranido
是的,我正在将我的图像从原始分辨率降低到100x100像素。 –
我工作过一个类似的问题,即射频对图像补丁(包含很多图像)起作用。我在所有图像补丁的引导样本上分别构建了这些树(基本上我可以将它们放入内存+创建模型的空间中)。装上后,我腌制每棵树。我有一个只适合单个树的脚本,以便释放内存(并不是所有内容都放在单个脚本的循环中)。通过手动加载树来装配我构建RF模型的所有树后。 –