columnIndex]; if ($this->isContinuous) { return Comparison::compare((string) $recordField, $this->numericValue, $this->operator); } return $recordField == $this->value; } /** * Returns Mean Decrease Impurity (MDI) in the node. * For terminal nodes, this value is equal to 0 */ public function getNodeImpurityDecrease(int $parentRecordCount) : float { if ($this->isTerminal) { return 0.0; } $nodeSampleCount = (float) count($this->records); $iT = $this->giniIndex; if ($this->leftLeaf) { $pL = count($this->leftLeaf->records) / $nodeSampleCount; $iT -= $pL * $this->leftLeaf->giniIndex; } if ($this->rightLeaf) { $pR = count($this->rightLeaf->records) / $nodeSampleCount; $iT -= $pR * $this->rightLeaf->giniIndex; } return $iT * $nodeSampleCount / $parentRecordCount; } /** * Returns HTML representation of the node including children nodes */ public function getHTML($columnNames = null) : string { if ($this->isTerminal) { $value = "$this->classValue"; } else { $value = $this->value; if ($columnNames !== null) { $col = $columnNames[$this->columnIndex]; } else { $col = "col_$this->columnIndex"; } if (!preg_match('/^[<>=]{1,2}/', (string) $value)) { $value = "=$value"; } $value = "$col $value
Gini: ".number_format($this->giniIndex, 2); } $str = ""; if ($this->leftLeaf || $this->rightLeaf) { $str .= ''; if ($this->leftLeaf) { $str .= ''; } else { $str .= ''; } $str .= ''; if ($this->rightLeaf) { $str .= ''; } else { $str .= ''; } $str .= ''; } $str .= '
$value
| Yes
'.$this->leftLeaf->getHTML($columnNames).'
 No |
'.$this->rightLeaf->getHTML($columnNames).'
'; return $str; } /** * HTML representation of the tree without column names */ public function __toString() : string { return $this->getHTML(); } }