機械学習勉強会 #3

27
機械学習勉強会 #3 9クラスタリング 10k近傍法を用いた推薦システム @ketancho

description

2014/08/23 に行われた機械学習勉強会でグループ発表した資料。 書籍「機械学習入門」の9章と10章をベースに、クラスタリングとk近傍法を使ったレコメンドについて話ました。

Transcript of 機械学習勉強会 #3

Page 1: 機械学習勉強会 #3

機械学習勉強会 #3 9章 クラスタリング10章 k近傍法を用いた推薦システム

@ketancho

Page 2: 機械学習勉強会 #3

アジェンダ

1. クラスタリングとは(9章)

2. k近傍法とは(10.1)

3. k近傍法を用いた推薦システムとは(10.2)

4. 私のやりたかった推薦について皆さんに逆質問するコーナー

Page 3: 機械学習勉強会 #3

1. クラスタリングとは(9章)

2. k近傍法とは(10.1)

3. k近傍法を用いた推薦システムとは(10.2)

4. 私のやりたかった推薦について皆さんに逆質問するコーナー

Page 4: 機械学習勉強会 #3

クラスタリング #とは

・ある集団における各メンバの類似度を知りたい・ex. 「この人と女性の趣味があうかを知りたい」

Page 5: 機械学習勉強会 #3

クラスタリング #やってみた

S氏 普通 うーん まぁまぁ うーん うーん 好きや!G氏 ふつー 好き! うーん。 ふつー ふつー 大好き!・・K氏 うーん ふつー うーん うーん 大好き 好きや! (私)

Page 6: 機械学習勉強会 #3

クラスタリング #やってみた

S氏 0 -1 0 -1 0 1G氏  0 1 -1 0 0 1・・K氏 -1 0 -1 -1 1 1 (私)

Page 7: 機械学習勉強会 #3

クラスタリング #やってみた

1. 評価を符号化(+1, 0, -1)して行列化する

Page 8: 機械学習勉強会 #3

クラスタリング #やってみた

2. 行列を作って転置したものと掛け合わせる

 ※(互いの同意の数ー非同意の数)になる   →値が正なら同意見が多く、負なら反対意見が多い

Page 9: 機械学習勉強会 #3

クラスタリング #やってみた

3. 人ごとのn次元ユークリッド距離を求める(今回は n = 7)

Page 10: 機械学習勉強会 #3

クラスタリング #やってみた

4. 可視化してみる

Page 11: 機械学習勉強会 #3

1. クラスタリングとは(9章)

2. k近傍法とは(10.1)

3. k近傍法を用いた推薦システムとは(10.2)

4. 私のやりたかった推薦について皆さんに逆質問するコーナー

Page 12: 機械学習勉強会 #3

k近傍法 #とは

・単純な線形の決定線境界を引けないときもある

Page 13: 機械学習勉強会 #3

k近傍法 #とは

・k近傍法 => 入力に最も近いk個の点の多数決で予測を行う

k=3 の場合は○(k=1 の場合は△)

Page 14: 機械学習勉強会 #3

k近傍法 10.1でやってること

100個の x, y, label(0 or 1) のデータがある→各点ごとの x, y から k近傍法でlabelを予想し、予想と事実の差異を比較

Page 15: 機械学習勉強会 #3

k近傍法 10.1でやってること

1. 各点ごとの距離を表すテーブル(100x100)を作成する

2. 各点ごとに自分に近い点の順に並び替え、 上位25個(k=25)の点のLabelで多数決を取る

3. 2. で行ったk近傍法の予測値を元テーブルに付与する

4. Label と 予測値の合致率を求める →このデータでは合致率93% 

私のやりたかったレコメンドとイメージが違う。。

Page 16: 機械学習勉強会 #3

(余談)私のやりたかったレコメンド #とは

友人A氏「さしこが好きで、ゆきりんはあまりタイプじゃないんだけど、 他に可愛いメンバ紹介してよ。」

私「(Bもさしこ好きで、ゆきりんあんまりって言ってて、  たしかあいつさや姉も好きって言ってたな。) 山本彩っていう子がオススメだよ! あと松井玲奈ちゃんがめっちゃかわいい! 」

とか言っててもしょうがないので、10.2を読んでみました。

Page 17: 機械学習勉強会 #3

1. クラスタリングとは(9章)

2. k近傍法とは(10.1)

3. k近傍法を用いた推薦システムとは(10.2)

4. 私のやりたかった推薦について皆さんに逆質問するコーナー

Page 18: 機械学習勉強会 #3

k近傍法 10.2でやってること

アイテムベースの方法を用いて、Rプログラマ50人が使用しているパッケージ情報を元に、あるユーザが各パッケージをインストールしているかどうかを、そのユーザがインストールした他のパッケージの情報を用いて予測する。

ユーザ(50人)ごとにパッケージ(2,487件)を入れているか否かのデータ

Page 19: 機械学習勉強会 #3

k近傍法 10.2でやってること

1. 元データが縦長のデータになっているので、50 x 2,487 のテーブルに変換

2. 類似度の指標として、各列の相関係数テーブルを求める ※ 2,487 x 2,487 のテーブル(-1 ~ 1の実数が入っている)

ユーザ

パッケージ

Page 20: 機械学習勉強会 #3

k近傍法 10.2でやってること

3. k近傍法を使うために類似度(相関)を距離に変換する。 類似度1を距離0、類似度-1を距離∞に変換する

4. k近傍を取得する関数を作る

Page 21: 機械学習勉強会 #3

k近傍法 10.2でやってること

5. 4. の関数を用い、各パッケージごとに25つの近傍パッケージ(★)を取得。 各ユーザが★をインストールしているかを調べ、  (★の中でインストールしているパッケージの総数)/25 をそのパッケージをインストールしている確率にする

 ユーザ1はパッケージ1の★のうち19パッケージをインストール済なので、 パッケージ1をインストールしている確率は 0.76 となる

 

Page 22: 機械学習勉強会 #3

k近傍法 10.2でやってること

6. 全てのパッケージについてインストールされている確率を計算し、 確率をソートして、上位のパッケージを推薦する

やっぱり私のやりたいレコメンドとは違った。既に分かっていることを推薦するのって意味ないんじゃ?

Page 23: 機械学習勉強会 #3

1. クラスタリングとは(9章)

2. k近傍法とは(10.1)

3. k近傍法を用いた推薦システムとは(10.2)

4. 私のやりたかった推薦について皆さんに逆質問するコーナー

Page 24: 機械学習勉強会 #3

・「協調フィルタリング」 →他の人の嗜好を蓄積しておき、似ている人を見つけ、ユーザに推薦を行う  

※まさに「さしこが好きで、ゆきりんが・・」の方法

・「内容ベースフィルタリング」 →推薦の対象物(例えばAKBGのメンバ)の特徴から、ユーザに推薦を行う

※「黒髪の子がいい」とか「背が155cmより低い子がいい」とか?

私がやりたいレコメンド #やってみた

Page 25: 機械学習勉強会 #3

私がやりたいレコメンド #やってみた

・「アイテムベース」 →蓄積したデータから「セットで好まれる数」を計算し、推薦する

※「さしことさや姉両方好きって言う人が多い」 「この人さしこ好きらしい」  →さや姉を紹介する?

・「ユーザベース」 →好みの一致割合からユーザとの類似度を計算する

Page 26: 機械学習勉強会 #3

私がやりたいレコメンド #やってみた

Page 27: 機械学習勉強会 #3

私がやりたいレコメンド #やってみた

課題 ・類似度の出し方ってこれでいいの?

 ・類似度が同じだったときに、推薦対象は多数決で決めていいの?

 ・精度を上げるには蓄積データを増やす必要があるけど、  増やしすぎると処理時間かなり増えそう

 ・そもそも序盤のデータ蓄積どうするの?  何件あればそれなりの精度になるの?

なにかと課題は多そうですが、スモールスタートでサービス作ってみます。