Python 逻辑回归求解器&x27;定义

Python 逻辑回归求解器&x27;定义,python,python-3.x,scikit-learn,logistic-regression,Python,Python 3.x,Scikit Learn,Logistic Regression,我正在使用sklearn的逻辑回归函数,我想知道每个解算器在幕后到底在做什么来解决优化问题 有人能简单描述一下“newton cg”、“sag”、“lbfgs”和“liblinear”在做什么吗?好吧,我希望我来参加聚会不会太晚!在挖掘大量信息之前,让我先试着建立一些直觉(警告:这不是简单的比较) 介绍 假设h(x),接受一个输入并给出估计的输出值 这个假设可以是一个简单的单变量线性方程。。关于我们使用的算法类型(即线性回归、逻辑回归等),我们可以得出一个非常复杂且很长的多元方程 我们的任务

我正在使用sklearn的逻辑回归函数,我想知道每个解算器在幕后到底在做什么来解决优化问题


有人能简单描述一下“newton cg”、“sag”、“lbfgs”和“liblinear”在做什么吗?

好吧,我希望我来参加聚会不会太晚!在挖掘大量信息之前,让我先试着建立一些直觉(警告:这不是简单的比较)


介绍 假设
h(x)
,接受一个输入并给出估计的输出值

这个假设可以是一个简单的单变量线性方程。。关于我们使用的算法类型(即线性回归、逻辑回归等),我们可以得出一个非常复杂且很长的多元方程

我们的任务是找到在预测输出时误差最小的最佳参数(也称θ或权重)。我们将此错误称为成本或损失函数,显然我们的目标是将其最小化,以获得最佳预测输出

还有一件事需要回顾,参数值与其对成本函数的影响(即误差)之间的关系看起来像一条钟形曲线(即二次曲线;回顾这一点,因为它非常重要)

因此,如果我们从曲线中的任何一点开始,并且如果我们继续取每个点的导数(即切线),我们将到达所谓的全局最优值,如下图所示:

如果我们在最小代价点(即全局最优点)取偏导数,我们会找到切线的斜率=0(那么我们就知道我们达到了目标)

只有当我们有凸代价函数时,这才是有效的,但如果我们没有,我们可能会陷入所谓的局部最优;考虑这个非凸函数:

现在你应该对我们正在做的事情和术语之间的关系有了直觉:去范性,切线,成本函数,假设等等

旁注:上述直觉也与梯度下降算法有关(见下文)


背景 线性近似:

给定一个函数,
f(x)
,我们可以在
x=a
处找到它的切线。切线L(x)的方程为:
L(x)=f(a)+f′(a)(x−a) 

查看函数及其切线的下图:

从这个图中我们可以看到,在
x=a
附近,切线和函数具有几乎相同的图。有时,我们将使用切线
L(x)
,作为函数
f(x)
的近似值,靠近
x=a
。在这些情况下,我们称切线为
x=a
处函数的线性近似

二次近似:

与线性近似相同,但这一次我们处理的是曲线,但我们无法通过切线找到0附近的点

相反,我们使用一条抛物线(这是一条曲线,其中任何点与固定点或固定直线的距离相等),如下所示:

为了拟合一条好的抛物线,抛物线和二次函数应该有相同的值,相同的一阶导数和二阶导数。。。公式是(出于好奇):
Qa(x)=f(a)+f'(a)(x-a)+f'(a)(x-a)2/2

现在我们应该准备好进行详细的比较


两种方法的比较 1。牛顿法

回想一下在x处梯度下降步骤的动机:我们最小化二次函数(即成本函数)

牛顿的方法在某种意义上使用了更好的二次函数最小化。 更好,因为它使用二次近似(即一阶和二阶偏导数)

你可以把它想象成一个带Hessian的扭曲梯度下降(Hessian是nxn阶二阶偏导数的平方矩阵)

此外,牛顿方法的几何解释是,在每次迭代中,一个人通过一个围绕xn的二次函数来近似
f(x)
,然后朝着该二次函数的最大值/最小值迈出一步(在更高的维度中,这也可能是鞍点)。注意,如果f(x)恰好是一个二次函数,那么在一步中就可以找到精确的极值

缺点:

  • 由于Hessian矩阵(即二次偏导数计算),计算成本很高

  • 它吸引到多变量优化中常见的鞍点(即,其偏导数对该输入应为最大值还是最小值不一致的点!)

  • 2。有限内存Broyden–Fletcher–Goldfarb–Shanno算法:

    简言之,它类似于牛顿法,但这里使用梯度计算(或近似梯度计算)指定的更新来近似海森矩阵。换句话说,使用对逆Hessian矩阵的估计

    术语“有限内存”仅仅意味着它只存储一些隐式表示近似值的向量

    如果我敢说,当数据集很小时,与其他方法相比,L-BFGS的性能相对最好,尤其是它节省了大量内存,但也有一些“严重”的缺点,例如,如果它不受保护,它可能不会收敛到任何东西

    旁注:此解算器已成为sklearn Logisticsin中的默认解算器