gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:51 24 4
gpt4 key购买 nike

我最近一直在运行一些线性/逻辑回归模型,我想知道如何为每次迭代输出成本函数。 sci-kit LinearRegression 中的参数之一是“maxiter”,但实际上您需要查看成本与迭代的关系,以找出该值真正需要的值,即值得计算时间运行更多迭代等的好处

我确定我遗漏了什么,但我会认为有一种方法可以输出此信息?

提前致谢!

最佳答案

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

线性回归

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

没有深入描述统计部分的细节here :

There are at least three methods used in practice for computing least-squares solutions: the normal equations, QR decomposition, and singular value decomposition.

就我深入了解代码的细节而言,计算时间似乎是通过获取解析精确解而不是迭代成本函数来实现的。但我敢打赌,它们取决于您的系统确定不足、确定良好或确定过度,以及您使用的语言和库。

逻辑回归

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

*如文档中所述,它仅包含某些求解器的迭代

Useful only for the newton-cg, sag and lbfgs solvers. Maximum number of iterations taken for the solvers to converge.

其实每个求解器都涉及自己的实现,比如here对于 liblinear 求解器。

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

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


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

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

  2. 然后,在 source fit 的代码,他们使用 Ordinary Least Square of Numpy (source)。

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

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

关于python - 如何在 scikit-learn 中显示每次迭代的成本函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38179687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com