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

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

Introduction

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

Prototype

public abstract double getEntry(int index) throws OutOfRangeException;

Source Link

Document

Return the entry at the specified index.

Usage

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;
}