逐步拟合sklearn RandomForestClassifier

时间:2019-03-12 14:10:51

标签: python machine-learning scikit-learn random-forest

我正在使用一个在每次迭代时都会生成数据的环境。我想保留先前迭代中的模型,并将新数据添加到现有模型中。
我想了解模型拟合的工作原理。它是将新数据与现有模型拟合还是将使用新数据创建新模型。

根据新数据进行调用:

clf = RandomForestClassifier(n_estimators=100)
for i in customRange:
    get_data()
    clf.fit(new_train_data) #directly fitting new train data
    clf.predict(new_test_data)

或 保存火车数据的历史记录并调用适合所有历史数据的记录是唯一的解决方案

clf = RandomForestClassifier(n_estimators=100)
global_train_data = new dict()
for i in customRange:
    get_data()
    global_train_data.append(new_train_data)  #Appending new train data 
    clf.fit(global_train_data) #Fitting on global train data
    clf.predict(new_test_data)

我的目标是有效地训练模型,所以我不想浪费CPU时间重新学习模型。

我想确认正确的方法,并且还想知道该方法在所有分类器

中是否一致

1 个答案:

答案 0 :(得分:4)

您的第二种方法是“正确的”,在某种意义上,正如您已经猜到的,每次添加数据后,它将从头开始适合新的分类器;但是可以说这不是您想要的。

您真正要寻找的是参数warm_start;来自docs

  

warm_start:布尔型,可选(默认为False)

     

设置为True时,请重用上一个调用的解决方案以拟合并在集合中添加更多估计量,否则,仅拟合整个   新森林。参见Glossary

因此,您应该使用第一种方法,并进行以下修改:

clf = RandomForestClassifier(n_estimators=100, warm_start=True)

这不一定在各个分类器之间是一致的(某些分类器使用partial_fit方法)-例如,Is it possible to train a sklearn model (eg SVM) incrementally?用于SGDClasssifier;您应该始终检查相关文档。