【机器学习】`ConvergenceWarning: Liblinear failed to converge, increase the number of iterations`问题记录

  • Post author:
  • Post category:其他




项目场景:机器学习SVC进行训练

手游用户流失预测




问题描述

利用LinearSVC进行训练时,报错:


ConvergenceWarning: Liblinear failed to converge, increase the number of iterations


代码如下:

clf = LinearSVC(C=10)
calibrated_clf = CalibratedClassifierCV(base_estimator=clf, cv=3)
calibrated_clf.fit(scaler_all_trainX, all_trainy)
proba = calibrated_clf.predict_proba(scaler_all_testX)
proba



原因分析及方案:

有如下几种可能:

一、已经收敛

  • 求解线性 SVM 只是求解二次优化问题。求解器通常是一种迭代算法,它保持对解决方案的运行估计(即,SVM 的权重和偏差)。当解决方案对应于该凸优化问题的最佳目标值时,它会停止运行。

二、还未收敛

  1. 规范化数据。利用

    sklearn

    中的

    StandScaler

    函数规范化特征,这不仅可能可以使得结果更好,更可能可以加快训练速度。但需要注意的是,


    若有离散数据,需要确保它们被正确转换

  2. 确保

    C

    等其他参数设置正确,可以调用

    Optimize

    等包来调整参数。
  3. 如果特征数大于样本数,则需要设置

    dual=True
  4. 设置

    max_iter

    为更大的值,默认为1000。



结果:


使用几种方法后并没有解决该问题,仅以此记录,以后说不定能用上。

附:尽管最后结果可能看起来还不错,但不应该忽视该问题,因为这意味着LinearSVC在达到收敛之前已经停止了迭代,


参考连接



版权声明:本文为qq_33901833原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。