逻辑回归代码段:
model = LogisticRegression(penalty=reg)
在进行逻辑回归预测时报错:
ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got l1 penalty.
原因:
LogisticRegression(C=0.01, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, l1_ratio=None, max_iter=100,
multi_class='auto', n_jobs=None, penalty='l1',
random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
warm_start=False)
问题就出现在solver这个参数上,这个参数定义的是分类器,‘newton-cg’,‘sag’和‘lbfgs’等solvers仅支持‘L2’regularization,‘liblinear’ solver同时支持‘L1’、‘L2’regularization,若dual=Ture,则仅支持L2 penalty。
决定惩罚项选择的有2个参数:dual和solver,如果要选L1范数,dual必须是False,solver必须是liblinear
问题搞清楚了,把上面代码改成:
model = LogisticRegression(penalty=reg, solver='liblinear')
即可正常运行:
l1
训练集MSE:0.026373626373626374
测试集MSE:0.07894736842105263
训练测试MSE差异0.05257374204742625
训练集klloss: 0.9109286002545062
测试集klloss 2.7267735609115524
l2
训练集MSE:0.03076923076923077
测试集MSE:0.07894736842105263
训练测试MSE差异0.048178137651821856
训练集klloss: 1.0627491549517625
测试集klloss 2.7267735609115524
Process finished with exit code 0