sklearnのSVCによる多クラス分類の動作を知りたい
sklearnのSVCを使って多クラス分類をしています。
その際、__One-Vs-One__と__One-Vs-Rest__での結果の違いを比較するために、それぞれで結果を出力するつもりです。
そこで、SVCのデフォルトの動作がどちらなのか調べていたのですが、疑問が生じたのでお聞きさせて頂きたいと思います。
自分で調べた結果
自分で調べた結果では、おそらくデフォルトの動作は__One-Vs-One__である、というものでした。
sklearnの公式ドキュメントには
> The multiclass support is handled according to a one-vs-one scheme.
とあり、decision_function_shape__の項目にも、
**> However, one-vs-one (‘ovo’) is always used as multi-class strategy.__**
とありました。
公式ドキュメント
試したこと
そこで、私は分類器生成に3つのコードを書いて、結果を比較してみました
- コード1
python
1clf = SVC()
- コード2
python
1clf = SVC() 2clf = OneVsOneClassifier(clf)
- コード3
python
1clf = SVC() 2clf = OneVsRestClassifier(clf)
この3つで分類器を生成し、グリッドサーチによってパラメータチューニング(調整したパラメータは全て同じです)を行なって最良のパラメータによってテストデータの分類を行いました。
その結果、全て違う結果になりました。
生じた疑問
コード1とコード3、コード2とコード3が違う結果になるのは想定されていた通りの動作なのですが、コード1とコード2で異なる結果が出ました。
SVCのデフォルトが__One-Vs-One__であれば、単に生成しただけのコード1とOneVsOneClassifier()
に通したコード2の結果が同じになると思うのですが、異なってしまいました。
これは何故でしょうか?
補足情報(FW/ツールのバージョンなど)
Python 2.7.16
scikit-learn 0.20.3
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/15 05:26
2019/07/15 05:34
2019/07/15 05:35