Mahout (1) - LogLikelihood -

2011-04-30T00:00:00+00:00 Java Mahout

※前ブログネタ帳からのほぼ転用

対数尤度を用いたユーザー間のベクトル相関性?を算出する物的な事で良いんだろうか

ユーザー,アイテム,スコア

のような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

Mahout (2) - ItemBasedRecommender - 壊れかけたハードディスクからデータを抽出する