邏輯回歸-6.解決多分類問題


邏輯回歸是使用回歸的方式來解決分類問題。之前說過,邏輯回歸只能解決二分類問題,為了解決多分類問題,可以使用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)

准確率:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM