private static Map<String, double[]> parseVectorDictionary( SupportVectorMachineModel supportVectorMachineModel) { VectorDictionary vectorDictionary = supportVectorMachineModel.getVectorDictionary(); VectorFields vectorFields = vectorDictionary.getVectorFields(); List<FieldRef> fieldRefs = vectorFields.getFieldRefs(); Map<String, double[]> result = new LinkedHashMap<>(); List<VectorInstance> vectorInstances = vectorDictionary.getVectorInstances(); for (VectorInstance vectorInstance : vectorInstances) { String id = vectorInstance.getId(); if (id == null) { throw new InvalidFeatureException(vectorInstance); } Array array = vectorInstance.getArray(); RealSparseArray sparseArray = vectorInstance.getREALSparseArray(); List<? extends Number> values; if (array != null && sparseArray == null) { values = ArrayUtil.asNumberList(array); } else if (array == null && sparseArray != null) { values = SparseArrayUtil.asNumberList(sparseArray); } else { throw new InvalidFeatureException(vectorInstance); } // End if if (fieldRefs.size() != values.size()) { throw new InvalidFeatureException(vectorInstance); } double[] vector = Doubles.toArray(values); result.put(id, vector); } return result; }
private double[] createInput(EvaluationContext context) { SupportVectorMachineModel supportVectorMachineModel = getModel(); VectorDictionary vectorDictionary = supportVectorMachineModel.getVectorDictionary(); VectorFields vectorFields = vectorDictionary.getVectorFields(); List<FieldRef> fieldRefs = vectorFields.getFieldRefs(); double[] result = new double[fieldRefs.size()]; for (int i = 0; i < fieldRefs.size(); i++) { FieldRef fieldRef = fieldRefs.get(i); FieldValue value = ExpressionUtil.evaluate(fieldRef, context); if (value == null) { throw new MissingValueException(fieldRef.getField(), vectorFields); } result[i] = (value.asNumber()).doubleValue(); } return result; }