如何使用热启动

新手上路,请多包涵

我想使用 warm_start 参数将训练数据添加到我的随机森林分类器中。我希望它像这样使用:

 clf = RandomForestClassifier(...)
clf.fit(get_data())
clf.fit(get_more_data(), warm_start=True)

但是 warm_start 参数是构造函数参数。那么我会做这样的事情吗?

 clf = RandomForestClassifier()
clf.fit(get_data())
clf = RandomForestClassifier (warm_start=True)
clf.fit(get_more_data)

这对我来说毫无意义。对构造函数的新调用不会丢弃以前的训练数据吗?我想我错过了什么。

原文由 zoran119 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 873
2 个回答

的基本模式(取自 Miriam 的回答):

 clf = RandomForestClassifier(warm_start=True)
clf.fit(get_data())
clf.fit(get_more_data())

将是正确的 API 用法。

但是这里有一个问题。

正如文档所说:

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

这意味着,唯一能为您做的事情 warm_start 是添加新的决策树。以前所有的树似乎都没有动过!

让我们用 一些来源 来检查一下:

   n_more_estimators = self.n_estimators - len(self.estimators_)

    if n_more_estimators < 0:
        raise ValueError('n_estimators=%d must be larger or equal to '
                         'len(estimators_)=%d when warm_start==True'
                         % (self.n_estimators, len(self.estimators_)))

    elif n_more_estimators == 0:
        warn("Warm-start fitting without increasing n_estimators does not "
             "fit new trees.")

这基本上告诉我们,在接近新拟合之前,您需要增加估算器的数量!

我不知道 sklearn 在这里期望什么样的用法。我不确定,如果拟合、增加内部变量并再次拟合是正确的用法,但我以某种方式怀疑它(特别是因为 n_estimators 不是公共类变量)。

你的基本方法(关于这个库和这个分类器)可能不是你在这里的核外学习的好主意!我不会进一步追求这个。

原文由 sascha 发布,翻译遵循 CC BY-SA 3.0 许可协议

from sklearn.datasets import load_iris
boston = load_iris()
X, y = boston.data, boston.target

### RandomForestClassifier
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=10, warm_start=True)
rfc.fit(X[:50], y[:50])
print(rfc.score(X, y))
rfc.n_estimators += 10
rfc.fit(X[51:100], y[51:100])
print(rfc.score(X, y))
rfc.n_estimators += 10
rfc.fit(X[101:150], y[101:150])
print(rfc.score(X, y))

下面是 warm_start 和 partial_fit 之间的区别。

当在同一数据集上重复拟合估计器时,但对于多个参数值(例如在网格搜索中找到性能最大化的值),可以重用从先前参数值学习的模型的各个方面,从而节省时间。当 warm_start 为真时,现有的拟合模型属性将用于在后续的拟合调用中初始化新模型。请注意,这仅适用于某些模型和某些参数,甚至是某些顺序的参数值。例如,在构建随机森林时可以使用 warm_start 来向森林中添加更多的树(增加 n_estimators),但不会减少它们的数量。

partial_fit 也保留了调用之间的模型,但有所不同:使用 warm_start 参数会发生变化,并且数据在调用 fit 时(或多或少)保持不变;使用 partial_fit,小批量数据更改和模型参数保持不变。

在某些情况下,您希望使用 warm_start 来适应不同但密切相关的数据。例如,一开始可能适合数据的一个子集,然后微调整个数据集上的参数搜索。对于分类,一系列 warm_start 调用中的所有数据都必须包含来自每个类的样本。

原文由 manish Prasad 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏