邏輯回歸是使用回歸的方式來解決分類問題。之前說過,邏輯回歸只能解決二分類問題,為了解決多分類問題,可以使用OVR和OVO方法

-
OVR(One Vs Rest)
某個分類算法有N類,將某一類和剩余的類比較作為二分類問題,N個類別進行N次分類,得到N個二分類模型,給定一個新的樣本點,求出每種二分類對應的概率,概率最高的一類作為新樣本的預測結果。

-
OVO(One Vs One)
某個分類算法有N類,將某一類和另一類比較作為二分類問題,總共可分為\(C^2_n\)種不同的二分類模型,給定一個新的樣本點,求出每種二分類對應的概率,概率最高的一類作為新樣本的預測結果。

加載鳶尾花數據集(數據集有三類結果):
import numpy
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris = datasets.load_iris()
# 為了數據可視化,只取數據集的前兩個特征
x = iris.data[:,:2]
y = iris.target
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=666)
scikit-learn中默認支持多分類,且多分類方法默認為OVR
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(x_train,y_train)
畫出決策邊界:

使用OVO多分類方法:
log_reg2 = LogisticRegression(multi_class='multinomial',solver='newton-cg')
log_reg2.fit(x_train,y_train)

scikit-learn中的OVR和OVO類¶
from sklearn.multiclass import OneVsRestClassifier,OneVsOneClassifier
# 使數據所有的特征值參與運算
x = iris.data
y = iris.target
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=666)
- OVR
log_reg1 = LogisticRegression()
OVR = OneVsRestClassifier(log_reg1)
OVR.fit(x_train,y_train)
准確率:

- OVO
log_reg2 = LogisticRegression()
OVR = OneVsRestClassifier(log_reg2)
OVR.fit(x_train,y_train)
准確率:

