Sklearn 随机森林在线学习

数据挖掘 随机森林 scikit-学习
2022-03-05 18:26:58

我可以使用随机森林进行在线学习吗?我有几百万个数据点,分类器无法完成交叉验证步骤。

我可以按顺序把它分成几块吗?
当前代码:

X_train, y_train, X_val, y_val, X_test, y_test = load_dataset()

   print('Planting trees...')
   clf = RandomForestClassifier(
       n_estimators=50,
       max_depth=None,
       min_samples_split=1,
       random_state=0
   )

   print('Growing trees...')
   classifier = clf.fit(X_train, y_train)

   # see how we did
   print('Testing trees...')
   scores = cross_val_score(classifier, X_test, y_test)
   print(scores)
   print('accuracy: %d' % (scores.mean()))

我可以将其更改为:

for chunk in df:
     clf.fit(...)
     cross_validate...
1个回答

没有开箱即用的东西可以进行真正的在线学习。为了让 scikit-learn 算法支持在线学习,它必须提供该partial_fit功能,但RandomForestClassifier事实并非如此。我认为您提供的代码只会根据当前正在查看的数据子集重新调整整个森林。

您可以尝试的一种替代方法是RandomForestClassifier使用warm_start设置为 True 进行初始化。然后在每次后续调用 时fit,随机森林都会将一组新的树添加到集合中。您可能必须减少集成中估计器的数量,因为您最终得到的估计器数量将是您初始化的数量乘以您循环的块数。

这与您以真正在线的方式训练整个集成的方式不同,但它可能足够接近您的目的。