nikkie-ftnextの日記

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

イベントレポート | Pythonもくもく自習室 #8 @ Rettyオフィス #rettypy

はじめに

だんないよ、nikkieです。
この週末はRettyさんの「Pythonもくもく自習室」に参加してきました。
 

もくもく会の概要

Pythonもくもく自習室 #8 @ Rettyオフィス - connpass

この勉強会について

週末の昼下がりに、Pythonに関するやりたいことを各自持ち寄り、ゆるゆると「自習」を進めていく会です。

  • 本を読む
  • PythonDjangoなどのチュートリアルをすすめる
  • コミュニティの作業や執筆etc...
  • 他の参加者と情報交換をしたり学んだり
  • おいしいご飯と共に楽しむ(?)

など、Python使いおよびエンジニアライフのオアシス&知見を身につける「自習室」としてゆるくご活用いただければと思います。

※初心者歓迎です!(なお,ハンズオンなどはありません)

2017年12月から毎月通っています。
おいしいご飯の場で色々教えていただけて助かっています。
今回は参加率が高く大盛況でした!

 

取り組んだこと

レコメンドシステムで使われる協調フィルタリングを実装してみました。
(人に説明できるまで理解するというのが目標でした)

協調フィルタリングアルゴリズムについて参考にしたスライド:

www.slideshare.net

勉強会の成果notebook
2018/03/10 Pythonもくもく自習室 #8 @ Rettyオフィス 成果発表:ユーザベースの協調フィルタリングの例を実装 · GitHub

 

実装に取り組んでの感想

numpyを使って実装するのははじめてでしたが、
ユークリッド距離は差を取ってlinalg.normで出せたのでロジック部分に集中できました。

スライドどおりのスコアにならなかったんですが、
スライドはあくまで説明のためのスコアということなんですね。

 

使ったスライドは評価が欠損した場合の処理が書いてあって、
実装する側にとってはわかりやすかったです。
ただ、評価の欠損がある(ユーザAのアイテム4への評価)ために、
似ているユーザが高く評価しているアイテムより
似ていないユーザが評価しているアイテム(=似ているユーザは未評価のアイテム)が
レコメンドされるという結果です。
「ユーザベース協調フィルタリングは似たユーザの評価で推測する」と説明するときに
違和感があるので、この欠損は埋めて説明するのがよさそうですね。
(欠損した評価を埋めると、似ているユーザの評価に一致することを確かめた)

 

もくもく会後に情報収集したところ以下のリポジトリを見つけました。

github.com

 

『情報推薦システム入門』という本には

ユーザ間の類似度には「ピアソンの相関係数
アイテム間の類似度には「調整コサイン類似度」

と書かれていました。(p.15, 19)
どちらの指標も評価の平均との差を考えているので、
高い評価しがちな人と低い評価しがちな人の評価が可能になっているそうです。

 

もくもく会感想

1月にLTした「Pillowでモザイクアート」のソースを使っている方がいらっしゃいました!

GitHub - ftnext/mosaic-art-python

400×400のサイズの画像にしか対応していなくて大変申し訳ございません。。。
自分のコードがほかの人の作りたいものを実現する一助になっていると知ることができ、
不完全な形でもアウトプットしてよかったと感無量です。
もっと使いやすくできるよう手を入れていきたいですね。
(numpyのlinalg.normは知っていれば色の「距離」の算出に使えましたし、
 2つの画像を比較する際に、コサイン類似度やピアソンの相関係数を使うこともできるのかなと妄想しています。。)

 

KaggleのRecruit RestaurantコンペのKernelを確認されている方がいらっしゃいました。
私も「探索的データ解析」(前処理でデータを可視化してどんな傾向があるか掴むこと)には不安があるので、その方と似た問題意識があります。
以下のKernelだと思うので、時間を取って見てみようと思います。

Surprise Me | Kaggle

 

自然言語処理でもくもくされている方が多かった印象です。
アニメネタで色々できそうな分野なので、業務とかモザイクアートとか調整して手を出したいところです。
トピックモデルの備忘録的リンク:

LDA for Pokemon analysis | haripo.com

 

運営者ならびに参加者の皆さま、今回も1日ありがとうございました!