Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public function buildTree(array $criteria = [])
- {
- $treeNode = new TreeNode();
- $checkClass = $this->isBelongToOneClass($criteria);
- if ($checkClass['return']) {
- $treeNode->setAttribute($this->targetAttribute);
- $treeNode->addChild('result', $checkClass['class']);
- $treeNode->setIsLeaf(true);
- return $treeNode;
- }
- $splitCriterion = $this->calculateSplitCriterion($criteria);
- $bestAttrName = $this->getBiggestArrayAttribute($splitCriterion);
- $bestAttrValues = $this->getAttributeValues($bestAttrName);
- $treeNode->setAttribute($bestAttrName);
- unset($splitCriterion[$bestAttrName]);
- foreach ($bestAttrValues as $value) {
- $criteria[$bestAttrName] = $value;
- $targetCount = $this->countTargetByCriteria($criteria);
- $treeNode->addClassesCount($value, $targetCount);
- if (array_sum($targetCount) == 0) {
- $targetCount2 = $this->countTargetByCriteria([$bestAttrName => $value]);
- $biggestClass = $this->getBiggestArrayAttribute($targetCount2);
- $child = new TreeNode();
- $child->setParent($treeNode);
- $child->setAttribute($this->targetAttribute);
- $child->addChild('result', $biggestClass);
- $child->setIsLeaf(true);
- $treeNode->addChild($value, $child);
- } elseif (!empty($splitCriterion)) {
- $child = $this->buildTree($criteria);
- $child->setParent($treeNode);
- $treeNode->addChild($value, $child);
- } else {
- $classProb = $this->calculateClassProbability($criteria);
- $biggestClass = $this->getBiggestArrayAttribute($classProb);
- $child = new TreeNode();
- $child->setParent($treeNode);
- $child->setAttribute($this->targetAttribute);
- $child->addChild('result', $biggestClass);
- $child->setIsLeaf(true);
- $treeNode->addChild($value, $child);
- }
- }
- return $treeNode;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement