Exemplo n.º 1
0
        private ClassType classify(NodeReference node, KnowledgeRule rule)
        {
            if (rule.Path == null)
            {
                //there is no constraint
                return(getKnownClassifications(_knownClassifications.Keys.First()));
            }


            var layer = Knowledge.GetForwardTargets(new[] { node }, rule.Path);

            var isSatisfied = layer.Contains(rule.EndNode);

            if (isSatisfied && rule.YesRule != null)
            {
                return(classify(node, rule.YesRule));
            }

            if (!isSatisfied && rule.NoRule != null)
            {
                return(classify(node, rule.NoRule));
            }

            var classExamples   = isSatisfied ? rule.InitialYesNodes : rule.InitialNoNodes;
            var opositeExamples = isSatisfied ? rule.InitialNoNodes : rule.InitialYesNodes;

            if (!classExamples.Any())
            {
                classExamples = opositeExamples;
            }

            //TODO examples could be missing
            return(getKnownClassifications(classExamples.First()));
        }
Exemplo n.º 2
0
        internal void AddYesBranch(KnowledgeRule knowledgeRule)
        {
            if (YesRule != null)
            {
                throw new NotSupportedException("Cannot set rule branch twice");
            }

            YesRule = knowledgeRule;
        }
Exemplo n.º 3
0
        internal void Retrain()
        {
            var log = new MultiTraceLog(_knownClassifications.Keys, Knowledge);

            Root = createRuleTree(new HashSet <NodeReference>(_knownClassifications.Keys), log);
        }