邏輯迴歸是使用迴歸的方式來解決分類問題。以前說過,邏輯迴歸只能解決二分類問題,爲了解決多分類問題,能夠使用OVR和OVO方法
算法
OVR(One Vs Rest)
某個分類算法有N類,將某一類和剩餘的類比較做爲二分類問題,N個類別進行N次分類,獲得N個二分類模型,給定一個新的樣本點,求出每種二分類對應的機率,機率最高的一類做爲新樣本的預測結果。
dom
OVO(One Vs One)
某個分類算法有N類,將某一類和另外一類比較做爲二分類問題,總共可分爲\(C^2_n\)種不一樣的二分類模型,給定一個新的樣本點,求出每種二分類對應的機率,機率最高的一類做爲新樣本的預測結果。
spa
加載鳶尾花數據集(數據集有三類結果):code
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中默認支持多分類,且多分類方法默認爲OVRblog
from sklearn.linear_model import LogisticRegression log_reg = LogisticRegression() log_reg.fit(x_train,y_train)
畫出決策邊界:
ci
使用OVO多分類方法:get
log_reg2 = LogisticRegression(multi_class='multinomial',solver='newton-cg') log_reg2.fit(x_train,y_train)
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)
log_reg1 = LogisticRegression() OVR = OneVsRestClassifier(log_reg1) OVR.fit(x_train,y_train)
準確率:
it
log_reg2 = LogisticRegression() OVR = OneVsRestClassifier(log_reg2) OVR.fit(x_train,y_train)
準確率:
io