List of usage examples for org.apache.commons.math3.linear RealVector cosine
public double cosine(RealVector v) throws DimensionMismatchException, MathArithmeticException
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); }