よしだのブログスマートフォン用の表示で見るよしだのブログサブタイトルはありません。はじめに、初心者向けの記事です。行われたハンズオンの資料はステップバイステップで実装でき、とっても分かりやすいです。メモリに入っていたデータもスクリプトも全てダウンロードできるようになっています。ハンズオンは、MovieLens*1のデータを元にして、レコメンドできるようになります。MLlibただ、ハンズオンをこなすだけでもつまらないので、勢いでライブドアグルメのデータセットのデータでレコメンドができるように改造してみました。ファイルに出力されているものです。公開しましたのでご参考までに。色々を本エントリではつらつらと書いていきたいと思います。実装してみたのですが、その比較も簡単に書いてみました。3つのパラメータをいじる形になります。値を大きくすると精度が向上するがモデルの生成に時間がかかるようになります。下に凸のグラフになり、値が小さいほうが精度が高くなるのですが、どこが一番よいかはトライ&エラーで探る必要があります。数値ですが、これは少ないほどよいのですが、いくつ以下なら良い、という値がありません。値だけ見て、これなら良さそうだと思っていると、全然思ったものと違う結果になっている、ということになります。各パラメータの詳細な意味は、アルベルトさんのブログを参照してください。チューニングの話は2です。Blog以下も参考に。よしだのブログここまでは基本。以下は個人的な失敗談(笑)チューニングは初めてだったのですが、最初に気がついたのは、とりあえず出力された結果が良いのか悪いのかさっぱりわかりませんでした(笑)。その時の感覚はレストランの名前がいっぱい並んだけど、それっぽいような、それっぽくないような・・・というひじょーーに曖昧な感覚でした。チューニングの前に、やはりデータをエクセルなどに整理して、何をインプットにして、何が出力されたらOKなのかをまとめておく必要があります。チューニングの取っ掛かりには必ず必要です。スクリーンショットです。左の列がユーザーIDで、右に訪れたラーメン店で評価が一定以上のものを表示しています。色付けをしておいて、その3店舗しか訪れていないユーザーXに次に何をレコメンドすべきかを推測できるようにしました。色がついていない、もしくは付いているけど少ない行のレストランがレコメンドされているとNGと判断できます。使う必要や、サンプル抽出する必要がありそうです。食べさせるデータを変える、などなど一番時間がかかりましたが、実データでは更に比較にならない時間がかかる気がします。実務でどのぐらいの時間をかけるものなのか、どのぐらいの頻度でチューニングするのか、計画は、など色々聞いてみたいですね。前提としているので、勉強を必要としました。比較すると、関数型の記述を覚えてしまえば非常に自由度が高くコーディングが簡単です。売りの一つだと思います。関数型の勉強をしつつコーディングしていて一箇所躓いたのが、変数のスコープです。関数を渡し、データを1つずつその関数で処理するのですが、基本的に関数はその関数内の変数しか使えませんので注意が必要です。対応していないので、現状自前でserialize/deserializeを実装しないと保存できません。対応されるよていだそうです。トレーニングは後から訓練データをモデルに追加して、モデルをアップデートできるようにはなっていません。作ろうとした時には、若干トリッキーな作りになります。両方触ってみて気がついた違いを列挙してみます。基本的にバッチなので、サーバーが立ち上がるということはありません。基本的にバッチの処理の中で、トレーニングから予測まで全部行う必要があります。一度のバッチ処理でトレーニングから予測までを行い結果を出力するまでを実装する必要がありますので、少しコード量は多くなりそうです。サーバーが立ち上がります。外部のスクリプトからサーバーに接続してトレーニングデータを送ったり、予測をさせたりする構成になっています。比較的、既存のシステムに組み込みやすい作りになっています。予測についても一度に全部出力する必要がなく、必要なときに問い合わせれば予測結果を得ることができます。後からモデルにデータを追加して、インクリメンタルに更新することはできません。毎回トレーニングデータを全て食べさせてモデルを作成する必要があるので、リアルタイムレコメンド・・は難しそうです。インクリメンタルにモデルのデータを追加することができます。したがって、利用者のアクションをリアルタイムにモデルに反映させて、予測する結果をアップデートさせることができます。関数型を知る必要はありますが、それさえ乗り越えればさくっとバッチ程度は簡単に作れると思います。コーディングは簡単ですが、チューニングが素人ながらになかなか難しいです。むずかしいのは、予測結果が適当かどうかの評価です。スクリプトなどのツールを駆使するのはもちろんですが、予めインプットとあるべきアウトプットを整理できていると理想的だと思います。トレーニングから予測までを一気通貫に行う必要があるので、システム組み込み時の外部I/Fには工夫が必要です。リアルタイムレコメンドはそのつくり上難しいと思います。使用されたデータを公開できるように消毒されたデータセット。サンプルでよく使われる。Sparkどうも!今日も勉強会に参加していますーので、勉強会メモを公...2014-10-05Jubatusハッカソンに参加して、イベントのレコメンデーションを作ってみた。勉強会へ参加してきました。はてなブログPro検索プラットフォームの開発・運用をしているプログラマーです。好き勝手なことを綴りますが、どうぞ宜しくお願いします。所属組織とは関係のない個人の見解です。(41)月別アーカイブはてなブログをはじめよう!yoshi0309さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。