網(wǎng)站首頁 編程語言 正文
Sklearn中的二分類模型可以進行多分類的原理
二分類擴展到多分類的方法
從sklearn的源碼中可以找到sklearn將二分類模型推廣到多分類模型的具體做法:
即比較常用的:
- one-vs-rest(一對多)
- one-vs-one(一對一)
- error correcting output codes(糾錯輸出編碼,多對多)
其中,Sklearn中默認的方法是one-vs-rest
接下來將逐個介紹這三個方法的原理及優(yōu)缺點
one-vs-rest
原理
one-vs-rest的原理很好理解,就是對于多類別數(shù)據(jù)(假設 N N N個類, N > 2 N>2 N>2),每次將一個類作為正類,其余類作為負類,進行訓練,得到一個分類器,這樣最后總共能得到 N N N個分類器,在進行預測時:
- 若只有一個分類器預測為正類,則分類結(jié)果即為對應的類別
- 若出現(xiàn)多個分類器預測為正類,則根據(jù)每個分類器的置信度,選擇置信度大的類別作為最終預測結(jié)果
優(yōu)缺點
優(yōu)點
- 易于理解,方便實行,速度快
- 只需要訓練 N N N個分類器
缺點
- 在進行預測時,可能會出現(xiàn)沒有分類器預測為正類的問題。
- 由于每次訓練分類器時,數(shù)據(jù)是一類對多類,正反兩類的數(shù)據(jù)量偏差過大容易導致數(shù)據(jù)偏斜問題,影響準確率。
one-vs-one
原理
為了避免one-vs-rest的數(shù)據(jù)傾斜問題,one-vs-one的策略是每個分類器只負責兩個類別的分類,比如對于三分類問題(類A、B、C),其分類器的構(gòu)造如下:
- 分類器1負責二分類A、B
- 分類器2負責二分類A、C
- 分類器3負責二分類B、C
因此,對于 N N N個類別的分類問題,需要訓練 N ( N ? 1 ) 2 \frac{N(N-1)}{2} 2N(N?1)?個分類器,之后,在進行預測時,將預測數(shù)據(jù)帶入每個分類器中,最后通過投票原則,選擇預測結(jié)果多的類作為最終預測的類別
優(yōu)缺點
優(yōu)點
- 避免了一對多中的數(shù)據(jù)傾斜問題
缺點
- 需要訓練的分類器以二次速度隨類別遞增,增加了模型的時間復雜度
- 預測時會出現(xiàn)多個類別作為正類出現(xiàn)的次數(shù)相同的情況
Error correcting output codes(ECOC)
原理
ECOC可以看作是one-vs-one跟one-vs-rest的一般形式,它每次將若干個類作為正類,其余若干個類作為負類,進行訓練,因此也叫多對多,為了方便解釋,以一個類別數(shù)為4的數(shù)據(jù)集作為例子進行解釋:
假設有一個數(shù)據(jù)集,類別為A、B、C、D,現(xiàn)根據(jù)ECOC方法利用二分類模型對其進行分類。
-
對數(shù)據(jù)集進行劃分,劃分的流程是將一部分類別數(shù)據(jù)劃分為正類,其余劃分為負類,如圖所示:
劃分的個數(shù)沒有明確的限制,例如上圖劃分了4個數(shù)據(jù)集,但盡量要避免第四種劃分格式,以免遭成數(shù)據(jù)偏斜。(個人認為)
-
對于每一個劃分的數(shù)據(jù)集,帶入分類器進行訓練,得到對應于每一個劃分數(shù)據(jù)集的訓練器,以上圖數(shù)據(jù)集劃分為例,則能得到4個訓練器: f 1 ( x ) , f 2 ( x ) , f 3 ( x ) , f 4 ( x ) f_1(x),f_2(x),f_3(x),f_4(x) f1?(x),f2?(x),f3?(x),f4?(x),其中 f i ( x ) ∈ { + 1 , ? 1 } , f_i(x) \in \{+1,-1\}, fi?(x)∈{+1,?1},對 i = 1 , 2 , 3 , 4 i=1,2,3,4 i=1,2,3,4.
-
對于每一個訓練器我們可以得知器對應于A、B、C、D四個類的輸出(即+1,-1),因此可以產(chǎn)生一個編碼表如下:
-
現(xiàn)在可以對數(shù)據(jù)進行預測,選取一個樣本 x ′ x' x′,依次帶入分類器 f 1 ( x ) , f 2 ( x ) , f 3 ( x ) , f 4 ( x ) f_1(x),f_2(x),f_3(x),f_4(x) f1?(x),f2?(x),f3?(x),f4?(x)中,將每個分類器的輸出結(jié)果組合,則可以得到一個編碼列,為 ( f 1 ( x ′ ) , f 2 ( x ′ ) , f 3 ( x ′ ) , f 4 ( x ′ ) ) (f_1(x'),f_2(x'),f_3(x'),f_4(x')) (f1?(x′),f2?(x′),f3?(x′),f4?(x′)),而由上圖可以看到,類別A對應的編碼列為 ( + 1 , + 1 , + 1 , + 1 ) (+1,+1,+1,+1) (+1,+1,+1,+1),B對應的編碼列為 ( + 1 , ? 1 , ? 1 , ? 1 ) (+1,-1,-1,-1) (+1,?1,?1,?1),C對應的編碼列為 ( ? 1 , + 1 , ? 1 , ? 1 ) (-1,+1,-1,-1) (?1,+1,?1,?1),D對應的編碼列為 ( ? 1 , ? 1 , + 1 , ? 1 ) (-1,-1,+1,-1) (?1,?1,+1,?1).為了判斷樣本 x ′ x' x′更匹配哪個類別,分別計算樣本 x x x的編碼列到各個類別的編碼列的數(shù)據(jù)歐氏距離,選擇距離最短的作為該樣本的預測類別。
筆者關于數(shù)據(jù)集劃分個數(shù)問題的思考:
從該流程中可以看出,當劃分數(shù)據(jù)集的個數(shù)較少時,樣本編碼到各個類編碼的歐氏距離很容易出現(xiàn)相同,導致無法分類,因此,劃分的數(shù)據(jù)集的個數(shù)要適量多,由于隨著劃分數(shù)據(jù)集的個數(shù)變多,最后無法避免劃分出正負兩類數(shù)據(jù)量偏差過大的問題,影響預測的準確性,總之,劃分數(shù)據(jù)集的個數(shù)不能太少,也不能太多,需要根據(jù)實際情況權(quán)衡。
優(yōu)缺點
優(yōu)點
- 糾錯能力強,準確率高。
缺點
- 時間復雜度高,需要訓練大量分類器以達到效果。
原文鏈接:https://blog.csdn.net/weixin_45804601/article/details/127268199
相關推薦
- 2022-02-23 C#使用log4net記錄日志_C#教程
- 2023-04-04 Swift中的HTTP請求體Request?Bodies使用示例詳解_IOS
- 2022-05-22 Kubernetes探針使用介紹_云其它
- 2022-07-06 QT5實現(xiàn)簡單的TCP通信的實現(xiàn)_C 語言
- 2022-11-05 Nginx反向代理location和proxy_pass配置規(guī)則詳細總結(jié)_nginx
- 2022-11-27 C++?Array容器的顯示和隱式實例化詳細介紹_C 語言
- 2022-10-06 react?路由權(quán)限動態(tài)菜單方案配置react-router-auth-plus_React
- 2023-04-09 python實現(xiàn)數(shù)組平移K位問題_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支