如何使用 php 获取所有可能的决策树

Posted

技术标签:

【中文标题】如何使用 php 获取所有可能的决策树【英文标题】:How to get all possible decision trees with php 【发布时间】:2013-12-01 09:34:33 【问题描述】:

我正在寻找使用 php 构建所有可能的决策树。我正在寻找的内容与this answer 完全相同,但是,我需要在 php 中使用它,而且我在解释 LINQ 时遇到了困难;而stringbuilder 可能需要是一个数组。

【问题讨论】:

【参考方案1】:

这是一个 PHP 版本,它返回由数组组成的树集合。

function AllBinaryTrees($size = 0)

  // empty tree, size=0
  if ($size === 0)  return array(null); 

  // otherwise take 1 from the size for the root of the current subtree and
  // split the rest over the subtrees in every possible way
  $trees = array();
  $size --;

  for ($leftsize=0; $leftsize <= $size; $leftsize ++)
  
     foreach(AllBinaryTrees($leftsize) as $left)
       foreach(AllBinaryTrees($size-$leftsize) as $right)
       
          // add the new tree to the collection
          $trees[] = array('left' => $left, 'right' => $right);
       
  
  return $trees;

请注意,这不是最有效的方法,因为我们一次又一次地生成给定大小的子树,因此缓存它们会更好。 我们可以将此函数包装在一个类中,该类为每个大小的树保存一个缓存。

【讨论】:

【参考方案2】:

这是带有记忆的算法:

function AllBinaryTrees($size)

    static $cache = [];

    if ($size <= 0) 
        return [null];
    

    if (isset($cache[$size])) 
        return $cache[$size];
    

    $trees = [];

    foreach (range(0, $size - 1) as $i) 
       foreach (AllBinaryTrees($i) as $left) 
           foreach(AllBinaryTrees($size - 1 - $i) as $right) 
               $trees[] = ['left' => $left, 'right' => $right];
           
       
    

    return $cache[$size] = $trees;

【讨论】:

以上是关于如何使用 php 获取所有可能的决策树的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 weka 实现决策树?

如何在 pyspark 中可视化决策树模型/对象?

如何在 Weka 构建的决策树中找到特征重要性

使用 sklearn,我如何找到决策树的深度?

如何使用交叉验证方法制作决策树?

如何使用决策树中的 feature_importances_ 删除所有非零重要特征?