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

最近我一直在运行一些线性/逻辑回归模型,我想知道如何输出每轮迭代的成本函数。scikit-learn中的LinearRegression参数之一是’maxiter’,但实际上你需要查看成本与迭代的关系来确定这个值到底应该设为多少,即是否值得为了更高的计算时间而运行更多的迭代等

我确定我遗漏了什么,但我以为应该有一个方法可以输出这些信息?

提前感谢!


回答:

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

线性回归

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

不深入探讨这里描述的统计部分的细节:

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

就我对代码细节的了解而言,似乎计算时间是通过获取解析精确解来涉及的,而不是通过迭代成本函数。但我猜这取决于你的系统是欠定、适定还是超定,以及你使用的语言和库。

逻辑回归

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

*如文档中提到的,仅对某些求解器包括迭代

仅对newton-cg、sag和lbfgs求解器有用。求解器收敛所需的最大迭代次数。

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

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

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


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

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

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

  3. 最后,Numpy的Least Square函数使用了函数scipy.linalg.lapack.dgelsd,这是对Fortran编写的LAPACK(线性代数包)函数DGELSD的包装()。

也就是说,对于scikit-learn开发者来说,进入错误计算(如果有的话)并不容易。然而,对于我使用过的LinearRegression和许多其他情况,成本函数与迭代时间之间的权衡得到了很好的处理。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注