2017-03-21 3 views
0

から優先値を読み、アイテムIDと優先値は、しかし、彼らはすべての文字列です。のApache Mahoutのは - 私は、古典的なユーザーIDで構成されたデータセットを持っているような状況にいるよ文字列

私は、FileDataModelクラス(Mahoutライブラリの一部)のreadItemIDFromString()メソッドとreadUserIDFromString()メソッドをオーバーライドしてUserIDとItemID文字列を読み取ることができましたが、私が間違っていない場合の嗜好値の変換。

誰かがこの問題へのアプローチに何らかのインプットを持っていれば、私はそれを高く評価します。ここでは、私が何を意味するか説明するために

は私のユーザーID文字列「変換」の一例である:

@Override 
protected long readUserIDFromString(String value) { 

    if (memIdMigtr == null) { 
     memIdMigtr = new ItemMemIDMigrator(); 
    } 

    long retValue = memIdMigtr.toLongID(value); 
    if (null == memIdMigtr.toStringID(retValue)) { 
     try { 
      memIdMigtr.singleInit(value); 
     } catch (TasteException e) { 
      e.printStackTrace(); 
     } 
    } 
    return retValue; 
} 

String getUserIDAsString(long userId) { 
    return memIdMigtr.toStringID(userId); 
} 

そしてAbstractIDMigratorの実装:

public class ItemMemIDMigrator extends AbstractIDMigrator { 

private FastByIDMap<String> longToString; 

public ItemMemIDMigrator() { 
    this.longToString = new FastByIDMap<String>(10000); 
} 

public void storeMapping(long longID, String stringID) { 
    longToString.put(longID, stringID); 
} 

public void singleInit(String stringID) throws TasteException { 
    storeMapping(toLongID(stringID), stringID); 
} 

public String toStringID(long longID) { 
    return longToString.get(longID); 
} 
} 

答えて

0

Mahoutのは、ベースの古い推薦を卑下されますHadoopでCorrelated Cross-Occurrence(CCO)と呼ばれる新しいアルゴリズムに基づいて、より現代的な製品を提供しています。これはSparkを使用して10倍のスピードで構築され、クエリサーバーと組み合わせるとリアルタイムのクエリ結果を提供します。

この方法では、ユーザIDとアイテム-idの文字列を摂取し、あなたはもう、それらを管理する必要はありませんので、同じIDを持つ結果が得られます。あなたは本当に新しいシステムを見て、古いシステムがどれくらい長くサポートされるのかはわかりません。ここ

Mahoutのドキュメント:http://mahout.apache.org/users/algorithms/recommender-overview.html、ここで:SDK、入力記憶して説明http://mahout.apache.org/users/recommender/intro-cooccurrence-spark.html

システム全体、モデルとリアルタイムクエリの訓練は、PIOのためのApache PredictionIOプロジェクトの一部とドキュメントであり、「ここではユニバーサル推薦」と:http://predictionio.incubator.apache.org/とここに:http://actionml.com/docs/ur

+0

ああどのように素晴らしいです!私に知らせてくれてありがとう、間違いなくそれをチェックします。あまりにも私の先生は、次のセッションまで、この部分を特に修正するように教えてくれました。 – CodeIsLife

+0

私たちは新しいコードでやっていることはstring-> int型とINT->文字列のマッピングの双方向のHashMapとして働き2領域マップ(グアバ中のもの)を保持します。これは、元の文字列にMahoutのint型の行と列の序数(あなたが推薦者から入手ID)を変換するために、メモリ内のハッシュマップを維持することができます。 BiMapはIDの数に比例して増加し、データの量ではなく、参照はO(log(n))であるため、スケーリングがよくなります。 – pferrel

+0

これはとてもスマートなアイデアのように聞こえますが、私は好みの値も考慮に入れていますか? – CodeIsLife

関連する問題