SKlearn——逻辑斯蒂回归(LR)参数设置

sklearn-逻辑斯蒂回归

  • SKlearn——逻辑斯蒂回归(LR)
          • 1. from skearn.linear_model import LogisticRegression
          • 2.其中部分参数设置
          • 2.参数设置的含义
          • 3.**class_weight**:类别权重
          • 4.sample_weight:样本权重
          • **5..重要参数设置 **solver**:**
          • 6. 分类方式选择参数:multi_class

SKlearn——逻辑斯蒂回归(LR)

小白文,初学机器学习,主要记录下其中的参数设置

1. from skearn.linear_model import LogisticRegression

使用此语句引入skearn中的逻辑斯蒂模型 。LR是个主要用于分类的线性模型,而非回归问题。

2.其中部分参数设置
#LR中的一部分参数设置
  clf = LogisticRegression(penalty='l2', C=0.3, max_iter=400, tol=1e-4, solver='lbfgs')
2.参数设置的含义
  • penalty:‘惩罚’,提供l1l2两种选择,默认l2

【注】根据链接2博客的研究:
L1相较于L2会使参数矩阵更稀疏,也就是说包含更多的0。
L2的拟合能力要比L1的拟合能力强,同时提高了过拟合的风险。

  • C:LR默认情况下都使用正则化。如果不适用正则化,相当于把C置于一个比较高的值,即C主要用于调节正则化的强度。正则化越严格,C的值越低
  • max_iter:int 默认:100 仅适用于newton-cg,sag和lbfgs求解器。 求解器收敛的最大迭代次数
  • tol: float, 默认: 1e-4 ‘公差停止标准’
3.class_weight:类别权重

参考:https://blog.csdn.net/sun_shengyun/article/details/53811483

  • 如果分类过程中,倾向于其中一类样本,可以适当将对应的class_weight降低,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%
  • 如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。
  • 分类中存在两种问题:
  • 第一种是误分类的代价很高。比如对合法用户和非法用户进行分类,将非法用户分类为合法用户的代价很高,我们宁愿将合法用户分类为非法用户,这时可以人工再甄别,但是却不愿将非法用户分类为合法用户。这时,我们可以适当提高非法用户的权重。
  • 第二种是样本高度失衡,比如我们有合法用户和非法用户的二元样本数据10000条,里面合法用户有9995条,非法用户只有5条,如果我们不考虑权重,则我们可以将所有的测试集都预测为合法用户,这样预测准确率理论上有99.95%,但是却没有任何意义。这时,我们可以选择balanced,让类库自动提高非法用户样本的权重。
      提高了某种分类的权重,相比不考虑权重,会有更多的样本分类划分到高权重的类别,从而可以解决上面两类问题。当然,对于第二种样本失衡的情况,我们还可以考虑使用样本权重参数: sample_weight,而不使用class_weight。
4.sample_weight:样本权重
  • 由于样本不平衡,导致样本不是总体样本的无偏估计,从而可能导致我们的模型预测能力下降。遇到这种情况,我们可以通过调节样本权重来尝试解决这个问题。调节样本权重的方法有两种,第一种是在class_weight使用balanced。第二种是在调用fit函数(训练)时,通过sample_weight来自己调节每个样本权重。
  • skearn做逻辑回归时,如果上面两种方法都用到了,那么样本的真正权重是class_weight*sample_weight.
5…重要参数设置 solver

主要有五种选择 ‘newton-cg’,’lbfgs’,’liblinear’,’sag’,’saga’

  • liblinear:它并不是真正的多分类器,而是把多分类任务分解成多个而分类任务,即“one vs rest”,但这是在后台处理的,所以官网上所给的实例充当多分类器。
  • “ lbfgs”,“ sag”和“ newton-cg”仅支持 l2 正则化或没有正则化,并且发现对于某些高维数据收敛更快。
  • sag:使用随机平均梯度下降,当样本数量和特征数量都很大时,它比大型数据集的其他求解器更快。
  • “saga:sag的变体,其也支持非平滑惩罚(non-smooth penalty)=“ l1”。因此,这是稀疏多项式逻辑回归的首选求解器。它也是唯一支持penalty=“ elasticnet”的solver。
  • “lbfgs:建议将其用于较小的数据集,但对于较大的数据集,其性能会受到影响。由于其鲁棒性较好,所以一般默认使用这个solver
    SKlearn——逻辑斯蒂回归(LR)参数设置_第1张图片图片来源于Sklearn官网
6. 分类方式选择参数:multi_class

在官网上的图中有ovr和multinormial两个设置,但并没有细讲,查了一下CSDN,实际上是分类方式选择参数multi_class的两种设置,默认为ovr。
  ovr:one-vs-rest(OvR),multinomial:many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。
  OvR的思想很简单,无论你是多少元逻辑回归,我们都可以看做二元逻辑回归。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。
  而MvM则相对复杂,这里举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。
  
  从上面的描述可以看出OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快
  
  其与penalty、solver的搭配使用可看上一张图。

参考文章:
[1]: https://blog.csdn.net/ustbclearwang/article/details/81235892
[2]:https://www.jianshu.com/p/0b72619ef397
[3]:https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
[4]:https://blog.csdn.net/sun_shengyun/article/details/53811483

你可能感兴趣的:(SKlearn——逻辑斯蒂回归(LR)参数设置)