sklearn-逻辑回归-solver_multi_class入参与class_weight入参

solver_multi_class

sklearn 提供了多种可以使用逻辑回归处理分类问题的选项。
比如可以把某种分类类型看做1,其余的分类类型都是0,和“数据预处理”中的二分类化的思维是类似的,这种方法被称为“一对多”(One-vs-rest),简称 OvR, 在 sklearn 中表示为 "ovr"。
比如可以把好几个分类类型划分为1,剩下的分类类型划为0,这是一种“多对多”(Many-vs-Many)的方法,简称 MvM, 在 sklearn 中表示为 "multinomial"。
以上两种方式,在 sklearn 中,使用参数  multi_class 来告诉模型,我们的预测标签是什么样的类型。每种方式都配合 L1 或 L2 正则项来使用。

multi_class

输入 "ovr","multinomial","auto"来告知模型,我们要处理的分类问题的类型。默认是 "ovr"

  •  "ovr":表示分类类型是二分类,或让模型使用“一对多”的形式来处理多分类问题。
  •  "multinomial":表示处理多分类问题,这种输入在参数 solver 是 "liblinear" 时不可用
  •  "auto":表示会根据数据的分类情况和其他参数来确定模型要处理的分类问题的类型

注意:sklearn 0.22 版本中默认值从 "ovr" 更改为 "auto"

server

sklearn 提供了多种求解器来计算逻辑回归,由参数 selver 控制,共有五中选择,如 表1 所示。

缺点用灰色标出

表1:

"ovr"和"multinomial"的区别

图1 所示,鸢尾花数据集是一个三分类(0,1,2)的数据集,通过该数据集来看两种不同的 multi_class 的表现和区别

根据 图1 模型训练结果,鸢尾花数据集上,multinomial 的表现更好

示例代码

from sklearn.linear_model import LogisticRegression as LR
# load_iris 为鸢尾花数据集
from sklearn.datasets import load_iris

iris = load_iris()
print("通过打印iris.target查看鸢尾花数据集分类:\n{}".format(iris.target))

for multi_class in ["multinomial", "ovr"]:
    clf = LR(solver="sag", max_iter=1500, random_state=42,
            multi_class=multi_class).fit(iris.data, iris.target)
    # 打印两种 multi_class 模式下的训练分数
    # %用法:使用%来代替打印的字符串中想由变量替换的部分, %.3f代表保留三位小数的浮点数, %s表示字符串
    # 字符串后的 5 表示使用元组来容纳变量,字符串中有几个%,元组中就有几个元素
    print("training score: %.3f(%s)" % (clf.score(iris.data, iris.target), multi_class))

class_weight

样本不平衡

样本不平衡是指在一组数据集中,标签的一类天生占比有很大的比例,或误分类的代价很高,就是说我们想要捕获某种特定的分类的时候的状况。

比如银行判断一个新客户是否会违约,通常不违约的人占比99%,真正违约的人非常少。在这种分类下,即便模型什么也不做,全把所有人当成不会违约的人,正确率也能有99%,这使得模型评估指标变得毫无意义,根本无法打到我们的“要识别出会违约的人”的建模目的。

此时,可以使用参数 class_weight, 对样本标签进行一定的均衡,给少量的标签更多的权重,让模型更偏向少数类,像捕获少数类的方向建模。该参数默认值为 None, 表示自动给数据集中的所有标签相同的权重,即自动 1:1。 当误分类的代价很高的时候,我们使用 "balanced"模式。

但是,sklearn 中的参数 class_weight 变幻莫测,很难去找出这个参数引导的模型趋势,或者画出学习曲线来评估参数的效果,可说非常难用。

处理不平衡的方式

实际使用中,我们有着处理样本不平衡的各种方法,其中主流的采样法,是通过重复抽样样本的方式来平衡标签。

上采样

比如少数类是10个,多数类是990个,那就增加少数类的个数,将少数类的个数也增加到990个,这种方式称为上采样。在逻辑回归中,这种是最好的办法。

SMOTE 就是著名的上采样方法。


下采样

与上采样相反,减少多数类的样本。这种方法比较少用,毕竟我们希望数据样本越多越好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值