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

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

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)

準確率:
it

  • OVO
log_reg2 = LogisticRegression()
OVR = OneVsRestClassifier(log_reg2)
OVR.fit(x_train,y_train)

準確率:
io

相關文章
相關標籤/搜索