Example usage for org.apache.commons.math3.linear RealVector cosine

List of usage examples for org.apache.commons.math3.linear RealVector cosine

Introduction

In this page you can find the example usage for org.apache.commons.math3.linear RealVector cosine.

Prototype

public double cosine(RealVector v) throws DimensionMismatchException, MathArithmeticException 

Source Link

Document

Computes the cosine of the angle between this vector and the argument.

Usage

From source file:de.andreasschoknecht.LS3.LSSMCalculator.java

/**
 * Calculate the LSSM matrix containing the final similarity values between the documents, i.e., the models.
 * For calculating the similarity values the Vtk matrix is scaled with the singular value matrix. Afterwards, the cosine similarity
 * transformed on the interval [0,1] is calculated, which represents the similarity value of two documents.
 *//*from  w ww . java  2s . co  m*/
void calculateLSSMMatrix() {
    // scale Vtk with singular value matrix Sk
    RealMatrix scaledVtk = Sk.multiply(Vtk);

    int docsNumber = scaledVtk.getColumnDimension();
    double[][] tmpArray = new double[docsNumber][docsNumber];

    for (int i = 0; i < docsNumber; i++) {
        RealVector documentVector1 = scaledVtk.getColumnVector(i);
        for (int j = i; j < docsNumber; j++) {
            double lssmValue = (documentVector1.cosine(scaledVtk.getColumnVector(j)) + 1) / 2;
            tmpArray[i][j] = round(lssmValue, 2);
            tmpArray[j][i] = round(lssmValue, 2);
        }
    }

    lssmMatrix = new Array2DRowRealMatrix(tmpArray);
}

From source file:org.apache.predictionio.examples.java.recommendations.tutorial1.Algorithm.java

@Override
public Model train(TrainingData data) {
    // pre-process
    Map<Integer, Map<Integer, Float>> itemMap = new HashMap<Integer, Map<Integer, Float>>();
    Map<Integer, Integer> userIndexMap = new HashMap<Integer, Integer>();
    Map<Integer, Integer> itemIndexMap = new HashMap<Integer, Integer>();

    int itemIndex = 0;
    int userIndex = 0;
    for (TrainingData.Rating r : data.ratings) {
        Map<Integer, Float> userRating = itemMap.get(r.iid);
        if (userRating == null) {
            // new item
            userRating = new HashMap<Integer, Float>();
            itemMap.put(r.iid, userRating);
            itemIndexMap.put(r.iid, itemIndex);
            itemIndex += 1; // increment item index for next item
        }/*  w w w . j ava  2  s .  c  om*/
        userRating.put(r.uid, r.rating);

        // update user index
        Integer u = userIndexMap.get(r.uid);
        if (u == null) {
            // new user
            userIndexMap.put(r.uid, userIndex);
            userIndex += 1;
        }
    }

    int numOfItems = itemIndexMap.size();
    int numOfUsers = userIndexMap.size();

    Map<Integer, RealVector> itemVectors = new HashMap<Integer, RealVector>();
    Map<Integer, RealVector> userHistory = new HashMap<Integer, RealVector>();

    for (Map.Entry<Integer, Map<Integer, Float>> entry : itemMap.entrySet()) {
        Integer itemID = entry.getKey();
        Integer iindex = itemIndexMap.get(itemID);
        Map<Integer, Float> userRatingMap = entry.getValue();
        RealVector item = new ArrayRealVector(numOfUsers); // dimension is numOfUsers
        for (Map.Entry<Integer, Float> r : userRatingMap.entrySet()) {
            Integer userID = r.getKey();
            Float rating = r.getValue();
            Integer uindex = userIndexMap.get(userID);
            item.setEntry(uindex, rating);
            // update user History
            RealVector user = userHistory.get(userID);
            if (user == null) {
                user = new OpenMapRealVector(numOfItems);
                userHistory.put(userID, user);
            }
            user.setEntry(iindex, rating);
        }
        itemVectors.put(itemID, item);
    }

    // calculate sim

    Map<Integer, RealVector> itemSimilarity = new HashMap<Integer, RealVector>();
    List<Integer> item1List = new ArrayList<Integer>(itemIndexMap.keySet());
    List<Integer> item2List = new ArrayList<Integer>(item1List);

    int numSimilarItems = 100;
    Comparator<IndexAndScore> comparator = new IndexAndScoreComparator();
    Map<Integer, Queue<IndexAndScore>> topItemSimilarity = new HashMap<Integer, Queue<IndexAndScore>>();

    for (Integer itemID1 : item1List) {
        item2List.remove(0);
        Integer index1 = itemIndexMap.get(itemID1);
        for (Integer itemID2 : item2List) {
            RealVector vector1 = itemVectors.get(itemID1);
            RealVector vector2 = itemVectors.get(itemID2);
            double score = vector1.cosine(vector2);
            if (score > params.threshold) {
                Integer index2 = itemIndexMap.get(itemID2);
                setTopItemSimilarity(topItemSimilarity, itemID1, index2, score, numSimilarItems, comparator);
                setTopItemSimilarity(topItemSimilarity, itemID2, index1, score, numSimilarItems, comparator);
            }
        }
    }

    for (Map.Entry<Integer, Queue<IndexAndScore>> entry : topItemSimilarity.entrySet()) {
        Iterator<IndexAndScore> it = entry.getValue().iterator();
        RealVector vector = new OpenMapRealVector(numOfItems);
        while (it.hasNext()) {
            IndexAndScore d = it.next();
            vector.setEntry(d.index, d.score);
        }
        itemSimilarity.put(entry.getKey(), vector);
    }

    return new Model(itemSimilarity, userHistory);
}

From source file:org.apache.predictionio.examples.java.recommendations.tutorial4.CollaborativeFilteringAlgorithm.java

@Override
public CollaborativeFilteringModel train(PreparedData data) {
    // pre-process
    Map<Integer, Map<Integer, Float>> itemMap = new HashMap<Integer, Map<Integer, Float>>();
    Map<Integer, Integer> userIndexMap = new HashMap<Integer, Integer>();
    Map<Integer, Integer> itemIndexMap = new HashMap<Integer, Integer>();

    int itemIndex = 0;
    int userIndex = 0;
    for (TrainingData.Rating r : data.ratings) {
        Map<Integer, Float> userRating = itemMap.get(r.iid);
        if (userRating == null) {
            // new item
            userRating = new HashMap<Integer, Float>();
            itemMap.put(r.iid, userRating);
            itemIndexMap.put(r.iid, itemIndex);
            itemIndex += 1; // increment item index for next item
        }/* www. j  av  a 2  s  .  co m*/
        userRating.put(r.uid, r.rating);

        // update user index
        Integer u = userIndexMap.get(r.uid);
        if (u == null) {
            // new user
            userIndexMap.put(r.uid, userIndex);
            userIndex += 1;
        }
    }

    int numOfItems = itemIndexMap.size();
    int numOfUsers = userIndexMap.size();

    Map<Integer, RealVector> itemVectors = new HashMap<Integer, RealVector>();
    Map<Integer, RealVector> userHistory = new HashMap<Integer, RealVector>();

    for (Map.Entry<Integer, Map<Integer, Float>> entry : itemMap.entrySet()) {
        Integer itemID = entry.getKey();
        Integer iindex = itemIndexMap.get(itemID);
        Map<Integer, Float> userRatingMap = entry.getValue();
        RealVector item = new ArrayRealVector(numOfUsers); // dimension is numOfUsers
        for (Map.Entry<Integer, Float> r : userRatingMap.entrySet()) {
            Integer userID = r.getKey();
            Float rating = r.getValue();
            Integer uindex = userIndexMap.get(userID);
            item.setEntry(uindex, rating);
            // update user History
            RealVector user = userHistory.get(userID);
            if (user == null) {
                user = new OpenMapRealVector(numOfItems);
                userHistory.put(userID, user);
            }
            user.setEntry(iindex, rating);
        }
        itemVectors.put(itemID, item);
    }

    // calculate sim

    Map<Integer, RealVector> itemSimilarity = new HashMap<Integer, RealVector>();
    List<Integer> item1List = new ArrayList<Integer>(itemIndexMap.keySet());
    List<Integer> item2List = new ArrayList<Integer>(item1List);

    int numSimilarItems = 100;
    Comparator<IndexAndScore> comparator = new IndexAndScoreComparator();
    Map<Integer, Queue<IndexAndScore>> topItemSimilarity = new HashMap<Integer, Queue<IndexAndScore>>();

    for (Integer itemID1 : item1List) {
        item2List.remove(0);
        Integer index1 = itemIndexMap.get(itemID1);
        for (Integer itemID2 : item2List) {
            RealVector vector1 = itemVectors.get(itemID1);
            RealVector vector2 = itemVectors.get(itemID2);
            double score = vector1.cosine(vector2);
            if (score > params.threshold) {
                Integer index2 = itemIndexMap.get(itemID2);
                setTopItemSimilarity(topItemSimilarity, itemID1, index2, score, numSimilarItems, comparator);
                setTopItemSimilarity(topItemSimilarity, itemID2, index1, score, numSimilarItems, comparator);
            }
        }
    }

    for (Map.Entry<Integer, Queue<IndexAndScore>> entry : topItemSimilarity.entrySet()) {
        Iterator<IndexAndScore> it = entry.getValue().iterator();
        RealVector vector = new OpenMapRealVector(numOfItems);
        while (it.hasNext()) {
            IndexAndScore d = it.next();
            vector.setEntry(d.index, d.score);
        }
        itemSimilarity.put(entry.getKey(), vector);
    }

    return new CollaborativeFilteringModel(itemSimilarity, userHistory);
}

From source file:org.lambda3.indra.core.function.AbsoluteCosineRelatednessFunction.java

@Override
public double sim(RealVector r1, RealVector r2, boolean sparse) {
    return Math.abs(r1.cosine(r2));
}

From source file:org.lambda3.indra.core.function.CosineRelatednessFunction.java

@Override
public double sim(RealVector r1, RealVector r2, boolean sparse) {
    return r1.cosine(r2);
}

From source file:org.lambda3.indra.core.impl.CosineClient.java

@Override
protected double sim(RealVector r1, RealVector r2, boolean sparse) {
    return r1.cosine(r2);
}