收敛警告:Liblinear无法收敛,增加了迭代次数

Fah*_*raj 16 python opencv lbph-algorithm

运行Adrian的线性二进制模式代码。该程序运行,但给出以下警告:

C:\Python27\lib\site-packages\sklearn\svm\base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
 "the number of iterations.", ConvergenceWarning
Run Code Online (Sandbox Code Playgroud)

我在opencv3.7上运行python2.7,该怎么办?

lig*_*ist 27

通常,当优化算法无法收敛时,通常是因为问题条件不佳,可能是由于决策变量的缩放比例不佳。您可以尝试一些方法。

  1. 归一化您的训练数据,使问题有望得到更好解决,从而可以加快收敛速度​​。一种可能性是使用Scikit-Learn的StandardScaler将数据缩放为0平均值,单位标准偏差 。请注意,您必须将培训数据上安装的StandardScaler应用于测试数据。
  2. 与1)相关,请确保其他参数(例如正则化权重C)设置正确。
  3. 设置max_iter为更大的值。默认值为1000。

  • 回答我以前的评论:如scikit文档所建议,我将dual设置为false。这消除了警告,并且似乎对分类性能没有影响 (4认同)
  • @PJRobot不客气。但是还要考虑我关于设置正则化参数和标准化变量的其他评论。通常,优化算法不应花费太多迭代即可收敛。如果是这样,则表明优化问题条件不佳。设置正则化参数并适当缩放数据,或者解决Nino van Hooff建议的优化问题的对偶,是“修复”此问题的更好方法,在尝试更改“ max_iter”之前,应考虑此问题。 (3认同)
  • 我很困惑,根据文档,它说“当 n_samples > n_features 时更喜欢 Dual=False。”你把它弄反了吗? (3认同)

5er*_*ant 27

我达到了我设置的点,直到max_iter=1200000我的LinearSVC分类器,但仍然存在“ConvergenceWarning”。我通过设置dual=False并保留max_iter默认值来解决这个问题。

使用LogisticRegression(solver='lbfgs')分类器,您应该增加max_iter. 在使用大型数据集的特征进行训练时,我的已经max_iter=7600“ConvergenceWarning”消失之前达到了。

  • 根据我的数据形状设置“双重”对我的情况有帮助。 (2认同)

Ais*_*ani 10

明确指定max_iter解决警告,默认max_iter值为 100。[对于 Logistic 回归]。

 logreg = LogisticRegression(max_iter=1000)
Run Code Online (Sandbox Code Playgroud)


ris*_*ain 8

请将 max_iter 增加到 10000,默认值为 1000。可以增加数量。迭代次数将有助于算法收敛。对我来说它收敛了,求解器是-'lbfgs'

log_reg = LogisticRegression(solver='lbfgs',class_weight='balanced', max_iter=10000)
Run Code Online (Sandbox Code Playgroud)