Mahout (1) - LogLikelihood -
※前ブログネタ帳からのほぼ転用
対数尤度を用いたユーザー間のベクトル相関性?を算出する物的な事で良いんだろうか
ユーザー,アイテム,スコア
のようなCSV表記を用いたデータを利用する。例えばユーザーが1でそれ以外のユーザーとの相関性?(ピアソンとかじゃないので表現が微妙ですが)を出すには
import java.io.File;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
public class Client {
private static final long ID = 1;
public static void main(String[] args) throws Exception {
File file = new File(Client.class.getResource("data.csv").getFile());
DataModel model = new FileDataModel(file);
UserSimilarity similar = new LogLikelihoodSimilarity(model);
LongPrimitiveIterator targets = model.getUserIDs();
while(targets.hasNext()) {
long target = targets.next();
// 自信を比較しない
if(target == ID)
continue;
Double distance = similar.userSimilarity(ID, target);
if (distance.isNaN())
distance = 0.0;
System.out.println(String.format("%d: %d -> %s", ID, target, distance));
}
}
}
んまぁアイテムベースなRecommenderとかで出力するのは良く見るけど、あくまでユーザー間の相関性を出すのが目的なので(ry