如何在scikit-learn中显示每次迭代的成本函数



我最近一直在运行一些线性/逻辑回归模型,我想知道如何为每次迭代输出成本函数。sci-kit LinearRegression中的参数之一是"maxiter",但在现实中,你需要看到成本与迭代之间的关系,以找出这个值的真正需求,即,是否值得花费更多的计算时间来运行更多的迭代等

我肯定我错过了一些东西,但我本以为有一种方法输出这个信息?

提前感谢!

在拟合任何估计量时,必须了解是否存在迭代(意味着计算成本函数)或解析精确解。

线性回归

事实上,线性回归(即普通最小二乘的最小化)不是一种算法,而是一个可以使用不同技术解决的最小化问题。这些技巧

不涉及这里描述的统计部分的细节:

在实践中至少有三种方法用于计算最小二乘解:正规方程,QR分解和奇异值分解。

就我进入代码的细节而言,似乎计算时间涉及到获得解析精确解,而不是在成本函数上迭代。但我敢打赌,它们取决于您的系统是确定不足、确定良好还是确定过度,以及您正在使用的语言和库。

逻辑回归

与线性回归一样,逻辑回归是一个最小化问题,可以使用不同的技术来解决,对于scikit-learn来说,这些技术是:newton-cg, lbfgs, liblinearsag。正如您提到的,sklearn.linear_model.LogisticRegression包含max_iter参数,这意味着它包含迭代*。这些是受控制的,因为更新后的参数不再改变 -直到某个epsilon值-或者因为它达到了最大迭代次数。

*正如文档中提到的,它只包含一些求解器的迭代

仅适用于newton-cg, sag和lbfgs求解器。求解器收敛所需的最大迭代次数。

实际上,每个求解器都有自己的实现,例如这里的liblinear求解器。

我建议使用verbose参数,可能等于23以获得最大值。根据求解器的不同,它可能会打印成本函数错误。但是,我不明白你打算如何使用这些信息。

另一个解决方案可能是编写自己的求解器,并在每次迭代时打印成本函数。


好奇心杀死猫,但我检查了scikit的源代码,其中涉及更多。

  1. 首先,sklearn.linear_model.LinearRegression使用拟合来训练其参数。

  2. 然后,在fit的源代码中,他们使用了Numpy的普通最小二乘(源)。

  3. 最后,Numpy的最小二乘函数使用函数scipy.linalg.lapack.dgelsd,它是用Fortran编写的LAPACK(线性代数包)函数DGELSD的包装器。

也就是说,对于scikit-learn开发人员来说,进入错误计算(如果有的话)并不容易。然而,对于LinearRegression的各种使用以及我所拥有的更多,成本-函数和迭代时间之间的权衡得到了很好的解决。

相关内容

  • 没有找到相关文章

最新更新