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

项目场景:机器学习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在达到收敛之前已经停止了迭代,

参考连接

你可能感兴趣的:(机器学习,支持向量机,sklearn)