项目场景:机器学习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 的权重和偏差)。当解决方案对应于该凸优化问题的最佳目标值时,它会停止运行。
二、还未收敛
-
规范化数据。利用
sklearn
中的
StandScaler
函数规范化特征,这不仅可能可以使得结果更好,更可能可以加快训练速度。但需要注意的是,
若有离散数据,需要确保它们被正确转换
-
确保
C
等其他参数设置正确,可以调用
Optimize
等包来调整参数。 -
如果特征数大于样本数,则需要设置
dual=True
-
设置
max_iter
为更大的值,默认为1000。
结果:
使用几种方法后并没有解决该问题,仅以此记录,以后说不定能用上。
附:尽管最后结果可能看起来还不错,但不应该忽视该问题,因为这意味着LinearSVC在达到收敛之前已经停止了迭代,
版权声明:本文为qq_33901833原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。