56-OvR 和 OvO

前言

  在前面系统学习了逻辑回归这种机器学习算法,它是使用回归的方式来解决分类问题。之前提到过,逻辑回归只可以解决二分类的问题,不过我们可以稍加改造,使得逻辑回归算法同样可以解决多分类问题。

  其实这种改造方式不是只针对逻辑回归这一种方式,而是一种通用的对近乎所有的二分类算法都可使用这种方式让它们能够作用在多分类问题上。那么这种改造方式通常有两种:OvR 和 OvO


OvR(One vs Rest)

  我们首先来看一下 O v R OvR OvR(One vs Rest),即 1 对剩余的所有,有些地方有可能称做 O v A OvA OvA,其实它们的意思是一样的。那么什么叫做 1 针对剩余呢?下图中,一种有四种类别,由四个点表示,显然对于这样的问题,我们不能直接使用逻辑回归的方式来解决。那么我们怎么解决呢?

在这里插入图片描述

  我们选取其中某一个类别,比如说,选取红色的点,而对于剩下的三个类别,我们将它们融合在一起,称为其他类别。

在这里插入图片描述
  相应的,这个过程我们也可以在其它类别上进行。我们这个例子中有四个类别,相应的就形成下面四种情况:

在这里插入图片描述
  我们进一步拓展,如果有 n n n 个类别的话,就进行 n n n 次分类,选择分类得分最高的


OvO(One vs One)

  第二种改造方法称之为 O v O OvO OvO(One vs One),其实就是一对一的进行比较。依然举出上面的例子,我们这里有四个类别,每个类别使用一个点表示。

在这里插入图片描述
  每次我们只挑出两个类别,比如我挑出红蓝两种,然后进行二分类任务。现在我们有四个类别,那么就可以形成六个二分类问题。其实就是 C 4 2 C_4^2 C42,排列组合的知识。

在这里插入图片描述
  
  那么对于每一个二分类问题,我们都可以估计一下要预测的这个样本点处于这两个类别中哪一个类别?然后对于这些分类结果就可以投票,对于这六个分类结果来说,它在哪个类别中数量最大,最终就判定这个样本属于哪个类别。

  拓展下来,我们就可以得出结论: n n n 个类别就进行 C n 2 C_n^2 Cn2 次分类,选择赢数最高的分类。很显然,这种 O v O OvO OvO 的方式比 O v R OvR OvR 这种方式更耗时,这是因为 C n 2 C_n^2 Cn2 是一个 n 2 n^2 n2 级别的公式,而对于 O v R OvR OvR 来说,我们只需要进行 n n n 次二分类任务即可。

  不过对于 O v O OvO OvO 来说,虽然它更耗时,但是它的分类结果是更准确的。因为我们每次都只用两种类别进行比较,而没有混淆其它类别信息。


编程实现

  
那下面我们具体实践一下。
  
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


  逻辑回归算法学习之旅到此就结束了,它拓展了线性回归的方式,通过估算概率这样的方式将一个回归问题转化成一个分类问题,逻辑回归算法在实际中使用是非常广泛的。

  具体代码见 56 OvR和OvO.ipynb

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在多分类问题中,通常需要将其转化为二分类问题来处理。常用的两种策略分别是 One-vs-Rest (OvR) 和 One-vs-One (OvO)。 OvR 策略将每个类别看作一类,将其他所有类别看作另一类,这样就将多分类问题转化为了多个二分类问题。例如,对于一个有3个类别的问题,我们将其分别转化为三个二分类问题。 OvO 策略则将每个类别之间都进行一一对比,例如对于一个有3个类别的问题,我们将其转化为3个二分类问题,分别是第1类和第2类的问题、第1类和第3类的问题、第2类和第3类的问题。 在 scikit-learn 中,对于多分类问题,我们可以通过设置 multi_class 参数来指定使用哪种策略。具体来说,multi_class 参数可以设置为 'ovr'(One-vs-Rest)或 'ovo'(One-vs-One)。默认情况下,multi_class 参数的取值为 'ovr'。 例如,在使用 sklearn.metrics 中的 roc_auc_score 函数计算多分类问题的 AUC 值时,我们可以通过设置 multi_class 参数来指定使用哪种策略。例如: ```python from sklearn.metrics import roc_auc_score # 假设 y_test 和 y_scores 已经定义好 # 使用 One-vs-Rest 策略 ovr_auc = roc_auc_score(y_test, y_scores, multi_class='ovr', average='micro') # 使用 One-vs-One 策略 ovo_auc = roc_auc_score(y_test, y_scores, multi_class='ovo', average='micro') ``` 需要注意的是,不同的策略可能会对结果产生影响,因此需要根据具体情况选择合适的策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值