Search in sources :

Example 26 with Node

use of org.dmg.pmml.tree.Node in project jpmml-sparkml by jpmml.

the class TreeModelCompactor method isCategoricalField.

private boolean isCategoricalField(FieldName name) {
    Deque<PMMLObject> parents = getParents();
    for (PMMLObject parent : parents) {
        if (parent instanceof Node) {
            Node node = (Node) parent;
            Predicate predicate = node.getPredicate();
            if (predicate instanceof SimpleSetPredicate) {
                SimpleSetPredicate simpleSetPredicate = (SimpleSetPredicate) predicate;
                FieldName categoricalField = simpleSetPredicate.getField();
                if ((name).equals(categoricalField)) {
                    return true;
                }
            } else if (predicate instanceof True) {
                True truePredicate = (True) predicate;
                FieldName categoricalField = this.categoricalFields.get(truePredicate);
                if ((name).equals(categoricalField)) {
                    return true;
                }
            }
        } else {
            return false;
        }
    }
    return false;
}
Also used : Node(org.dmg.pmml.tree.Node) PMMLObject(org.dmg.pmml.PMMLObject) True(org.dmg.pmml.True) FieldName(org.dmg.pmml.FieldName) Predicate(org.dmg.pmml.Predicate) SimplePredicate(org.dmg.pmml.SimplePredicate) SimpleSetPredicate(org.dmg.pmml.SimpleSetPredicate) SimpleSetPredicate(org.dmg.pmml.SimpleSetPredicate)

Example 27 with Node

use of org.dmg.pmml.tree.Node in project drools by kiegroup.

the class KiePMMLNodeFactory method populatedNestedNodes.

/**
 * Recursively populate the <code>JavaParserDTO.nodeTemplate</code> with methods generated by
 * <b>nested</b> <code>Node</code>s.
 *
 * It also dump generated sources when <code>JavaParserDTO.limitReach() == true</code>,
 * actually starting creation of a new class.
 *
 * @param toPopulate
 * @param sourcesMap
 * @param fields
 * @param nodeNamesDTO
 */
static void populatedNestedNodes(final JavaParserDTO toPopulate, final Map<String, String> sourcesMap, final List<Field<?>> fields, final NodeNamesDTO nodeNamesDTO) {
    final Node node = nodeNamesDTO.node;
    if (node.hasNodes()) {
        for (Node nestedNode : node.getNodes()) {
            final NodeNamesDTO nestedNodeNamesDTO = new NodeNamesDTO(nestedNode, nodeNamesDTO.getNestedNodeClassName(nestedNode), nodeNamesDTO.nodeClassName, nodeNamesDTO.missingValuePenalty);
            if (toPopulate.limitReach()) {
                // start creating new node
                // 1) dump generated class source
                sourcesMap.put(toPopulate.fullNodeClassName, toPopulate.getSource());
                // 2) start creation of new node
                final JavaParserDTO javaParserDTO = new JavaParserDTO(nestedNodeNamesDTO, toPopulate.packageName);
                populateJavaParserDTOAndSourcesMap(javaParserDTO, sourcesMap, nestedNodeNamesDTO, fields, true);
            } else {
                // Set 'evaluateNode'
                populateEvaluateNode(toPopulate, nestedNodeNamesDTO, fields, false);
                mergeNode(toPopulate, nestedNodeNamesDTO);
                populatedNestedNodes(toPopulate, sourcesMap, fields, nestedNodeNamesDTO);
            }
        }
    }
}
Also used : Node(org.dmg.pmml.tree.Node) KiePMMLNode(org.kie.pmml.models.tree.model.KiePMMLNode)

Example 28 with Node

use of org.dmg.pmml.tree.Node in project drools by kiegroup.

the class KiePMMLNodeFactoryTest method mergeNodeReferences.

@Test
public void mergeNodeReferences() {
    KiePMMLNodeFactory.NodeNamesDTO nodeNamesDTO = new KiePMMLNodeFactory.NodeNamesDTO(nodeRoot, createNodeClassName(), null, 1.0);
    KiePMMLNodeFactory.JavaParserDTO toPopulate = new KiePMMLNodeFactory.JavaParserDTO(nodeNamesDTO, PACKAGE_NAME);
    Node nestedNode = nodeRoot.getNodes().get(0);
    // Creating evaluateNodeInitializer
    String nestedNodeClassName = nodeNamesDTO.childrenNodes.get(nestedNode);
    String fullNestedNodeClassName = String.format(PACKAGE_CLASS_TEMPLATE, PACKAGE_NAME, nestedNodeClassName);
    final NodeList<Expression> methodReferenceExprs = NodeList.nodeList(KiePMMLNodeFactory.getEvaluateNodeMethodReference(fullNestedNodeClassName));
    MethodReferenceExpr evaluateNodeReference = new MethodReferenceExpr();
    evaluateNodeReference.setScope(new NameExpr(fullNestedNodeClassName));
    evaluateNodeReference.setIdentifier(EVALUATE_NODE);
    MethodCallExpr evaluateNodeInitializer = new MethodCallExpr();
    evaluateNodeInitializer.setScope(new TypeExpr(parseClassOrInterfaceType(Arrays.class.getName())));
    evaluateNodeInitializer.setName(AS_LIST);
    evaluateNodeInitializer.setArguments(methodReferenceExprs);
    // 
    KiePMMLNodeFactory.NodeNamesDTO nestedNodeNamesDTO = new KiePMMLNodeFactory.NodeNamesDTO(nestedNode, nodeNamesDTO.getNestedNodeClassName(nestedNode), nodeNamesDTO.nodeClassName, nodeNamesDTO.missingValuePenalty);
    KiePMMLNodeFactory.mergeNodeReferences(toPopulate, nestedNodeNamesDTO, evaluateNodeInitializer);
    MethodReferenceExpr retrieved = evaluateNodeInitializer.getArguments().get(0).asMethodReferenceExpr();
    String expected = toPopulate.nodeClassName;
    assertEquals(expected, retrieved.getScope().asNameExpr().toString());
    expected = EVALUATE_NODE + nestedNodeClassName;
    assertEquals(expected, retrieved.getIdentifier());
}
Also used : Node(org.dmg.pmml.tree.Node) KiePMMLNode(org.kie.pmml.models.tree.model.KiePMMLNode) NameExpr(com.github.javaparser.ast.expr.NameExpr) MethodReferenceExpr(com.github.javaparser.ast.expr.MethodReferenceExpr) TypeExpr(com.github.javaparser.ast.expr.TypeExpr) Expression(com.github.javaparser.ast.expr.Expression) Arrays(java.util.Arrays) MethodCallExpr(com.github.javaparser.ast.expr.MethodCallExpr) Test(org.junit.Test)

Example 29 with Node

use of org.dmg.pmml.tree.Node in project drools by kiegroup.

the class KiePMMLTreeModelNodeASTFactoryTest method declareRulesFromRootIrisNode.

@Test
public void declareRulesFromRootIrisNode() {
    Node rootNode = irisModel.getNode();
    assertEquals("setosa", rootNode.getScore());
    final Map<String, KiePMMLOriginalTypeGeneratedType> fieldTypeMap = new HashMap<>();
    final List<Field<?>> fields = getFieldsFromDataDictionary(irisPmml.getDataDictionary());
    DATA_TYPE targetType = getTargetFieldType(fields, irisModel);
    KiePMMLDataDictionaryASTFactory.factory(fieldTypeMap).declareTypes(fields);
    KiePMMLTreeModelNodeASTFactory.factory(fieldTypeMap, Collections.emptyList(), TreeModel.NoTrueChildStrategy.RETURN_NULL_PREDICTION, targetType).declareRulesFromRootNode(rootNode, "_setosa");
    assertFalse(fieldTypeMap.isEmpty());
}
Also used : Field(org.dmg.pmml.Field) HashMap(java.util.HashMap) LeafNode(org.dmg.pmml.tree.LeafNode) Node(org.dmg.pmml.tree.Node) ClassifierNode(org.dmg.pmml.tree.ClassifierNode) DATA_TYPE(org.kie.pmml.api.enums.DATA_TYPE) KiePMMLOriginalTypeGeneratedType(org.kie.pmml.models.drools.tuples.KiePMMLOriginalTypeGeneratedType) Test(org.junit.Test)

Example 30 with Node

use of org.dmg.pmml.tree.Node in project drools by kiegroup.

the class KiePMMLTreeModelNodeASTFactoryTest method isFinalLeaf.

@Test
public void isFinalLeaf() {
    Node node = new LeafNode();
    DATA_TYPE targetType = DATA_TYPE.STRING;
    KiePMMLTreeModelNodeASTFactory.factory(new HashMap<>(), Collections.emptyList(), TreeModel.NoTrueChildStrategy.RETURN_NULL_PREDICTION, targetType).isFinalLeaf(node);
    assertTrue(KiePMMLTreeModelNodeASTFactory.factory(new HashMap<>(), Collections.emptyList(), TreeModel.NoTrueChildStrategy.RETURN_NULL_PREDICTION, targetType).isFinalLeaf(node));
    node = new ClassifierNode();
    assertTrue(KiePMMLTreeModelNodeASTFactory.factory(new HashMap<>(), Collections.emptyList(), TreeModel.NoTrueChildStrategy.RETURN_NULL_PREDICTION, targetType).isFinalLeaf(node));
    node.addNodes(new LeafNode());
    assertFalse(KiePMMLTreeModelNodeASTFactory.factory(new HashMap<>(), Collections.emptyList(), TreeModel.NoTrueChildStrategy.RETURN_NULL_PREDICTION, targetType).isFinalLeaf(node));
}
Also used : HashMap(java.util.HashMap) LeafNode(org.dmg.pmml.tree.LeafNode) Node(org.dmg.pmml.tree.Node) ClassifierNode(org.dmg.pmml.tree.ClassifierNode) LeafNode(org.dmg.pmml.tree.LeafNode) ClassifierNode(org.dmg.pmml.tree.ClassifierNode) DATA_TYPE(org.kie.pmml.api.enums.DATA_TYPE) Test(org.junit.Test)

Aggregations

Node (org.dmg.pmml.tree.Node)40 LeafNode (org.dmg.pmml.tree.LeafNode)20 Predicate (org.dmg.pmml.Predicate)18 SimplePredicate (org.dmg.pmml.SimplePredicate)18 ClassifierNode (org.dmg.pmml.tree.ClassifierNode)17 BranchNode (org.dmg.pmml.tree.BranchNode)15 TreeModel (org.dmg.pmml.tree.TreeModel)12 ContinuousFeature (org.jpmml.converter.ContinuousFeature)12 CategoricalFeature (org.jpmml.converter.CategoricalFeature)11 Feature (org.jpmml.converter.Feature)11 ArrayList (java.util.ArrayList)8 List (java.util.List)7 CategoryManager (org.jpmml.converter.CategoryManager)6 Test (org.junit.Test)6 HashMap (java.util.HashMap)5 SimpleSetPredicate (org.dmg.pmml.SimpleSetPredicate)5 True (org.dmg.pmml.True)5 CategoricalLabel (org.jpmml.converter.CategoricalLabel)5 DATA_TYPE (org.kie.pmml.api.enums.DATA_TYPE)5 Field (org.dmg.pmml.Field)4