逻辑回归
逻辑回归用于分类(可以是二元或多元),在sklearn中常用的有2类:LogisticRegression和 LogisticRegressionCV,两者的区别在于LogisticRegressionCV使用了交叉验证来选择正则化系数C,而LogisticRegression需要自己指定一个正则化系数。
from sklearn.linear_model import LogisticRegression,LogisticRegressionCV
参数:
1.penalty:正则化选择参数(‘l1’或‘l2')
默认是'l2',一般默认就好,如果使用L2还是过拟合,可以考虑L1,或者模型的特征太多,希望某些特征系数归为0,也可以使用L1。
penalty参数的选择会影响solver参数(损失函数优化算法)的选择,如果是L2,4种算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以选择;如果是L1,只能选择‘liblinear’,因为L1正则化的损失函数不是连续可导的,而{‘newton-cg’, ‘lbfgs’,‘sag’}这三种优化算法时都需要损失函数的一阶或者二阶连续导数。
2.solver:默认‘liblinear’
①liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
②lbfs:拟牛顿法的一种
③newton-cg:牛顿家族一种
④sag:随机平均梯度下降,是普通梯度下降的变种,区别在于每次迭代仅仅使用一部分样本来计算,适合样本数量多的情况,当样本量少时,不要选择它
注意:liblinear只支持OvR,不支持OvO,而OvO一般比OvR更精确,但速度较慢,其他3种算法都支持。
3.class_weight:类型的权重参数
①不输入时,表示所有类型的权重一样。
②选择"balance",根据样本量来计算权重,某类型样本量越多,权重越低。
③自己指定,字典格式:class_weight={0:0.9,1:0.1},0类权重90%,1类权重10%。
class_weight对两种问题很有用:
①误分类代价高。比如合法和非法用户的分类,将非法用户分类为合法用户代价很高,所以需要提高非法用户的权重。
②样本分布高度不平衡。比如非法用户样本数远低于合法用户样本数,可以选择balanced,让类库自动提高非法用户样本的权重。
提高了某种分类的权重,相比不考虑权重,会有更多的样本分类划分到高权重的类别
针对第②中情况还可以使用sample_weight,而不使用class_weight。
4.sample_weight
是fit方法中的参数,array形式, shape (n_samples,)调整每个样本的权重。
5.其他重要参数
multi_class:多元分类方法选择。'ovr','multinomial',默认'ovr'
C:相当于SVM中的惩罚参数,是正则化参数lambda的倒数,C越小,正则化程度越大
属性:
coef_ :输出模型参数theta,可以观察到各个属性与输出结果之间的正负关系