【问题标题】:Incrementally fitting sklearn RandomForestClassifier增量拟合 sklearn RandomForestClassifier
【发布时间】:2019-08-03 01:07:11
【问题描述】:

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

用新数据调用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)

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

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 时间重新学习模型。

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

【问题讨论】:

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


    【解决方案1】:

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

    你真正要找的是参数warm_start;来自docs:

    warm_start : bool,可选(默认=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;您应该始终查看相关文档。

    【讨论】:

    • 谢谢,所以我采用其他分类器也很可能会创建全新的分类器,希望他们能够保留以前的模型
    • @SachinHegde 正如我所说,没有标准——文档永远是你最好的朋友
    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 2020-11-01
    • 2019-08-18
    • 2013-03-29
    • 2014-06-11
    • 2018-02-13
    • 2019-04-26
    • 2014-08-28
    相关资源
    最近更新 更多