`warm_start` 参数及其对计算时间的影响

`warm_start` Parameter And Its Impact On Computational Time

我有一个具有一组已定义参数 (warm_start=True) 的 logistic regression 模型。

一如既往,我调用 LogisticRegression.fit(X_train, y_train) 并使用之后的模型来预测新的结果。

假设我更改了一些参数,例如 C=100 并使用 相同的训练数据 .

再次调用 .fit 方法

理论上,与 warm_start=False 的模型相比,我认为 .fit 第二次应该花费更少的计算时间。然而,根据经验实际上并非如此。

请帮我理解warm_start参数的概念。

P.S.: I have also implemented SGDClassifier() for an experimentation.

我希望您理解使用前面的解决方案作为以下适合 warm_start=True 的初始化的概念。

Documentation 声明 warm_start 参数对于 liblinear 求解器没有用,因为没有针对特殊线性情况的有效实现。要补充的是,liblinear 求解器是 LogisticRegression 的默认选择,这基本上意味着权重将在每次新拟合之前完全重新实例化。

要利用 warm_start 参数并减少计算时间,您应该为 LogisticRegression 使用以下求解器之一:

  • newton-cglbfgs 支持 L2 范数惩罚。他们通常也更好地处理多分类问题;
  • sagsaga 在更大的数据集上收敛速度比 liblinear 求解器更快,并且使用多项式下降过程中的损失。

简单的例子

from sklearn.linear_model import LogisticRegression

X = [[1, 2, 3], [4, 5, 6], [1, 2, 3]]
y = [1, 0, 1]

# warm_start would work fine before each new fit
clf = LogisticRegression(solver='sag', warm_start=True)

clf.fit(X, y)

希望对您有所帮助。