Apache Mahoutの紹介

こんにちは



Habréに関する私の最初の記事は 、Mahoutライブラリーについて多くの人が知らないことを示しました。 (もちろん、私はこれに間違えています。)はい、このトピックに関する事実調査資料はありません。 そこで、私はライブラリの機能に関する投稿を書くことにしました。 いくつかのペンのサンプルは、このトピックへの最良の紹介は、オーウェン、アニル、ダニング、フリードマンによる本「Mahout in Action」からの短い抜粋であることを示しました。 そのため、私は、Mahoutの範囲についてよく知っているように思えるいくつかの場所の無料翻訳を行いました。







Apache Mahoutの紹介(1)



*以下、括弧内に本の章を示します。



...

Mahoutには多数のモデルとアルゴリズムが含まれており、その多くはまだ開発中または実験段階( アルゴリズム )です。 このプロジェクトの初期段階では、3つの重要なトピックが最も目立ちます。推奨システム(協調フィルタリング)、クラスタリング、分類です。 これは、Mahoutのすべてとはほど遠いですが、これらのトピックは最も目立ち、成熟しています。

...

理論的には、Mahoutはあらゆる種類の機械学習モデルを実装するためのプロジェクトです。 実際には、機械学習の3つの重要な領域が現在実装されています。

...



推奨システム。 (1.2.1)



紹介システムは、今日使用されている最も認識可能な機械学習モデルです。 以前のアクションに基づいて、書籍、映画、または記事を推奨しようとしているサービスまたはサイトが表示されます。 彼らは好みや好みを導き出し、興味のある未知のオブジェクトを特定しようとします。







クラスタリング(1.2.2)



クラスタリングはそれほど明白ではありませんが、よく知られている参考文献にも見られます。 名前が示すように、クラスタリング方法は、多数のオブジェクトを共通の類似性を持つクラスターにグループ化しようとします。 このように、階層および順序は大規模または理解しにくいデータセットで確立され、この方法で興味深いパターンが確立されるか、データセットが理解しやすくなります。





クラスタリングは、物事の大規模なコレクションで、理解するのが難しいかもしれない構造や階層さえも決定するのに役立ちます。 企業はこの手法を使用して、ユーザー間の隠されたグループを識別したり、大量のドキュメントを合理的に整理したり、ログを使用するサイトの一般的な使用パターンを識別したりできます。



分類(1.2.3)



分類モデルは、アイテムが特定のカテゴリの一部であるかどうか、または何らかの属性を持つかどうかを決定します。 ...





分類は、新しい入力データまたはアイテムが、考慮された以前のパターンに対応するかどうかを判断するのに役立ちます。 また、動作やパターンを分類するためによく使用されます。 これは、疑わしいネットワークアクティビティまたは詐欺を検出するために使用できます。 また、ユーザーのメッセージがフラストレーションまたは満足を示しているかどうかを確認します。



これらの各モデルは、多くの優れた入力を備えている場合に最適に機能します。 場合によっては、これらの方法は大量のデータで機能するだけでなく、結果を迅速に受信する必要があり、これらの要因によりスケーラビリティが主なタスクになります。 Mahoutを使用する主な理由の1つは、スケーラビリティです。



この本で繰り返し述べられているように、典型的な状況に応じて適用できる既製のレシピはありません。 ケースごとに、異なるアルゴリズムと入力データを試す必要があります。 ライブラリを正常に使用するには、アルゴリズムの本質を理解する必要があります。



最初の推奨システムのリリース(2.2)



...現在、シンプルなユーザー指向の推奨システムを検討しています。



入力データの作成(2.2.1)


...

推奨システムには、推奨のベースとなる入力が必要です。 このデータは、Mahout言語の設定の形式を取ります。 なぜなら 推奨システムは、アイテムをユーザーに推奨するという点で理解しやすいため、ユーザーとサブジェクトの関連付けとしての設定について説明します。 ...好みは、ユーザーIDとアイテムIDで構成され、通常、このアイテムに対するユーザーの好みの度合いを表す数値(評価)です。 MahoutのIDは常に整数です。 好みの値は何でもかまいません。主なことは、値が大きいほどポジティブな愛情を表すことです。 たとえば、これらの値は1〜5のスケールで評価できます。1はユーザーがアイテムを好きではないことを示し、5はアイテムが非常に似ていることを示します。

userID、itemID、値情報を含むintro.csvファイルを作成します。

...

ここで、次のコードを実行します。

class RecommenderIntro { public static void main(String[] args) throws Exception { DataModel model = new FileDataModel (new File("intro.csv")); UserSimilarity similarity = new PearsonCorrelationSimilarity (model); UserNeighborhood neighborhood = new NearestNUserNeighborhood (2, similarity, model); Recommender recommender = new GenericUserBasedRecommender (model, neighborhood, similarity); List<RecommendedItem> recommendations = recommender.recommend(1, 1); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); } } }
      
      







DataModelは、コンピューティングに必要なすべての設定、ユーザー、およびアイテムへのアクセスを保存および提供します。 UserSimilarityの実装により、ユーザーの好みがどれほど似ているかについての洞察が得られます。 多くのメトリックまたは計算の1つに基づくことができます。 (メトリックは最初の投稿で説明されています)UserNeighborhoodの実装は、特定のユーザーに最も近いユーザーのグループの概念を定義します。 (最初のパラメーター2は、このグループのユーザー数です。)最後に、Recommender実装は、前の3つのコンポーネントを結合して、ユーザーへの推奨を行います。 推奨メソッド(int userId、int number)は、ユーザーとこのユーザーが行う必要のある推奨の数という2つのパラメーターを取ります。



出力:RecommendedItem [アイテム:XXX、値:Y]。 ここで、Yは、1つの対象XXXに対してユーザーによって与えられた予測評価です。 このアイテムはユーザーに推奨されます。 彼は最高の予測スコアを持っています。



All Articles