ref:
官方文档:
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
http://blog.csdn.net/sun_shengyun/article/details/53811483
未完待续……
from sklearn.linear_model import LogisticRegression
数据标准化处理:
from sklearn.preprocessing import StandardScaler
X = preprocessing.StandardScaler().fit_transform(X)
用法:
LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’liblinear’, max_iter=100, multi_class=’ovr’, verbose=0, warm_start=False, n_jobs=1)
参数介绍
penalty惩罚项
str, ‘l1’ or ‘l2’,
默认: ‘l2’
注:在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。
solver优化方法
(1)liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
(2)lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
(3)newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
(4)sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候,SAG是一种线性收敛算法,这个速度远比SGD快。
注:从上面的描述可以看出,newton-cg, lbfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。
multi_class:(待完善)
‘ovr’:uses the one-vs-rest (OvR) scheme,无论多少元逻辑回归都看作二元的
‘multinomial’:uses the cross- entropy loss
正则化参数C
smaller values specify stronger regularization