sklearn.linear_model.LogisticRegression 是否总是收敛到最佳解决方案?
Does sklearn.linear_model.LogisticRegression always converge to best solution?
使用这段代码时,我注意到它的收敛速度快得令人难以置信(小
一秒的一小部分),即使模型 and/or 数据非常大。我
怀疑在某些情况下我没有得到任何接近最佳解决方案的东西,
但这很难证明。最好能有某种类型的选项
全局优化器,例如 basin hopping 算法,即使这消耗了 100
到 1,000 倍 CPU。有人对这个问题有什么想法吗?
这是一个非常复杂的问题,这个答案可能不完整,但应该会给您一些提示(因为您的问题也表明存在一些知识空白):
(1) 首先,我不同意 some type of global optimizer such as the basin hopping algorithm, even if this consumed 100 to 1,000 times as much CPU
的愿望,因为这在大多数情况下(在 ML 世界中)没有帮助,因为差异是如此微妙并且 与其他误差(模型功率;经验风险)相比,优化误差通常可以忽略不计
- 阅读
"Stochastic Gradient Descent Tricks" (Battou)
了解一些概述(以及错误组件!)
- 他甚至给出了使用快速近似算法的一个非常重要的理由(如果 1000 倍的训练时间不是问题,则不一定适合您的情况):近似优化可以实现更好的预期风险,因为在允许的时间内可以处理更多训练示例
(2) Basin-hopping 是其中一些高度 启发式工具 的全局优化(寻找全局最小值而不是局部最小值)完全没有任何保证(涉及 NP 硬度和 co.)。 这是您要在此处使用的最后一个算法(请参阅第 (3) 点)!
(3)逻辑回归问题是一个凸优化问题!
- 局部最小值始终是全局最小值,它来自凸性(我忽略了 strictly/unique 解和 co 之类的东西)!
- 因此,您将始终使用针对凸优化进行调整的东西!永远不要跳盆!
(4) 有不同的求解器,每个求解器都支持不同的问题变体(不同的正则化和系数)。我们不确切知道你在优化什么,但当然这些求解器在收敛方面的工作方式不同:
- 对以下评论持保留意见:
- liblinear:可能使用了一些基于 CG 的算法(共轭梯度),这意味着收敛性高度依赖于数据
- 是否实现准确的收敛完全取决于具体的实现(liblinear 是高质量的)
- 因为它是一阶方法,所以我称之为一般精度 中等
- sag/saga:似乎有更好的收敛理论(没有检查太多),但同样:它取决于您在 [= 中提到的数据12=] 并且解决方案是否准确在很大程度上取决于实施细节
- 因为这些是一阶方法:一般精度 中
- newton-cg:一个不精确的牛顿法
- 一般来说,在收敛方面更加稳健,因为线搜索取代了启发式或恒定学习率(LS 在一阶选择中成本很高)
- 具有不精确核心的二阶方法:预期精度:中高
- lbfgs: 拟牛顿法
- 一般来说,在像 newton-cg 这样的收敛方面更加稳健
- 二阶法:预期精度:中高
当然,二阶方法在处理大规模数据(甚至在复杂性方面)时受到的伤害更大,并且如前所述,并非所有求解器都支持 sklearn 中支持的每个 logreg 优化问题。
我希望你明白这个问题有多复杂(因为求解器内部非常复杂)。
最重要的事情:
使用这段代码时,我注意到它的收敛速度快得令人难以置信(小 一秒的一小部分),即使模型 and/or 数据非常大。我 怀疑在某些情况下我没有得到任何接近最佳解决方案的东西, 但这很难证明。最好能有某种类型的选项 全局优化器,例如 basin hopping 算法,即使这消耗了 100 到 1,000 倍 CPU。有人对这个问题有什么想法吗?
这是一个非常复杂的问题,这个答案可能不完整,但应该会给您一些提示(因为您的问题也表明存在一些知识空白):
(1) 首先,我不同意
some type of global optimizer such as the basin hopping algorithm, even if this consumed 100 to 1,000 times as much CPU
的愿望,因为这在大多数情况下(在 ML 世界中)没有帮助,因为差异是如此微妙并且 与其他误差(模型功率;经验风险)相比,优化误差通常可以忽略不计- 阅读
"Stochastic Gradient Descent Tricks" (Battou)
了解一些概述(以及错误组件!) - 他甚至给出了使用快速近似算法的一个非常重要的理由(如果 1000 倍的训练时间不是问题,则不一定适合您的情况):近似优化可以实现更好的预期风险,因为在允许的时间内可以处理更多训练示例
- 阅读
(2) Basin-hopping 是其中一些高度 启发式工具 的全局优化(寻找全局最小值而不是局部最小值)完全没有任何保证(涉及 NP 硬度和 co.)。 这是您要在此处使用的最后一个算法(请参阅第 (3) 点)!
(3)逻辑回归问题是一个凸优化问题!
- 局部最小值始终是全局最小值,它来自凸性(我忽略了 strictly/unique 解和 co 之类的东西)!
- 因此,您将始终使用针对凸优化进行调整的东西!永远不要跳盆!
(4) 有不同的求解器,每个求解器都支持不同的问题变体(不同的正则化和系数)。我们不确切知道你在优化什么,但当然这些求解器在收敛方面的工作方式不同:
- 对以下评论持保留意见:
- liblinear:可能使用了一些基于 CG 的算法(共轭梯度),这意味着收敛性高度依赖于数据
- 是否实现准确的收敛完全取决于具体的实现(liblinear 是高质量的)
- 因为它是一阶方法,所以我称之为一般精度 中等
- sag/saga:似乎有更好的收敛理论(没有检查太多),但同样:它取决于您在 [= 中提到的数据12=] 并且解决方案是否准确在很大程度上取决于实施细节
- 因为这些是一阶方法:一般精度 中
- newton-cg:一个不精确的牛顿法
- 一般来说,在收敛方面更加稳健,因为线搜索取代了启发式或恒定学习率(LS 在一阶选择中成本很高)
- 具有不精确核心的二阶方法:预期精度:中高
- lbfgs: 拟牛顿法
- 一般来说,在像 newton-cg 这样的收敛方面更加稳健
- 二阶法:预期精度:中高
当然,二阶方法在处理大规模数据(甚至在复杂性方面)时受到的伤害更大,并且如前所述,并非所有求解器都支持 sklearn 中支持的每个 logreg 优化问题。
我希望你明白这个问题有多复杂(因为求解器内部非常复杂)。
最重要的事情: