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

OVR和OVO解决多分类问题

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

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

**

OVR(One Vs Rest)

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

OVO(One Vs One)

OVO思想: 将一个多分类问题中的所有类都两两拿出来训练,训练成多个二分类的模型。
上图:↓
逻辑回归解决多分类&二分类算法如何解决多分类_第5张图片
跟之前一样,同样解决三分类问题: 我们用OVO的思想来画图帮助理解一下:
逻辑回归解决多分类&二分类算法如何解决多分类_第6张图片
逻辑回归解决多分类&二分类算法如何解决多分类_第7张图片
逻辑回归解决多分类&二分类算法如何解决多分类_第8张图片
通过上面的图,我们可以看到,我们画出了三个图,将上面三分类的问题,每两个问题都拿出来做了个模型。现在如果有一个样本的话,将这个样本放入这三个模型中进行预测,哪个分数最高就是哪一类。
这样其实时间复杂度更高了,如果有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

你可能感兴趣的:(机器学习)