提高scikit学习多项式Lo​​gistic回归的速度

时间:2020-07-09 12:43:41

标签: python scikit-learn

我正在尝试在scikit学习中训练逻辑回归模型,并且训练时间非常长,大约需要2个小时。数据集的大小为21613 x19。我是scikit学习的新手,因此我不知道我的代码是错误的还是训练时间很长。任何有关如何提高训练速度的建议将不胜感激!

下面用于训练的代码

# get the LogisticRegression estimator
from sklearn.linear_model import LogisticRegression

# training the model
# apply algorithm  to data using fit()
clf = LogisticRegression(solver='newton-cg',multi_class='multinomial')
clf.fit(X_train,y_train)

3 个答案:

答案 0 :(得分:2)

如果有使用此求解器的特定原因,您可以做的一件事是通过设置n_jobs=-1参数来并行化计算。

如果您愿意使用其他求解器,则可以通过 one-versus-rest 策略使用更快的求解器。例如:

clf = LogisticRegression(solver='liblinear', multi_class='ovr')

这一切都在documentation中,它可以帮助您指导选择求解器:

求解器: {'newton-cg','lbfgs','liblinear','sag','saga'},default ='lbfgs'

用于优化问题的算法。

  • 对于小型数据集,“ liblinear”是一个不错的选择,而“ sag”和“ 大型的“传奇”更快。

  • 对于多类问题,仅“ newton-cg”,“ sag”,“ saga”和“ lbfgs” 处理多项损失; “ liblinear”仅限于余数 方案。

  • “ newton-cg”,“ lbfgs”,“ sag”和“ saga”处理L2或不加罚款

  • “ liblinear”和“ saga”也处理L1处罚

  • “ saga”也支持“ elasticnet”惩罚

  • “ liblinear”不支持设置惩罚='none'

答案 1 :(得分:1)

由于您选择的求解器,速度可能很慢。牛顿-cg是牛顿法。对于大型数据集,这很慢,因为它会计算二阶导数。使用sag或saga等不同的求解器,它们对于大型数据集的速度很快。

答案 2 :(得分:1)

您可能想要更改求解器。 documentation 表示 scikit-learn 有 5 个不同的求解器:“sag”、“saga”、“newton-cg”、“lbfgs”和“liblinear”(不适用于多项式)。

import time
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# Set training and validation sets
X, y = make_classification(n_samples=1000000, n_features=19, n_classes = 8, n_informative=8)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1000)

# Solvers
solvers = ['newton-cg', 'sag', 'saga', 'lbfgs']

for sol in solvers: 
    start = time.time()
    logreg = LogisticRegression(solver=sol, multi_class='multinomial')
    logreg.fit(X_train, y_train)
    end = time.time()
    print(sol + " Fit Time: ",end-start)

输出(来自 16GB RAM 8 核 Macbook): enter image description here

为问题选择合适的求解器可以节省大量时间(代码改编自 here)。要确定哪种求解器适合您的问题,您可以查看 documentation 中的表格以了解更多信息(请注意,'newton-cg' 对于大型数据集并不会更快)。

enter image description here