nikkie-ftnextの日記

イベントレポートや読書メモを発信

読書ログ | 『機械学習デザインパターン』3.2 マルチラベルパターン

はじめに

マル・マル・モリ・モリ!1 nikkieです。

機械学習関係の読書ログを残します。
取り組むことの多いマルチラベル分類について、まとまった記述のある書籍を知ったので、読みました。

目次

機械学習デザインパターン

本書は、機械学習で繰り返し登場する課題を30のパターン(略)に分類し、それぞれについてベストプラクティスを提示・解説するデザインパターン集です。

著者のGoogle Cloudのデータ分析&AI部門トップとしての豊富な経験に基づく実用本位の一冊です。

ノートブックも公開されています

3章「問題表現のパターン」の中でマルチラベル分類が扱われます。

3.2 デザインパターン6:マルチラベル(Multilabel)

シングルラベル vs マルチラベル

マルチラベル(multilabel)って語、マルチクラス(multiclass)と紛らわしいように思います2(どっちもmultiで始まりますしね)。

multiclass classificationは、日本語では「多クラス分類」ですよね。
これは複数のクラスから1つのクラスを決定する問題設定です。
ということは、サンプルに付与されるクラスのラベルは1つだけ。
ラベル付きデータに付与されたラベルは1つだけですし、訓練したモデルが付与するラベルも1つだけなわけです。
つまり、多クラス(multiclass)分類はシングルラベルということです。

multilabel classification(マルチラベル分類)は、複数のクラスを付与できる問題設定です。
ラベル付きデータには複数のラベルを持つサンプルがありますし、訓練したモデルも複数のラベルを付与できます3

書籍では例として、StackOverflowの質問文に付与されたタグが取り上げられます。
質問に付与されたタグの例:「pandas」「matplotlib」
なお、マルチラベル分類は自然言語特有でなく、画像などほかの種類のデータでも成立します。

マルチラベルとマルチクラス、書籍の図3-8(3.2.3.1)が分かりやすかったですね。
二値分類・多クラス分類・マルチラベル分類をベン図で表しているのですが、

  • 二値分類は多クラス分類の部分集合
  • 多クラス分類とマルチラベル分類には共通部分がない
    • シングルラベルとマルチラベルで排反。つまり、異なる問題設定

ということを表していました。

マルチラベルパターン 読書メモ

箇条書きで残します。

  • ニューラルネットワークを中心に説明
  • まとめ
    • マルチラベル分類モデルを実装する際には、重複するラベルの組み合わせがデータセット内で十分に表現されていることを確認し、各ラベルに対して適用可能な閾値を検討します。(3.2.3.6)

  • 活性化関数
    • 多クラス分類では、ソフトマックス関数
      • 各クラスの値の和が1になる。値が最大のクラスを返せばよい
    • マルチラベル分類ではシグモイド関数
      • ソフトマックス関数と違い、和は1にはならない
      • [0.92, 0.85, 0.11]:各クラスに対する確率(信頼度)
  • 損失関数
    • マルチラベル分類ではbinary cross entropy
    • マルチラベル分類は、クラスの数だけの二値分類に分解して考えられる
      • 3つのクラスを持つマルチラベル問題は、本質的に3つの小さな二値分類問題となるからです。

  • 出力と閾値
    • 各クラスの閾値を決め、出力値が閾値を超えたクラスを付与する
    • 閾値の決め方の一例:訓練データセット内での出現率
      • ただし、可能性のあるタグの提案が目的の場合
    • (感想)クラスごとに閾値を決める余地があるのか!(クラスごとに決めるとより複雑になりそうではある)
  • 階層的なラベルの扱い
    • 2つの方法
      • フラットに扱う
      • カスケードパターン(3.4 積ん読
  • 一対他(one versus rest)
    • ニューラルネットワーク以外でもマルチラベル分類を扱える
    • 1つのマルチラベル分類モデルの代わりに、複数の二値分類器を訓練する

    • (感想)二値分類への分解の話と重なる!
    • pros: 二値分類しかできないモデル(例:SVM)も使える
    • cons: 分類器が複数できる分、複雑

閾値まわりをちょっと脱線(S-Cutという手法がある)

機械学習デザインパターン』で言及されていた論文もちょっとだけ眺めてみました。
Threshold optimisation for multi-label classifiers (2013 Pillai et al.)

1.Introductionにて、広く使われる手法S-Cut(score-Cut)が導入されます(式(1))。
意味を読み解くと、k番目のクラスについて

  • 分類器が出力するスコアs_k(x)が予め決められた閾値t_k以上であれば、そのクラスに属する
  • スコアs_k(x)閾値t_k未満であれば、そのクラスには属さない

という閾値の戦略(thresholding strategy)です。
これは私も慣れている考え方ですが、S-Cutという名で定式化されていたのですね。

この論文は閾値の決め方(検証データを使って閾値を決める)を扱っているようです。
micro/macroなprecision, recall, F measureが登場するので、『評価指標入門4武装して挑みたい気持ち。

終わりに

マルチラベル分類について、少量でも体系化された知識を得たくて『機械学習デザインパターン』3.2を読みました。
「マルチラベル分類ってマルチクラス分類とどう違うの?」という疑問はきれいに解決する内容ではないかと思います(もっと早く出会えていれば)。
ソフトマックス関数ではなくシグモイド関数とか、それゆえに閾値が必要とか、体系立ったインプットができたので読んでよかったな〜と思います。

私は貪欲なので、これで十分とは思っていなくて、他の書籍や論文(サーベイ的なやつ)で引き続きインプットを考えています。
また、落ち穂拾いとして、StackOverflowのデータセットを使ったサンプルコードの写経はやってみたいですね。
手を動かして初めて分かることもあるはず!


  1. これを歌った芦田愛菜さんが、今では『かがみの孤城』でオオカミさまですよ!「ようこそ、安西こころさん!
  2. scikit-learnの用語集はかなり詳しいです(分かりやすいかは断言できませんが)
  3. シングルラベルではラベルの数=サンプルの数ですが、マルチラベルでは1サンプルに複数ラベルが付与されます。これにより、ラベルAに100サンプル、ラベルBに200サンプルだから、ラベルAまたはラベルBのサンプルは300だ!という単純な足し算が常に成り立つとは限りません(ラベルAもラベルBも付与されたサンプルが存在するため足し算が成り立たない場合のほうが多いと思います)
  4. 読書ログ | 『 #評価指標入門 』3章・4章でついに分類の評価指標の全体感を掴めました(2月の #stapy 予習) #架け橋本 - nikkie-ftnextの日記