getHTML(); } public function evaluate(array $record): bool { $recordField = $record[$this->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 !== null) { $pL = count($this->leftLeaf->records) / $nodeSampleCount; $iT -= $pL * $this->leftLeaf->giniIndex; } if ($this->rightLeaf !== null) { $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(?array $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 ((bool) preg_match('/^[<>=]{1,2}/', (string) $value) === false) { $value = "={$value}"; } $value = "{$col} {$value}
Gini: ".number_format($this->giniIndex, 2); } $str = ""; if ($this->leftLeaf !== null || $this->rightLeaf !== null) { $str .= ''; if ($this->leftLeaf !== null) { $str .= ''; } else { $str .= ''; } $str .= ''; if ($this->rightLeaf !== null) { $str .= ''; } else { $str .= ''; } $str .= ''; } $str .= '
{$value}
| Yes
'.$this->leftLeaf->getHTML($columnNames).'
 No |
'.$this->rightLeaf->getHTML($columnNames).'
'; return $str; } }