ill-identified diary

所属組織の見解などとは一切関係ありません

[四月馬鹿][機械学習] 非線形分類アルゴリズム「HotPot」を新開発しました!

この記事は最終更新日から3年以上が経過しています


概要

  • エイプリルフール企画

謝辞

アルゴリズムの考案にあたって, 以下のような記事・言及が着想の鍵となった. この場を借りてお礼を申し上げる.


www.datasciencecentral.com

はじめに

以前, 以下の記事において, ロジスティック回帰や SVM といった広く利用される分類アルゴリズムは, いずれも線形な境界面によって分類する性質があることを述べた.

ill-identified.hatenablog.com

一般に, 非線形な分類が可能になるアルゴリズムのほうが, 線形分類よりも複雑な構造に対して性能のよい分類モデルを作成できるが, 一方でアルゴリズムが複雑になったり, 計算量が非常に多く実用的でないことも多い. そこで私は, 線形分類器より自由度の高い分類アルゴリズム「HotPot」を考案し実装した. 現時点では Python での実装のみだが, 他の言語での実装も容易なはずである. HotPot 自体の動作には最新の scikit-learn*1 が必要であるが, scikit-learn は Python での機械学習においてグローバルスタンダードと言って良く, この制約が問題となる場面は極めて限られるはずだ.

この記事の残りの部分では, 全てのソースコードの公開と, アルゴリズムの実演を行う. 冒頭に挙げた記事のように、このアルゴリズムではロジスティック回帰などではできなかった曲面による分類境界を実現している.

実験

実験をおこなった jupyter notebook 全文は以下の github リポジトリにある. ここでは, 結果の要約だけを掲載する.

github.com


HotPot アルゴリズムの性能を比較するため, 代表的な線形分類アルゴリズムであるロジスティック回帰と, 非線形分類アルゴリズムの代表例のなかでもシンプルなガウシアン・ナイーヴベイズ (GNB) 分類器を比較対象とした. 実験に利用したデータと, 理論上の分類境界をプロットしたのが図1である.

f:id:ill-identified:20190331001204p:plain
図1: データと分類境界のプロット

図2はそれぞれの分類器の描く分類境界である.

f:id:ill-identified:20190331001310p:plain
図2: 各アルゴリズムによる分類境界

図を一見しても, 他の2つの比較対象と比べ, HotPot アルゴリズムの描く決定境界の HotPot類似指数 (HSI; HotPot Similarity Index) が極めて高く(図3), 見ていると火鍋が食べたくなることがわかる.

f:id:ill-identified:20190331232028j:plain
図3: 実際の火鍋の例, by SojinProject, CC-BY-SA-4.0

また, 表1から分かるように, 対数損失 (log loss) および AUC についても優れたパフォーマンスを示している.



Logistic

GNB

HotPot

Log Loss

0.1675

0.2245

0.0527

AUC

0.9933

0.9702

0.9984

表 1: 各アルゴリズムの精度評価

実装

では, 最後に hotpot がどのように実装されているかを公開する. これは極めて単純である.

import StandardScaler from sklearn.pipeline
import Pipeline
hotpot = Pipeline([('standardize', StandardScaler()),
                   ('HotPot', SVC(probability=True, kernel='rbf', degree=1))])
hotpot.fit(X, y)

結論

本記事では, ロジスティック回帰など, 従来広く使われている分類アルゴリズムの欠点を指摘した上で, この欠点が, 線形な境界線しか形成できない, 線形分類アルゴリズムというクラスに属するものであるという事実に由来するものだと示した. その上で, 容易に実装可能な非線形分類アルゴリズムを提案し, 実装と良好な実験結果を掲載することができた. また, HotPot アルゴリズムの持つ高い HotPot 類似性能は, 見るものに火鍋を食べたいと思わせる力があることがわかった.