逻辑回归解决多分类&二分类算法如何解决多分类

OVR和OVO解决多分类问题

逻辑回归虽然从名字上看是回归,但是它实际上做的却是分类的任务,我个人分辨一个算法是分类还是回归就看它的标签(在这里我对逻辑回归进行详细的讲解,不会的朋友可以去查阅关于逻辑回归的资料,个人感觉逻辑回归不是特别难)

我们都知道逻辑回归是基于概率理论的。所以逻辑回归只能解决二分类问题,那么逻辑回归该如何解决多分类问题呢?

**

OVR(One Vs Rest)

OVR
OVR的思想 : 还是讲类别分为两类: 一类是A类,另一类就是其他所有类(把其他所有类当成一类来看),如图:
分类
上图可见:
(我们的每个类只有一个样本)要将类别分为三类,这就是多分类的问题, 如果用OVR来解决的话:
如下图:
first
second
third
我们分别训练出来三个二分类的问题, 后面再来一个样本的话,放进这三个模型中进行预测,哪个的概率最高,那么它就属于哪一类。
代码在我写完下面的OVO之后会简单的写一下
**

OVO(One Vs One)

OVO思想: 将一个多分类问题中的所有类都两两拿出来训练,训练成多个二分类的模型。
上图:↓
ovo
跟之前一样,同样解决三分类问题: 我们用OVO的思想来画图帮助理解一下:
first1
second2
third3
通过上面的图,我们可以看到,我们画出了三个图,将上面三分类的问题,每两个问题都拿出来做了个模型。现在如果有一个样本的话,将这个样本放入这三个模型中进行预测,哪个分数最高就是哪一类。
这样其实时间复杂度更高了,如果有10个类的话,那么我们就需要做45个二分类出来。
如果有n个类的话,那么我们就需要ovo个数个二分类,
时间复杂度来说比OVR的时间复杂度还要高

OVR和OVO的方法理解起来也是非常简单的.

下面看看代码:

# 导入我们需要的类库
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.model_selection import train_test_split

# 加载iris数据集
iris = datasets.load_iris()

# 在这里我们只取前两个特征
X = iris.data[:, :2]
y = iris.target

# 将他们进行分割,分割成3:1的比例
x_train, x_test, y_train, y_test = train_test_split(X, y, train_size=0.75)

#####OVR
lr = LogisticRegression()  # 在sklearn封装的Logistic回归中默认使用的是ovr
lr.fit(x_train, y_train)
print('测试集的分数: ', lr.score(x_test, y_test))

#####OVO
multi_class  # 看sklearn中logistic底层可以看到multinomial这个参数就是使用ovo方法
solver  # 修改其默认的计算方式
lr_ovo = LogisticRegression(multi_class='multinomial', solver='newton-cg').
lr_ovo.fit(x_train, y_train)
print('ovo测试集分数: ', lr_ovo.score(x_test, y_test))

sklearn中封装的OVO和OVR

from sklearn.multiclass import OneVsOneClassifier
from sklearn.multiclass import OneVsRestClassifier
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值