
友達の推薦でBigDataコースに行ったことがありますが、幸運にもこのコンテストに参加できました。 コースのトレーニングについては説明しませんが、.Netの
MyMediaLiteライブラリとその使用方法について説明します。
前戯
鼻には最後の実験室作業がありました。 コースを通して、私は実験室での仕事で特に競争することはしませんでした;終わりに近づくと、私の人生は競争を余儀なくされました-証明書を取得するために、私はポイントを獲得しなければなりませんでした。 最後の講義はあまり有益ではなく、むしろ復習であり、時間を無駄にしないと同時に、最後のラボを行うことにしました。 残念ながら、その時点では、Apache Sparkがインストールされた独自のクラスターはありませんでした。 トレーニングクラスターでは、全員が研究室を急いでいるため、成功のチャンスとリソースはほとんどありませんでした。 私の選択は、C#.Netの
MyMediaLiteでした。 幸いなことに、2つのCPUと16 GbのRAMを備えた、負荷が高く実験用に割り当てられていないかなり良好な動作中のサーバーがありました。
タスク条件
次のデータが提供されました。
- 映画評価テーブルtrain.csv (フィールドuserId、movieId、評価、タイムスタンプ)。 サンプルのかなりの半分は引き裂くために提供され(movieIdとuserIdでランダムにソートされます)、残りの半分は推奨システムの品質を評価するためにコーススーパーバイザーに残ります
- ムービータグを含むtags.csvテーブル(userId、movieId、tag、timestampフィールド)
- movies.csvテーブル(movieId、title、genresフィールド)、映画の名前とそのジャンル
- links.csvテーブル(movieId、imdbId、tmdbIdフィールド)imdbおよびthemoviedbデータベース内のフィルム識別子の対応(そこにフィルムの追加特性があります)
- テーブルtest.csv (フィールドuserId、movieIdおよびrating)は、実際には選択の後半ですが、評価はありません。
テーブルtest.csvの映画の評価を予測し、userId、movieId、評価の形式のデータを含む結果ファイルを生成し、チェッカーにアップロードする必要があります。 推奨事項の品質は
RMSEによって評価され、オフセットが0.9(これ以上ではない)になることはありません。 次は最良の結果を得るための闘争です。
すべてのデータファイルは
https://goo.gl/iVEbfAから入手できます
。RMSEの読み方に関する素晴らしい記事
私の決断
コードの最新バージョンはgihabaで入手できます。
さて、誰が知性なしで戦いに出ますか? 「インテリジェンスデータ」は講義の休憩中に取得されたため、他のデータセットを
追加して、悪名高い
映画レンズ1mを滑らせたことがわかりました。 既にラボをマスターしている人は、
SVD ++を称賛しました。
原則として、機械学習は3つの部分で構成されます。
私もこの方法で、サンプルをそれぞれ70%と30%の2つの部分に分けました。 サンプルの2番目の部分は、モデルの精度を検証するために必要です。 コードの非常に最初のバージョンが作成され、その結果、実験室の作業は正常に合格しました。 結果は、
BiasedMatrixFactorizationモデルで
0.880360573502です。 彼はすぐにすべての見掛け倒しをタグとリンクで一掃し、それらをより良い結果を得るための追加機能として使用することができました。 私はそれに時間を費やさなかったし、それは正しい決断でした、私見。 トレーニングセットを欠席したユーザーも大胆に無視され、BiasedMatrixFactorizationクラスによって返された不明な値によって評価が与えられました。 これは重大な間違いでした。
SVD ++モデルでは、結果は
0.872325203952でした 。 チェッカーが最初の場所を示し、私は落ち着いた魂を持って勝者のスピーチをリハーサルし、寝ました。 しかし、彼らが言うように、鶏は秋に数えられます。
競技結果
簡単に説明しますが、勝利の場所は何度か手から手に渡りました。 その結果、締め切りの時点で、私の友人は1位になり、私は2位になりました。 私たちプログラマー-頑固な人々は、まだ
BiasedMatrixFactorizationで最高の結果を
絞り出すことが
できました 。 悲しいかな、締め切り後。

代替ソリューション
私の友人
wenkは 、1位を獲得し、彼のコードを提供してくれました。 彼のソリューションは、scikit-learnのALSを使用して、Apache Sparkのクラスターに実装されました。
私の経験
私自身のために、いくつかの事実に注目しました。
- 「ギャップのスコア」ではなく、常に慎重にデータを調査する必要がありますが、近い値でデータを埋めるようにしてください。 たとえば、空の値ではなくサンプルの平均評価により、結果が大幅に改善されました
- 結果の丸め(評価)により、ロングテールよりも予測の精度が低下しました
- 検証なしで、サンプル全体で最適なオプションが計算されました。 使用されるDoCrossValidationメソッド
- 理想的には、パラメーターの依存関係(反復回数など)とRMSEの結果のグラフを作成する必要がありました。 勝利に向かって進むことは盲目的ではなく、目が見える
- Apache Sparkは、複数のマシンで実行されるため、計算時間が短縮されます。 時間が重要な場合は、スパークを使用します
- MyMediaLiteは、小規模でタイムクリティカルなタスクに適したライブラリです。 火花を散らしてクラスターを上げるのが採算が取れないとき、それ自体を正当化することができます
ああ、もし私がこれをすべて知っていたら、私は勝者になるだろう...私はあなたの意見やアドバイス、友人に感謝します、たくさん蹴らないでください...