HadoopとApache Mahoutを使用したクラウド推奨システム

画像

Apache Mahoutは、スケーラブルな機械学習アプリケーションで使用するために設計された機械学習ライブラリです。 推奨システムは、現在使用されている最も認識可能な機械学習アプリケーションです。 このガイドのタスクを完了するには、 Million Song Datasetオンラインアーカイブを使用して、ユーザーの音楽の好みに基づいて曲を選択するための推奨事項を作成します。









このガイドで説明する内容:











このマニュアルは、次のセクションで構成されています。







  1. データの調査とフォーマット
  2. マハウトクエスト


インストールとセットアップ



このガイドのタスクを完了するには、Windows AzureのApache Hadoopベースのサービスにアクセスするためのアカウントが必要です。 さらに、クラスターを作成する必要があります。 アカウントを取得してHadoopクラスターを作成するには、 Windows Azure でのHadoopの紹介情報 記事のWindows AzureでのMicrosoft Hadoop 入門 セクションの手順に従ってください。









データの調査とフォーマット



Apache Mahoutは、統合された要素ベースの協調フィルタリング実装を提供します。 要素ベースの協調フィルタリングは、推奨を行う際にデータを分析するために最もよく使用されます。









この例では、ユーザーは要素(曲)を使用してアクションを実行します。 これらのユーザーは、曲を聴く回数で表されるこれらのアイテムに関する好みを持っています。 サンプルデータは、 Echo Nest Taste Profile Subset Webページで提供されています。









clip_image002

図1 Milion Song Datasetアーカイブのサンプルデータ









Mahoutでデータセットを使用するには、2つのタスクを完了する必要があります。









  1. 曲とユーザーIDを整数値に変換します。
  2. 新しい値とその評価をコンマ区切りファイルに保存します。


Visual Studio 2010を起動します。プログラムウィンドウで、[ ファイル]-> [新しいプロジェクト]を選択しますVisual C#ノードの[ インストールされたテンプレート]ペインで、[ ウィンドウ]カテゴリを選択し、リストから[ コンソールアプリケーション]を選択します。 プロジェクトにConvertToMahoutInputという名前を付けます。









clip_image004

図2。 コンソールアプリケーションの作成









アプリケーションを作成したらProgram.csファイルを開き、次の静的メンバーをProgramクラスに追加します。









const char tab = '\u0009'; static Dictionary<string, int> usersMapping = new Dictionary<string, int>(); static Dictionary<string, int> songMapping = new Dictionary<string, int>();
      
      





次に、 Mainメソッドに次のコードを追加します。









 var inputStream = File.Open(args[0], FileMode.Open); var reader = new StreamReader(inputStream); var outStream = File.Open("mInput.txt", FileMode.OpenOrCreate); var writer = new StreamWriter(outStream); var i = 1; var line = reader.ReadLine(); while (!string.IsNullOrWhiteSpace(line)) { i++; if (i > 5000) break; var outLine = line.Split(tab); int user = GetUser(outLine[0]); int song = GetSong(outLine[1]); writer.Write(user); writer.Write(','); writer.Write(song); writer.Write(','); writer.WriteLine(outLine[2]); line = reader.ReadLine(); } Console.WriteLine("saved {0} lines to {1}", i, args[1]); reader.Close(); writer.Close(); SaveMapping(usersMapping, "usersMap.csv"); SaveMapping(songMapping, "songMapping.csv"); Console.WriteLine("Mapping saved"); Console.ReadKey();
      
      





次に、 GetUserおよびGetSong関数を作成して、識別子を整数に変換します。









 static int GetUser(string user) { if (!usersMapping.ContainsKey(user)) usersMapping.Add(user, usersMapping.Count + 1); return usersMapping[user]; } static int GetSong(string song) { if (!songMapping.ContainsKey(song)) songMapping.Add(song, songMapping.Count + 1); return songMapping[song]; }
      
      





最後に、ロボットプログラムのマッピングの辞書をCSVファイルに保存するSaveMappingメソッドを実装するためのユーティリティプログラムを作成します。









 static void SaveMapping(Dictionary<string, int> mapping, string fileName) { var stream = File.Open(fileName, FileMode.Create); var writer = new StreamWriter(stream); foreach (var key in mapping.Keys) { writer.Write(key); writer.Write(','); writer.WriteLine(mapping[key]); } writer.Close(); }
      
      





次に、 このリンクにあるサンプルデータをダウンロードします。 ダウンロード後、 train_triplets.txt.zipアーカイブを開き、 train_triplets.txtファイルを抽出します。









ユーティリティを実行するときに、 train_triplets.txtファイルの場所を指定したコマンドライン引数を追加します。 これを行うには、 ソリューションエクスプローラーConvertToMahoutInputプロジェクトノードを右クリックし、コンテキストメニューから[ プロパティ ]を選択します。 プロジェクトプロパティページで、 train_triplets.txtファイルへのパスを[ コマンドライン引数]テキストボックスに追加します。









clip_image006

図3 コマンドライン引数の指定









プログラムを開始するには、 F5キーを押します。 完了したら、プロジェクトが保存された場所からbin \ Debugフォルダーを開き、ユーティリティプログラムの実行結果を表示します。









clip_image008

図4 ConvertToMahoutInputユーティリティの結果







マハウトクエスト



https://www.hadooponazure.comで Hadoopクラスターポータルを開き、 リモートデスクトップアイコンをクリックします。









clip_image010

図4 リモートデスクトップアイコン









Zipアーカイブのbin \ DebugフォルダーからmInput.txtファイルをパックし、リモートクラスターのルートフォルダーc:\にコピーします。 コピー後、アーカイブからファイルを抽出します。









ここで、推奨事項が作成されるユーザーIDでファイルを作成します。 これを行うには、ルートフォルダーc:\ users.txtというテキストファイルを作成し、その中に1人のユーザーの識別子を書き込みます。









ご注意 他のユーザーへの推奨事項を作成するには、識別子を別の行に追加します。









次に、 mInput.txtおよびusers.txtファイルをHDFSにアップロードします。 これを行うには、 Hadoopコマンドシェルを開き、次のコマンドを実行します。









hadoop fs -copyFromLocal c:\ mInput.txt input \ mInput.txt

hadoop fs -copyFromLocal c:\ users.txt input \ users.txt









これで、次のコマンドを使用してタスクを完了できます。









hadoop jar c:\ Apps \ dist \ mahout \ mahout-core-0.5-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob --input = input / mInput.txt --output = output- -usersFile = input / users.txt









Mahoutジョブは数分間実行され、その後出力ファイルが作成されます。 次のコマンドを実行して、出力ファイルのローカルコピーを取得します。









hadoop fs -copyToLocal output / part-r-00000 c:\ output.txt









ルートフォルダーc:\からoutput.txtを開き、その内容を調べます。 ファイルの構造は次のとおりです。









ユーザー[曲:評価、曲:評価、...]









結論



推奨システムは、多くの最新のソーシャルネットワーキングサイト、マルチメディアストリーミング、オンラインストア、その他のオンラインサイトの重要な機能です。 Mahoutは、使いやすく、多くの便利な機能を備え、Hadoopプラットフォームで拡張可能な既製の推奨システムを提供します。









Windows AzureプラットフォームのHadoopとApache Mahoutのデータ処理とクラウドスケーラビリティの利点を活用できます。 windowsazure.com/ru-ruwww.hadooponazure.comを今 すぐお試しください








All Articles