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

Python 如何在scikit learn中显示每次迭代的成本函数?,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我最近一直在运行一些线性/逻辑回归模型,我想知道如何输出每次迭代的成本函数。sci kit LinearRegression中的一个参数是“maxiter”,但实际上,您需要查看成本与迭代的关系,以了解该值真正需要的是什么,即运行更多迭代所需的计算时间是否值得 我肯定我遗漏了一些东西,但我本以为有一种方法可以输出这些信息 提前谢谢 在拟合任何估计器时,必须了解是否存在迭代(意味着计算成本函数)或解析精确解 线性回归 事实上,线性回归-即普通最小二乘法的最小化-不是一个算法,而是一个可以使用不同技

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

我肯定我遗漏了一些东西,但我本以为有一种方法可以输出这些信息


提前谢谢

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

线性回归

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

未涉及所述统计部分的详细信息:

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

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

逻辑回归

作为线性回归,逻辑回归是一个最小化问题,可以使用不同的技术来解决,对于scikit学习,这些技术包括:
newton cg
lbfgs
liblinear
sag
。 正如您提到的,
sklearn.linear\u model.LogisticRegression
包括
max\u iter
参数,这意味着它包括迭代*。这些被控制,要么是因为更新后的参数不再改变(达到某个ε值),要么是因为它达到了最大迭代次数

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

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

事实上,每个解算器都有自己的实现,例如对于
liblinear
解算器

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

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


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

  • 首先,
    sklearn.linear\u model.LinearRegression
    使用拟合来训练其参数

  • 然后,在
    fit
    的代码中,他们使用()

  • 最后,Numpy的最小二乘函数使用
    scipy.linalg.lapack.dgelsd
    ,这是用Fortran()编写的lapack(线性代数包)函数
    dgelsd
    的包装


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

    感谢您的回复。我的困惑来自于这样一个事实,即您有一个参数指示最大迭代次数。然而,这在很大程度上取决于成本函数(假设暂时存在成本函数)的收敛方式。您建议如何评估算法是否正确收敛到合理值?我认为,在大多数情况下,我只是希望能够看到成本与迭代(例如,在Andrew Ng的课程中经常显示)的对比,以说服自己,算法正在做正确的事情等。是否有任何其他可视化或指标可供您推荐,以评估您的模型?您是对的,我错过了
    logisticreturnal
    上的部分,其中包括
    maxiter
    。我刚刚编辑了答案,评估模型可以使用交叉验证技术,而不是成本函数的收敛性。培训时,估计值的收敛性不会评估模型的质量,反之亦然!考虑过拟合:在收敛时,成本函数变得非常低,但您的模型不好。你可能要找的是比较估计器。在这种情况下,请在交叉验证分数上进行比较。感谢您的指导:)