classifierを使った線形分類による多値分類について

74 views
Skip to first unread message

dokusyuu_jubatus

unread,
Nov 6, 2017, 8:55:55 PM11/6/17
to Jubatus
現在、MLPの「オンライン機械学習」を読みながら、独学でJubatus classifierによる多値分類を勉強しております。
多値分類のscore値に関していくつか質問があります。ご教示いただけると幸いです。

1. 分類結果の解釈
 * 4種類のラベルを分類する場合、classifyメソッドにより4つのscore値が出力されます。この中で最も高いscore値をclassifierによる分類結果として捉えて良いのでしょうか?

2. 1対他法について
 * 1. のような分類方法を「1対他法(OVR)」と呼ぶのでしょうか?

3. jubadumpにより出力されたweightについて
 * jubadumpによって生成されたjsonファイルの、storage -> storage -> weight の、v1、v2、v3はそれぞれ何を表しているのでしょうか?私の理解ですと、v1が重みを、v2、v3が学習時のアルゴリズムに応じて保存される変数を表している、と理解しているのですが正しいでしょうか?

4. 3. のv2、v3について
 * PA、AROW、NHERDなどの、学習アルゴリズムにおける、v2、v3に保存される値には具体的に何が保存され、どのように使われているのでしょうか?おそらく、正則化項に関するものだと考えております。

5. 関数、f(x)について
 * 線形分類器による2値分類は、f(x) = wTx + b で表されると思いますが、多値分類においても同様でしょうか?
 * 同様なのでしたら、切片である、b はjsonファイルのどこに保存されているのでしょうか?
 * classifyで算出されるscore値は、f(x)と同じ意味でしょうか?
 * perl、Rを使ってf(x)を手計算したのですが、classifyのscore値と異なる結果になりました。なぜでしょうか?また、同様の結果を得るにはどうすればよいでしょうか?

6. 過学習について
 * classifierのAROWを使った線形分類による多値分類において、過学習というのは問題になるのでしょうか?
過学習によるoverfittingは、非線形分類やDeep Learningにおいては、大きな問題となりますが、線形分離可能な問題を解く際の、線形分類においてはそこまで問題にならないのでは?と考えているのですが、やはりclassifierにおいても同様に問題になるのでしょうか?


初歩的な質問ばかりをたくさんしてしまいました。お手数ではございますが、どなたかご教示いただけるとありがたいです。
直接的な回答でなくとも、「この本を読め」「ここのページを見よ」「いついつの講習会に参加せよ」などのアドバイスもいただけると大変ありがたいです。
よろしくお願い致します。

aoao...@gmail.com

unread,
Nov 13, 2017, 2:23:41 AM11/13/17
to Jubatus
Jubatusコミュニティの塩田です。

Jubatusをご利用いただき、ありがとうございます。

線形分類アルゴリズムについては、Qiitaに解説記事を掲載しておりますので、こちらをご一読下さい。
https://qiita.com/imaimai1125/items/2a126cf04e64432f1bfd

また、Jubatusの解説本が先日出版されましたので、こちらも合わせてどうぞ。
https://www.amazon.co.jp/dp/4800711789

1. 分類結果の解釈
    * 仰る通りです。スコアが最も高いラベルを分類結果としてお使いください。

2. 1対多法について
    * はい、その通りです。
    * Jubatusの線形分類器では、ラベル毎に分類モデルを用意して、最もスコアが高いラベルを予測結果として利用します。
    * ラベルがA, B, Cの場合、Aとその他(B,C)を分類するモデル、Bとその他(A,C)を分類するモデル、Cとその他(A,B)を分類するモデル、の合計3つのモデルを用意して、それぞれでスコアを計算します。

3,4. weightのv1, v2, v3について、
    * v1: 線形モデルの重みです。 f(x) = \sum_i w_i x_i の各w_iに対応します。
    * v2: 線形モデルの重みの分散です。AROW, CW, NHERDなど分散値を利用して重みの更新を行う手法で利用します。
        * 分散(v2)が小さくなるほど、その特徴量iに対する自信が高く、十分に学習できていると考えることができます。
        * 特徴量のスケールに応じて分散値のスケールは異なりますので、特徴量間の単純比較はできない点に注意が必要です。 
        * PAでは分散値を利用しませんので、常に0が格納されます。
    * v3: 未使用のパラメータです。常に0が格納されます。

5. f(x)について、
    * jubatusの線形分類器では2値、多値ともにバイアス項が入っておりませんので、正しくは f(x) = w^T x となります。
        * バイアス項を含めて学習を行いたい場合には、ダミー変数を入れる必要があり、常に値が1の特徴量を追加してください。
    * classifyで算出されるスコアはf(x) = w^T xのはずです。
        * スコアが異なるのは問題ですので、お手数ですが実行スクリプトを共有頂くことは可能でしょうか?

6. 過学習について
    * 線形分類アルゴリズムは過学習しづらい手法ですので、そこそこなデータ量があれば大きな問題とはなりません。
        * パラメータのregularization_weightをいくつか試していただき、交差検証を利用して精度の高いモデルを選択して頂ければと思います。
        * データ量が少ない場合、同じデータを何度も学習させる繰り返し学習が有効です。
        * ただし、オンライン学習という性質上、突然現れる外れ値のようなデータを学習してしまうと性能がガクッと落ちてしまう可能性があります。
        * 外れ値が現れることが分かっているなら、ノイズに強いAROWやNHERDを利用することをオススメします。

以上です。
何か不明点がありましたら、再度リプライ頂けるとありがたいです。

よろしくお願いいたします。

2017年11月7日火曜日 10時55分55秒 UTC+9 dokusyuu_jubatus:
Message has been deleted

aoao...@gmail.com

unread,
Nov 27, 2017, 12:41:19 AM11/27/17
to Jubatus
ご丁寧にREADME等作成いただきて、ありがとうございます。

Jubatusのスコア計算には単精度の浮動小数点演算を利用しているため、
計算誤差の問題かと思います。

作成頂いたPerlスクリプトは倍精度の浮動小数点演算を用いていますので、
有効数字7桁目以降の計算結果が微妙に異なってしまいます。

ご不明点などありましたら、ご連絡いただければと思います。
よろしくお願いいたします。

2017年11月24日金曜日 14時57分05秒 UTC+9 dokusyuu_jubatus:
返信が遅くなってしまい申し訳ございません。

私の稚拙な質問に全て回答して頂きありがとうございました。
紹介していただいた教本も読んで勉強したいと思います。

Perlでの手計算の実行スクリプトとJubatusでの学習に用いたデータとその結果を添付してお送りいたします。 

5. f(x)について、
    * classifyで算出されるスコアはf(x) = w^T xのはずです。
        * スコアが異なるのは問題ですので、お手数ですが実行スクリプトを共有頂くことは可能でしょうか?


Jubatusでの学習の条件や各ファイルの説明はREADME.rmdをご覧ください。
お手数ですがご確認よろしくお願い致します。

dokusyuu_jubatus

unread,
Nov 27, 2017, 1:15:42 AM11/27/17
to Jubatus
ありがとうございます。モヤモヤしていたものが解決しました!
おそらく浮動小数点数演算の計算誤差かなとは思っていたのですが、単精度と倍精度をよく理解しておらず、誤差の実態が掴めていませんでした。
本当にありがとうございました。

2017年11月27日月曜日 14時41分19秒 UTC+9 aoao...@gmail.com:
Reply all
Reply to author
Forward
0 new messages