增量拟合 sklearn RandomForestClassifier

Sac*_*gde 0 python machine-learning random-forest scikit-learn

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

调用 fit 新数据:

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)
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

我想确认正确的方法,还想知道该方法在所有分类器中是否一致

des*_*aut 5

您的第二种方法是“正确的”,正如您已经猜到的那样,每次附加数据时,它都会从头开始拟合一个新的分类器;但可以说这不是你要找的。

你真正要找的是论点warm_start;从文档

warm_start : bool,可选(默认=False)

当设置为 时True,重用之前调用 fit 的解决方案并向集成添加更多估计器,否则,只适合一个全新的森林。见词汇表

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

clf = RandomForestClassifier(n_estimators=100, warm_start=True)
Run Code Online (Sandbox Code Playgroud)

这在分类器之间不一定一致(有些分类器带有partial_fit方法) - 参见例如是否可以逐步训练 sklearn 模型(例如 SVM)?对于SGDClasssifier; 您应该始终查看相关文档。