[四月馬鹿][機械学習] 非線形分類アルゴリズム「HotPot」を新開発しました!
概要
- エイプリルフール企画
謝辞
本アルゴリズムの考案にあたって, 以下のような記事・言及が着想の鍵となった. この場を借りてお礼を申し上げる.
僕が知る限りこれはロジスティック回帰ではなく火鍋です.https://t.co/IC8RFSt3iV pic.twitter.com/SY0mzr9le0
— 須山敦志 Suyama Atsushi (@sammy_suyama) 2018年5月23日
www.datasciencecentral.com
1 はじめに
以前, 以下の記事において, ロジスティック回帰や SVM といった広く利用される分類アルゴリズムは, いずれも線形な境界面によって分類する性質があることを述べた.
ill-identified.hatenablog.com一般に, 非線形な分類が可能になるアルゴリズムのほうが, 線形分類よりも複雑な構造に対して性能のよい分類モデルを作成できるが, 一方でアルゴリズムが複雑になったり, 計算量が非常に多く実用的でないことも多い. そこで私は, 線形分類器より自由度の高い分類アルゴリズム「HotPot」を考案し実装した. 現時点では Python での実装のみだが, 他の言語での実装も容易なはずである. HotPot 自体の動作には最新の scikit-learn*1 が必要であるが, scikit-learn は Python での機械学習においてグローバルスタンダードと言って良く, この制約が問題となる場面は極めて限られるはずだ.
この記事の残りの部分では, 全てのソースコードの公開と, アルゴリズムの実演を行う. 冒頭に挙げた記事のように、このアルゴリズムではロジスティック回帰などではできなかった曲面による分類境界を実現している.
2 実験
実験をおこなった jupyter notebook 全文は以下の github リポジトリにある. ここでは, 結果の要約だけを掲載する.
github.comHotPot アルゴリズムの性能を比較するため, 代表的な線形分類アルゴリズムであるロジスティック回帰と, 非線形分類アルゴリズムの代表例のなかでもシンプルなガウシアン・ナイーヴベイズ (GNB) 分類器を比較対象とした. 実験に利用したデータと, 理論上の分類境界をプロットしたのが図1である.

図2はそれぞれの分類器の描く分類境界である.
図を一見しても, 他の2つの比較対象と比べ, HotPot アルゴリズムの描く決定境界の HotPot類似指数 (HSI; HotPot Similarity Index) が極めて高く(図3), 見ていると火鍋が食べたくなることがわかる.
また, 表1から分かるように, 対数損失 (log loss) および AUC についても優れたパフォーマンスを示している.
Logistic |
GNB |
HotPot |
|
Log Loss |
0.1675 |
0.2245 |
0.0527 |
AUC |
0.9933 |
0.9702 |
0.9984 |
3 実装
では, 最後に hotpot がどのように実装されているかを公開する. これは極めて単純である.
import StandardScaler from sklearn.pipeline import Pipeline hotpot = Pipeline([('standardize', StandardScaler()), ('HotPot', SVC(probability=True, kernel='rbf', degree=1))]) hotpot.fit(X, y)
4 結論
本記事では, ロジスティック回帰など, 従来広く使われている分類アルゴリズムの欠点を指摘した上で, この欠点が, 線形な境界線しか形成できない, 線形分類アルゴリズムというクラスに属するものであるという事実に由来するものだと示した. その上で, 容易に実装可能な非線形分類アルゴリズムを提案し, 実装と良好な実験結果を掲載することができた. また, HotPot アルゴリズムの持つ高い HotPot 類似性能は, 見るものに火鍋を食べたいと思わせる力があることがわかった.