1

私は推奨のためにmahoutを使用しようとしていますしかし、なしApache Mahoutは推奨を与えません

マイセット:

0,102,5.0 
1,101,5.0 
1,102,5.0 

コード:

 DataModel datamodel = new FileDataModel(new File("dataset.csv")); 
     // Creating UserSimilarity object. 
     UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel); 

     // Creating UserNeighbourHHood object. 
     UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(0.1, usersimilarity, datamodel); 

     // Create UserRecomender 
     UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity); 

     List<RecommendedItem> recommendations = recommender.recommend(0, 1); 

     for (RecommendedItem recommendation : recommendations) { 
      System.out.println(recommendation); 
     } 

私はMahoutのバージョン使用しています:

理想的には0.13.0を、それがitem_id = 101' to 'user_id = 0' asユーザー= 0 andユーザにお勧めしなければなりません= 1 have item 102 common show it should recommend item_id = 101 to user_id = 0`

ログ:

18:08:11.669 [main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - Creating FileDataModel for file dataset.csv 
18:08:11.700 [main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - Reading file info... 
18:08:11.702 [main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - Read lines: 3 
18:08:11.722 [main] INFO org.apache.mahout.cf.taste.impl.model.GenericDataModel - Processed 2 users 
18:08:11.738 [main] DEBUG org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender - Recommending items for user ID '0' 
+0

Scala/v0.13.0はオプションですか? v 0.10はかなり古くなっています。 (昨晩落ちた0.13.0)。 – rawkintrevo

+0

確かにv0.13で試してください –

+0

まだ運がない –

答えて

1

Iバージョン0.13.0に基づいて3つの例を有する

(及びサムサラに必要とされるスカラは、R状のScala DSL Mahoutのは、v0.10の+を利用して)

ウォーク

最初の例では通じ非常に遅い徒歩: https://gist.github.com/rawkintrevo/3869030ff1a731d43c5e77979a5bf4a8 とここで見つけるパットFerrelsブログ記事/スライドデッキにコンパニオンとして意図されています。 http://actionml.com/blog/cco

クロール

第二の例は、CCOアルゴリズムのpropperインタフェースであるSimilarityAnalysis.cooccurrencesIDSs(...を利用するという点で、もう少し「本物」です。

https://gist.github.com/rawkintrevo/c1bb00896263bdc067ddcd8299f4794c

実行

ここでは、 '実際の' データを使用しています。 MovieLensのデータセットでは、CCOのマルチモーダルパワー(複数のユーザービヘイビアでの推薦機能)を十分に紹介することはできません。ここでは、「実際の」データをロードし、推奨事項を生成します。 https://gist.github.com/rawkintrevo/f87cc89f4d337d7ffea80a6af3bee83e

結論 は、私はあなたが特別のJavaを求め知っている、しかし、ApacheのMahoutのは、現時点ではJavaのために連動されていません。理論的には、あなたのJavaにScalaをインポートすることも、別のJavaのフレンドリーな関数で関数をラップすることもできます... Javaで作業していた卒業生の中には、夜遅く(またはおそらく夢の中で) APIは、現時点ではトランクには存在せず、PRもありませんし、ロードマップにもその銃弾はありません。

上記の情報を参考にしてください。

付録

StackOverflowのための最も簡単な例(あなたが$MAHOUT_HOME/bin/mahout spark-shellを入力して、Mahoutの火花シェルで対話的にこれを実行することができます(SPARK_HOMEJAVA_HOMEMAHOUT_HOMEが設定されていると仮定):

val inputRDD = sc.parallelize(Array( ("u1", "purchase", "iphone"), 
    ("u1","purchase","ipad"), 
    ("u2","purchase","nexus"), 
    ("u2","purchase","galaxy"), 
    ("u3","purchase","surface"), 
    ("u4","purchase","iphone"), 
    ("u4","purchase","galaxy"), 
    ("u1","category-browse","phones"), 
    ("u1","category-browse","electronics"), 
    ("u1","category-browse","service"), 
    ("u2","category-browse","accessories"), 
    ("u2","category-browse","tablets"), 
    ("u3","category-browse","accessories"), 
    ("u3","category-browse","service"), 
    ("u4","category-browse","phones"), 
    ("u4","category-browse","tablets"))) 



import org.apache.mahout.math.indexeddataset.{IndexedDataset, BiDictionary} 
import org.apache.mahout.sparkbindings.indexeddataset.IndexedDatasetSpark 

val purchasesIDS = IndexedDatasetSpark.apply(inputRDD.filter(_._2 == "purchase").map(o => (o._1, o._3)))(sc) 
val browseIDS = IndexedDatasetSpark.apply(inputRDD.filter(_._2 == "category-browse").map(o => (o._1, o._3)))(sc) 

import org.apache.mahout.math.cf.SimilarityAnalysis 

val llrDrmList = SimilarityAnalysis.cooccurrencesIDSs(Array(purchasesIDS, browseIDS), 
    randomSeed = 1234, 
    maxInterestingItemsPerThing = 3, 
    maxNumInteractions = 4) 

val llrAtA = llrDrmList(0).matrix.collect 

IndexedDatasetSpark.apply(RDD[(String, String)]が必要です。最初の文字列は「行」(ユーザーなど)、2番目の文字列は「行動」ですので、「購入マトリックス」では列は「製品」になります。また、二つの列(女性/男性)

あなたはMahoutの中のHadoop MapReduceのコードは廃止されているSimilarityAnalysis.cooccurrencesIDSs(

+0

それはとても涼しいですが、私の上記のデータセットで私を助けてください。 Javaとscalaは似ていますが、どちらの言語でも例を挙げても難しくありません。 しかし、問題は、いくつかのデータセットでは出力が得られているのに対して、一部のデータセットではそうではないということです。だから私は本当にシンプルなデータセットを投稿したのです。 –

+0

あなたのデータセットを記述できますか? userID、action、productiDですか? – rawkintrevo

+0

これはuserId、productId、preferenceValueです –

2

にIndexedDataSetsの配列を渡すと、「性別」行列です。新しい推奨コードは@rawkintrevoの例で始まります。あなたがScalaプログラマであれば、それに従ってください。

ほとんどのエンジニアは修正なしで動作するシステムを望みます。Mahoutアルゴリズムは、Apache PredictionIOの上に構築されたUniversal Recommenderにカプセル化されています。サンプルにあるようなイベントを受け入れるサーバー、内部イベント記憶域、結果の照会サーバーがあります。以前のMapreduceコードには、リアルタイムのユーザー動作を使用して推奨するなど、数多くの改善点があります。新しいMahoutも旧式の入力とクエリのサーバも含まれていないため、Universal Recommenderは両方のRESTエンドポイントを持っています。

使用しているコードが非難されることを考えれば、Mahoutコード(@ rawkintrevoの例)に潜むか、エンドツーエンドシステム全体であるUniversal Recommenderを見ることを強くお勧めします。

  • 「シングルマシン」設定hereでPredictionIOをインストールするか、本当にショートカットセットアップはそれがPIOとユニバーサル推薦がプリインストールされて含まれ、当社のパッケージ化されたAWS AMI hereを使用します。
  • あなたが設定ファイル、RESTまたはJava SDKおよびPIO CLIを扱うこのセットアップを持っていたら、推薦here

にイベントを送信するためURテンプレートhere

  • AのJava SDKを追加します。 Scalaコーディングは必要ありません。

  • +0

    は次のバージョンのマウアウトの予測です –

    +0

    いいえ、0.13.1です。 PredictionIOにはユニバーサルリコメンダーがあり、これはエンドツーエンドのパイプラインです。 単純な例を実行することができなかったので、もう少しターンキーを使ってみることをお勧めします。 – rawkintrevo

    関連する問題