Python 逻辑回归求解器&x27;定义
我正在使用sklearn的逻辑回归函数,我想知道每个解算器在幕后到底在做什么来解决优化问题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),接受一个输入并给出估计的输出值 这个假设可以是一个简单的单变量线性方程。。关于我们使用的算法类型(即线性回归、逻辑回归等),我们可以得出一个非常复杂且很长的多元方程 我们的任务
有人能简单描述一下“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)恰好是一个二次函数,那么在一步中就可以找到精确的极值
缺点: