python - 增量拟合sklearn RandomForestClassifier

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

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

最佳答案

您的第二种方法是“正确的”,因为正如您已经猜到的那样,每次附加数据时它都会从头开始适应新的分类器;但可以说这不是您正在寻找的。

您实际上正在寻找的是参数 warm_start ;来自docs :

warm_start : bool, optional (default=False)

When set to True, reuse the solution of the previous call to fit and add more estimators to the ensemble, otherwise, just fit a whole new forest. See the Glossary.

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

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

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

关于python - 增量拟合sklearn RandomForestClassifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55123534/

相关文章:

python - 以随机顺序打印字典的内容

Python: 使用 Kaitai Struct 读取 ID3v1 标签

python 2.6-有效地删除和计算字典列表中的重复项

scikit-learn - sklearn 如何一步步计算准确度分数?

python - 当 tkinter 窗口关闭时,python 程序并未结束

r - 使用 R 从文本中提取位置列表

machine-learning - 对YOLO过程感到困惑

java - 如何评估 "double negative"句子的情绪

scikit-learn - sklearn : AUC score for LinearSVC and OneSVM

python - Sklearn 中的 T-SNE 给出 NaN 或 Inf 数据错误