示例#1
0
 /**
  * @param $data
  * @param $base_key
  * @param $base_value
  * @param $split_key
  * @param $split_value
  * @return DecisionTreeData
  */
 private function makeDecisionTreeData($data, $base_key, $base_value, $split_key, $split_value)
 {
     $decisionTreeData = new DecisionTreeData();
     $decisionTreeData->number = count($data);
     $decisionTreeData->split_key = $split_key;
     $decisionTreeData->split_value = $split_value;
     $split_array = ArrayService::split_by_key($data, $base_key);
     $decisionTreeData->match = isset($split_array[$base_value]) ? count($split_array[$base_value]) : 0;
     $decisionTreeData->unmatch = $decisionTreeData->number - $decisionTreeData->match;
     return $decisionTreeData;
 }
示例#2
0
 /**
  * @param $samples
  * @param $attr
  * @return int
  */
 private function get_information_gain($samples, $attr)
 {
     $gain_reduction = 0;
     $total_count = count($samples);
     $possible_values_count = ArrayService::count_values($samples, $attr);
     foreach ($possible_values_count as $value => $count) {
         $e = $this->calculate_entropy($samples, $attr, $value);
         $gain_reduction += $count * $e / $total_count;
     }
     $e = $this->calculate_entropy($samples);
     $ret = $e - $gain_reduction;
     return $ret;
 }