List of usage examples for org.apache.commons.math3.linear RealVector getEntry
public abstract double getEntry(int index) throws OutOfRangeException;
From source file:org.grouplens.samantha.modeler.featurizer.PercentileModel.java
public double getPercentileByBuildingTreeMap(int idx, double value) { while (treeMaps.size() <= idx) { treeMaps.add(null);/* w ww . j a v a2 s. com*/ } TreeMap<Double, Double> treeMap = new TreeMap<>(); RealVector values = getIndexVector(idx); int numValues = (int) values.getEntry(0); for (int i = 1; i < numValues * 2; i += 2) { treeMap.put(values.getEntry(i), values.getEntry(i + 1)); } treeMaps.set(idx, treeMap); return getPercentileFromTreeMap(treeMap, value); }
From source file:org.grouplens.samantha.modeler.featurizer.SVDFeatureFactorExtractor.java
public Map<String, List<Feature>> extract(JsonNode entity, boolean update, IndexSpace indexSpace) { int dim = model.getVectorVarDimensionByName(SVDFeatureKey.FACTORS.get()); Map<String, List<Feature>> svdFeaMap = model.getFeatureMap(entity, false); Map<String, List<Feature>> feaMap = new HashMap<>(); for (Map.Entry<String, List<String>> entry : fea2svdfeas.entrySet()) { RealVector vector = MatrixUtils.createRealVector(new double[dim]); List<String> svdfeas = entry.getValue(); boolean hit = false; for (String svdfea : svdfeas) { if (svdFeaMap.containsKey(svdfea)) { List<Feature> features = svdFeaMap.get(svdfea); for (Feature feature : features) { vector.combineToSelf(1.0, feature.getValue(), model.getVectorVarByNameIndex(SVDFeatureKey.FACTORS.get(), feature.getIndex())); }//from w w w. j ava 2s .c o m hit = true; } } if (hit == false && sparse) { continue; } String feaName = entry.getKey(); List<Feature> features = new ArrayList<>(); for (int i = 0; i < dim; i++) { String key = FeatureExtractorUtilities.composeKey(feaName, Integer.valueOf(i).toString()); FeatureExtractorUtilities.getOrSetIndexSpaceToFeaturize(features, update, indexSpace, indexName, key, vector.getEntry(i)); } feaMap.put(feaName, features); } return feaMap; }
From source file:org.grouplens.samantha.modeler.knn.KnnModelFeatureTrigger.java
private void getNeighbors(Object2DoubleMap<String> item2score, FeatureKnnModel knnModel, String key, double weight) { if (knnModel.hasKey(key)) { RealVector sims = knnModel.getKeyVector(key); for (int i = 0; i < sims.getDimension(); i += 2) { int idx = (int) sims.getEntry(i); double sim = sims.getEntry(i + 1); String recItem = knnModel.getKeyByIndex(idx); double oldVal = item2score.getOrDefault(recItem, 0.0); item2score.put(recItem, weight * sim + oldVal); }/*ww w . j av a 2 s. c o m*/ } }
From source file:org.grouplens.samantha.modeler.knn.KnnModelFeatureTrigger.java
private void getNeighbors(ObjectSet<String> items, FeatureKnnModel knnModel, String key) { if (knnModel.hasKey(key)) { RealVector sims = knnModel.getKeyVector(key); for (int i = 0; i < sims.getDimension(); i += 2) { int idx = (int) sims.getEntry(i); String recItem = knnModel.getKeyByIndex(idx); items.add(recItem);/*from ww w. j a v a2 s . com*/ } } }
From source file:org.grouplens.samantha.modeler.reinforce.LinearUCB.java
public List<StochasticOracle> getStochasticOracle(List<LearningInstance> instances) { List<StochasticOracle> oracles = new ArrayList<>(instances.size()); for (LearningInstance ins : instances) { StochasticOracle orc = new StochasticOracle(); StandardLearningInstance instance = (StandardLearningInstance) ins; orc.setValues(-instance.getLabel(), instance.getLabel(), instance.getWeight()); int dim = features.size(); RealVector x = extractDenseVector(dim, ins); RealMatrix increA = x.outerProduct(x); RealVector increB = x.mapMultiplyToSelf(instance.getLabel()); for (int i = 0; i < dim; i++) { orc.addScalarOracle(LinearUCBKey.B.get(), i, -increB.getEntry(i)); orc.addVectorOracle(LinearUCBKey.A.get(), i, increA.getRowVector(i).mapMultiplyToSelf(-1.0)); }//from w ww. j ava2 s .c o m oracles.add(orc); } return oracles; }
From source file:org.grouplens.samantha.modeler.solver.ProximalGradientMethod.java
protected double update(LearningModel model, LearningData learningData) { VariableSpace variableSpace = new SynchronizedVariableSpace(); variableSpace.setSpaceState(Long.valueOf(System.currentTimeMillis()).toString(), SpaceMode.BUILDING); List<String> allScalarVarNames = model.getAllScalarVarNames(); for (String name : allScalarVarNames) { variableSpace.requestScalarVar(name, 0, 0.0, false); }/*w w w .j av a2 s . c o m*/ List<String> allVectorVarNames = model.getAllVectorVarNames(); for (String name : allVectorVarNames) { int dim = model.getVectorVarDimensionByName(name); variableSpace.requestVectorVar(name, 0, dim, 0.0, false, false); } double objVal = 0.0; List<LearningInstance> instances; ObjectiveFunction objective = model.getObjectiveFunction(); learningData.startNewIteration(); while ((instances = learningData.getLearningInstance()).size() > 0) { List<StochasticOracle> oracles = model.getStochasticOracle(instances); oracles = objective.wrapOracle(oracles); for (StochasticOracle oracle : oracles) { objVal += oracle.getObjectiveValue(); for (int i = 0; i < oracle.scalarNames.size(); i++) { String name = oracle.scalarNames.get(i); int idx = oracle.scalarIndexes.getInt(i); double grad = oracle.scalarGrads.getDouble(i); variableSpace.ensureScalarVar(name, idx + 1, 0.0, false); variableSpace.setScalarVarByNameIndex(name, idx, variableSpace.getScalarVarByNameIndex(name, idx) + grad); } for (int i = 0; i < oracle.vectorNames.size(); i++) { String name = oracle.vectorNames.get(i); int idx = oracle.vectorIndexes.getInt(i); RealVector grad = oracle.vectorGrads.get(i); variableSpace.ensureVectorVar(name, idx + 1, grad.getDimension(), 0.0, false, false); variableSpace.setVectorVarByNameIndex(name, idx, grad.combineToSelf(1.0, 1.0, variableSpace.getVectorVarByNameIndex(name, idx))); } } } for (String name : allScalarVarNames) { for (int i = 0; i < variableSpace.getScalarVarSizeByName(name); i++) { double eta = variableSpace.getScalarVarByNameIndex(name, i) - model.getScalarVarByNameIndex(name, i) * ro; double value = 0.0; if (eta > l1coef) { value = (l1coef - eta) / (l2coef + ro); } else if (eta < -l1coef) { value = (-eta - l1coef) / (l2coef + ro); } model.setScalarVarByNameIndex(name, i, value); } } for (String name : allVectorVarNames) { int dim = variableSpace.getVectorVarDimensionByName(name); for (int i = 0; i < variableSpace.getVectorVarSizeByName(name); i++) { RealVector etas = variableSpace.getVectorVarByNameIndex(name, i).combineToSelf(1.0, -ro, model.getVectorVarByNameIndex(name, i)); RealVector value = MatrixUtils.createRealVector(new double[dim]); for (int j = 0; j < dim; j++) { double eta = etas.getEntry(j); if (eta > l1coef) { value.setEntry(j, (l1coef - eta) / (l2coef + ro)); } else if (eta < -l1coef) { value.setEntry(j, (-eta - l1coef) / (l2coef + ro)); } } model.setVectorVarByNameIndex(name, i, value); } } return objVal; }
From source file:org.grouplens.samantha.modeler.space.SynchronizedVariableSpace.java
private void setDoubleList(DoubleList doubleList, RealVector vars) { int size = doubleList.size(); for (int i = 0; i < size; i++) { doubleList.set(i, vars.getEntry(i)); }/*from w w w. j a v a 2 s . c om*/ }
From source file:org.grouplens.samantha.modeler.svdfeature.SVDFeature.java
private String realVectorToString(RealVector vec) { String[] arr = new String[vec.getDimension()]; for (int i = 0; i < vec.getDimension(); i++) { arr[i] = Double.valueOf(vec.getEntry(i)).toString(); }/*from ww w. j av a 2 s . com*/ return StringUtils.join(arr, "\t"); }
From source file:org.grouplens.samantha.modeler.svdfeature.SVDFeature.java
public void dump(File modelFile) { try {//from w w w .j a va 2 s. c o m BufferedWriter writer = new BufferedWriter(new FileWriter(modelFile)); RealVector biases = variableSpace.getScalarVarByName(SVDFeatureKey.BIASES.get()); writer.write(Double.valueOf(biases.getEntry(0)).toString() + "\n"); String biasLine = realVectorToString(biases.getSubVector(1, biases.getDimension() - 1)); writer.write(biasLine + "\n"); List<RealVector> factors = variableSpace.getVectorVarByName(SVDFeatureKey.FACTORS.get()); for (int i = 0; i < factors.size(); i++) { String factLine = realVectorToString(factors.get(i)); writer.write(factLine + "\n"); } writer.close(); } catch (IOException e) { logger.error(e.getMessage()); throw new BadRequestException(e); } }
From source file:org.grouplens.samantha.modeler.tree.RegressionTree.java
public double predict(LearningInstance instance) { if (variableSpace.getVectorVarSizeByName(treeName) > 0) { StandardLearningInstance ins = (StandardLearningInstance) instance; int node = 0; do {/*from w w w . ja v a 2 s . c o m*/ RealVector nodeVec = variableSpace.getVectorVarByNameIndex(treeName, node); int splitIdx = (int) nodeVec.getEntry(0); if (splitIdx == -1) { return nodeVec.getEntry(4); } double splitVal = nodeVec.getEntry(1); double feaVal = 0.0; if (ins.getFeatures().containsKey(splitIdx)) { feaVal = ins.getFeatures().get(splitIdx); } if (feaVal <= splitVal) { node = (int) nodeVec.getEntry(2); } else { node = (int) nodeVec.getEntry(3); } if (node == -1) { return nodeVec.getEntry(4); } } while (node != -1); } return 0.0; }