写点什么

逻辑回归与评分卡 - 二元回归与多元回归:重要参数 solver & multi_class & class_weight

  • 2022-11-28
    山东
  • 本文字数:2028 字

    阅读完需:约 7 分钟

solver


真不会,搁置了,回头会补一下矩阵求导,更深入的内容就以后吧

multi_class

OvO 策略

拆分策略

OvO 基本过程是将每个类别对应数据集单独拆分成一个子数据集,然后令其两两组合,再来进行模型训练。例如,对于四分类数据集,根据标签类别可将其拆分成四个数据集,然后再进行两两组合,总共有 6 种组合,也就是种组合。拆分过程如下所示:

然后在这 6 个新和成的数据集上,我们就能训练 6 个分类器。当然,如果是 N 分类问题,则需要训练个模型

集成策略

当模型训练完成之后,接下来面对新数据集的预测,可以使用投票法从 6 个分类器的判别结果中挑选最终判别结果。

OvR 策略

拆分策略

OvR 策略每次将一类的样例作为正例、其他所有数据作为反例来进行数据集拆分。对于上述四分类数据集,OvR 策略最终会将其拆分为 4 个数据集,基本拆分过程如下:

此 4 个数据集就将训练 4 个分类器。注意,在 OvR 的划分策略种,是将 rest 无差别全都划分为负类。如果数据集总共有 N 个类别,则在进行数据集划分时总共将拆分成 N 个数据集。

集成策略

OvR 对于新数据的预测,如果仅有一个分类器将其预测为正例,则新数据集属于该类。若有多个分类器将其预测为正例,则根据分类器本身准确率来进行判断,选取准确率更高的那个分类器的判别结果作为新数据的预测结果。

OvO 和 OvR 的比较

对于这两种策略来说,尽管 OvO 需要训练更多的基础分类器,但由于 OvO 中的每个切分出来的数据集都更小,因此基础分类器训练时间也将更短。因此,综合来看在训练时间开销上,OvO 往往要小于 OvR。而在性能方面,大多数情况下二者性能类似。

MvM 策略

MvM 要求同时将若干类化为正类、其他类化为负类,并且要求多次划分,再进行集成。

拆分策略

此时对于上述 4 分类数据集,拆分过程就会变得更加复杂,我们可以任选其中一类作为正类、其余作为负类,也可以任选其中两类作为正类、其余作为负数,以此类推。由此则诞生出了非常多种子数据集,对应也将训练非常多个基础分类器。

将某一类视作正类和将其余三类视作正类的预测结果相同,对调下预测结果即可,此处不用重复划分。

根据上述划分方式,总共将划分个数据集,对应构建,对应的我们可以构建 10 个分类器。

集成策略

接下来我们进行模型集成。如果是以图片中出现的方式划分四个数据集,我们可以将每次划分过程中正例或负例的标签所组成的数组视为每一条数据自己的编码。同时,我们使用训练好的四个基础分类器对新数据进行预测,也将产生四个结果,而这四个结果也可构成一个四位的新数据的编码。接下来,我们可以计算新数据的编码和上述不同类别编码之间的距离,从而判断新生成数据应该属于哪一类。

链接:多分类学习(OvO、OVR、MVM 原理区别)_cy^2的博客-CSDN博客_多分类学习


在 sklearn 中的参数 multi_class 可以选择分类方式输入"ovr", "multinomial", "auto"来告知模型,我们要处理的分类问题的类型。默认是"ovr"。'ovr':表示分类问题是二分类,或让模型使用"一对多"的形式来处理多分类问题。'multinomial':表示处理多分类问题,这种输入在参数 solver 是'liblinear'时不可用。"auto":表示会根据数据的分类情况和其他参数来确定模型要处理的分类问题的类型。比如说,如果数据是二分类,或者 solver 的取值为"liblinear","auto"会默认选择"ovr"。反之,则会选择"multinomial"。


来看看鸢尾花数据集上,multinomial 和 ovr 的区别怎么样:


from sklearn.datasets import load_irisfrom sklearn.linear_model import LogisticRegression as LR
iris = load_iris() # 标签是0,1,2为多分类问题
for multi_class in ('multinomial','ovr'): clf = LR(solver='sag',max_iter=100,random_state=42,multi_class=multi_class).fit(iris.data,iris.target) print("training score : %.3f (%s)"% (clf.score(iris.data,iris.target),multi_class))---training score : 0.987 (multinomial)training score : 0.960 (ovr)
复制代码


OvR 相对简单,但大部分情况下分类效果相对略差,MvM 分类相对精确,但是分类速度没有 OvR 快。

链接:机器学习笔记(逻辑回归) - 知乎 (zhihu.com)

样本不平衡与参数 class_weight

使用参数 class_weight 对样本标签进行一定的均衡,给少量的标签更多的权重,让模型更偏向少数类,向捕获少数类的方向建模。该参数默认 None,此模式表示自动给与数据集中的所有标签相同的权重,即自动 1:1。当误分类的代价很高的时候,我们使用”balanced“模式,我们只是希望对标签进行均衡的时候,什么都不填就可以解决样本不均衡问题。但是,sklearn 当中的参数 class_weight 变幻莫测,我们很难去找出这个参数引导的模型趋势,或者画出学习曲线来评估参数的效果,因此可以说是非常难用。我们有着处理样本不均衡的各种方法,其中主流的是采样法,是通过重复样本的方式来平衡标签,可以进行上采样(增加少数类的样本),比如 SMOTE,或者下采样(减少多数类的样本)。对于逻辑回归来说,上采样是最好的办法。在案例中,会给大家详细来讲如何在逻辑回归中使用上采样。

发布于: 刚刚阅读数: 2
用户头像

跃入人海 2022-09-14 加入

还未添加个人简介

评论

发布
暂无评论
逻辑回归与评分卡-二元回归与多元回归:重要参数solver & multi_class & class_weight_Python_烧灯续昼2002_InfoQ写作社区