@Override public Object apply(Number number){ int index = ValueUtil.asInt(number); return this.classes.get(index); } };
static public int[] getShape(CSRMatrix matrix){ Object[] shape = matrix.getShape(); if(shape.length == 1){ return new int[]{ValueUtil.asInt((Number)shape[0])}; } else if(shape.length == 2){ return new int[]{ValueUtil.asInt((Number)shape[0]), ValueUtil.asInt((Number)shape[1])}; } List<? extends Number> values = (List)Arrays.asList(shape); return Ints.toArray(ValueUtil.asIntegers(values)); }
@Override public int getNumberOfFeatures(){ Number nFeatures = (Number)get("n_features_"); if(nFeatures == null){ return -1; } return ValueUtil.asInt(nFeatures); }
@Override public int getP(){ return ValueUtil.asInt((Number)get("p")); }
static private List<String> selectValues(List<String> values, double[] categories, java.util.function.Predicate<String> valueFilter){ if(categories.length == 1){ int index = ValueUtil.asInt(categories[0]); String value = values.get(index); if(valueFilter.test(value)){ return Collections.singletonList(value); } return Collections.emptyList(); } else { List<String> result = new ArrayList<>(categories.length); for(int i = 0; i < categories.length; i++){ int index = ValueUtil.asInt(categories[i]); String value = values.get(index); if(valueFilter.test(value)){ result.add(value); } } return result; } }
public int getNumberOfOutputFeatures(){ return ValueUtil.asInt((Number)get("n_output_features_")); }
@Override public int getP(){ return ValueUtil.asInt((Number)get("p")); }
public int getMaxSamples(){ return ValueUtil.asInt((Number)get("max_samples_")); }
public int getDegree(){ return ValueUtil.asInt((Number)get("degree")); }
public int getNumberOfInputFeatures(){ return ValueUtil.asInt((Number)get("n_input_features_")); }
@Override public Node encode(Node node, Number splitValue, RNumberVector<?> terminalClassCount){ int index = ValueUtil.asInt(splitValue); if(terminalClassCount != null){ throw new IllegalArgumentException(); } node.setScore(levels.getValue(index - 1)); return node; } };
static public <E extends Estimator & HasNeighbors> int getNumberOfNeighbors(E estimator){ Object nNeighbors = ScalarUtil.decode(estimator.get("n_neighbors")); return ValueUtil.asInt((Number)nNeighbors); }
@Override public List<Boolean> getSupportMask(){ Object k = getK(); List<? extends Number> scores = getScores(); if(("all").equals(k)){ return null; } List<Entry<Integer>> entries = new ArrayList<>(); for(int i = 0; i < scores.size(); i++){ Number score = scores.get(i); double doubleScore = score.doubleValue(); if(Double.isNaN(doubleScore)){ doubleScore = -Double.MAX_VALUE; } Entry<Integer> entry = new Entry<>(i, doubleScore); entries.add(entry); } Collections.sort(entries); boolean[] result = new boolean[scores.size()]; for(int i = 0, max = ValueUtil.asInt((Number)k); i < max; i++){ Entry<Integer> entry = entries.get(entries.size() - (i + 1)); result[entry.getId()] = true; } return Booleans.asList(result); }
public RPartConverter(RGenericVector rpart){ super(rpart); RGenericVector control = (RGenericVector)rpart.getValue("control"); RNumberVector<?> useSurrogate = (RNumberVector<?>)control.getValue("usesurrogate"); this.useSurrogate = ValueUtil.asInt(useSurrogate.asScalar()); switch(this.useSurrogate){ case 0: case 1: case 2: break; default: throw new IllegalArgumentException(); } }
@Override public int getNumberOfFeatures(){ // SkLearn 0.18 if(containsKey("n_features")){ return ValueUtil.asInt((Number)get("n_features")); } // SkLearn 0.19+ return super.getNumberOfFeatures(); }
@Override public int getNumberOfFeatures(){ // SkLearn 0.18 if(containsKey("n_features")){ return ValueUtil.asInt((Number)get("n_features")); } // SkLearn 0.19+ return super.getNumberOfFeatures(); }
static public Object parseData(InputStream is, Object descr, Object[] shape) throws IOException { if(descr instanceof DType){ DType dType = (DType)descr; descr = dType.toDescr(); } int length = 1; for(int i = 0; i < shape.length; i++){ length *= ValueUtil.asInt((Number)shape[i]); } // End if if(descr instanceof String){ return parseArray(is, (String)descr, length); } List<Object[]> dims = (List<Object[]>)descr; Map<String, List<?>> result = new LinkedHashMap<>(); List<Object[]> objects = parseMultiArray(is, (List)TupleUtil.extractElementList(dims, 1), length); for(int i = 0; i < dims.size(); i++){ Object[] dim = dims.get(i); result.put((String)dim[0], TupleUtil.extractElementList(objects, i)); } return result; }
private List<TreeModel> encodeForest(RGenericVector forest, MiningFunction miningFunction, ScoreEncoder scoreEncoder, Schema schema){ RNumberVector<?> numTrees = (RNumberVector<?>)forest.getValue("num.trees"); RGenericVector childNodeIDs = (RGenericVector)forest.getValue("child.nodeIDs"); RGenericVector splitVarIDs = (RGenericVector)forest.getValue("split.varIDs"); RGenericVector splitValues = (RGenericVector)forest.getValue("split.values"); RGenericVector terminalClassCounts = (RGenericVector)forest.getValue("terminal.class.counts", true); Schema segmentSchema = schema.toAnonymousSchema(); List<TreeModel> treeModels = new ArrayList<>(); for(int i = 0; i < ValueUtil.asInt(numTrees.asScalar()); i++){ TreeModel treeModel = encodeTreeModel(miningFunction, scoreEncoder, (RGenericVector)childNodeIDs.getValue(i), (RNumberVector<?>)splitVarIDs.getValue(i), (RNumberVector<?>)splitValues.getValue(i), (terminalClassCounts != null ? (RGenericVector)terminalClassCounts.getValue(i) : null), segmentSchema); treeModels.add(treeModel); } return treeModels; }
@Override public void encode(Node node, LeafNode leafNode){ int index = ValueUtil.asInt(leafNode.prediction()); node.setScore(this.categoricalLabel.getValue(index)); ImpurityCalculator impurityCalculator = leafNode.impurityStats(); node.setRecordCount((double)impurityCalculator.count()); double[] stats = impurityCalculator.stats(); for(int i = 0; i < stats.length; i++){ ScoreDistribution scoreDistribution = new ScoreDistribution(this.categoricalLabel.getValue(i), stats[i]); node.addScoreDistributions(scoreDistribution); } } };
@Override public GeneralRegressionModel encodeModel(Schema schema){ RGenericVector mvr = getObject(); RDoubleVector coefficients = (RDoubleVector)mvr.getValue("coefficients"); RDoubleVector xMeans = (RDoubleVector)mvr.getValue("Xmeans"); RDoubleVector yMeans = (RDoubleVector)mvr.getValue("Ymeans"); RNumberVector<?> ncomp = (RNumberVector<?>)mvr.getValue("ncomp"); RStringVector rowNames = coefficients.dimnames(0); RStringVector columnNames = coefficients.dimnames(1); RStringVector compNames = coefficients.dimnames(2); int rows = rowNames.size(); int columns = columnNames.size(); int components = compNames.size(); List<? extends Feature> features = schema.getFeatures(); List<Double> featureCoefficients = FortranMatrixUtil.getColumn(coefficients.getValues(), rows, (columns * components), 0 + (ValueUtil.asInt(ncomp.asScalar()) - 1)); Double intercept = yMeans.getValue(0); for(int j = 0; j < rowNames.size(); j++){ intercept -= (featureCoefficients.get(j) * xMeans.getValue(j)); } GeneralRegressionModel generalRegressionModel = new GeneralRegressionModel(GeneralRegressionModel.ModelType.GENERALIZED_LINEAR, MiningFunction.REGRESSION, ModelUtil.createMiningSchema(schema.getLabel()), null, null, null) .setLinkFunction(GeneralRegressionModel.LinkFunction.IDENTITY); GeneralRegressionModelUtil.encodeRegressionTable(generalRegressionModel, features, featureCoefficients, intercept, null); return generalRegressionModel; }