在同一个模型上多次调用 fit() 有啥作用?

Posted

技术标签:

【中文标题】在同一个模型上多次调用 fit() 有啥作用?【英文标题】:What does calling fit() multiple times on the same model do?在同一个模型上多次调用 fit() 有什么作用? 【发布时间】:2018-09-25 05:59:20 【问题描述】:

在我实例化一个 scikit 模型(例如 LinearRegression)后,如果我多次调用它的 fit() 方法(使用不同的 Xy 数据),会发生什么?它是否适合数据上的模型,就像我刚刚重新实例化模型(即从头开始)一样,还是将上次调用 fit() 时已经适合的数据保存到帐户中?

尝试使用LinearRegression(也在查看它的源代码)在我看来,每次我调用fit() 时,它都会从头开始拟合,忽略之前对同一方法的任何调用的结果。我想知道这是否是真的,我可以将这种行为用于 scikit learn 的所有模型/管道。

【问题讨论】:

【参考方案1】:

如果您第二次执行model.fit(X_train, y_train) - 它会覆盖所有之前拟合的系数、权重、截距(偏差)等。

如果您只想拟合数据集的一部分,然后通过拟合新数据来改进模型,那么您可以使用estimators, supporting "Incremental learning" (those, that implement partial_fit() method)

【讨论】:

一些估算器(具有warm_start 参数)将在warm_start = True 时重用先前调用fit() 的解决方案作为新调用的初始解决方案。 @VivekKumar,是的,这是真的。但对于“线性模型”算法(如 LogisticRegression),先前拟合的系数将仅用于 初始化 步骤,因此它们也将/可能被覆盖 是的,这就是我的意思。谢谢 我们可以在 KNN 中使用 partial_fit 吗? 链接失效,我相信新位置是scikit-learn.org/0.15/modules/scaling_strategies.html【参考方案2】:

您可以在机器学习中互换使用术语 fit()train() 词。根据您实例化的分类模型,可能是clf = GBNaiveBayes()clf = SVC(),您的模型使用了指定的机器学习技术。 一旦您致电clf.fit(features_train, label_train),您的模型就会开始使用您通过的特征和标签进行训练。

您可以使用clf.predict(features_test) 进行预测。 如果您再次调用clf.fit(features_train2, label_train2),它将使用传递的数据再次开始训练,并将删除之前的结果。您的模型将重置以下内部模型:

权重 拟合系数 偏见 以及其他与培训相关的内容...

如果您希望保留之前计算的内容并使用下一个数据进行额外训练,您也可以使用 partial_fit() 方法

【讨论】:

以上是关于在同一个模型上多次调用 fit() 有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

调用 fit() 是不是应该保持模型的权重?

多次调用 ::AfxInitRichEdit2 有啥问题吗?

调用 XGBoost .fit 后的 Python sklearn NotFittedError

注册一个单元重用的调用实际上有啥作用?

sklearn.decomposition.DicitonaryLearning.fit 中的 y 参数有啥作用?

Python Tensorflow - 多次运行 model.fit 而不重新实例化模型