Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 交互式决策树分类器_Machine Learning_Data Mining_Decision Tree - Fatal编程技术网

Machine learning 交互式决策树分类器

Machine learning 交互式决策树分类器,machine-learning,data-mining,decision-tree,Machine Learning,Data Mining,Decision Tree,有谁能推荐一个决策树分类器实现,可以用Python或Java增量使用 我发现的所有实现都要求您同时向分类器提供所有特性,以便获得分类。然而,在我的应用程序中,我有数百个功能,其中一些功能是需要很长时间才能评估的功能。因为不是树的所有分支都可以使用所有的特征,所以一次给分类器所有的特征是没有意义的。我希望分类器要求特征,一次一个,以使熵最大化并提供最终分类所需的顺序。我相信没有这样的实现,但决策树实现起来非常简单,你自己编写这样的程序应该不会有任何问题。 另一方面,我不认为动态计算功能的想法可以提

有谁能推荐一个决策树分类器实现,可以用Python或Java增量使用


我发现的所有实现都要求您同时向分类器提供所有特性,以便获得分类。然而,在我的应用程序中,我有数百个功能,其中一些功能是需要很长时间才能评估的功能。因为不是树的所有分支都可以使用所有的特征,所以一次给分类器所有的特征是没有意义的。我希望分类器要求特征,一次一个,以使熵最大化并提供最终分类所需的顺序。

我相信没有这样的实现,但决策树实现起来非常简单,你自己编写这样的程序应该不会有任何问题。
另一方面,我不认为动态计算功能的想法可以提高速度,因为即使某些功能用于进行一些以前的拆分,也必须在其余的功能上进行考虑,因此对于许多记录,它将被重新计算多次(尽管这可能会节省内存)。 这在随机森林的情况下是有意义的,在这种情况下,在每个分割上只考虑一个随机的、有限的特征子集——但RF仍然只能用作分类器,它无法构建良好的、人类可解释的决策树

通常,此类包(特别是Weka中的J48树)允许您指定缺少的值来代替特征值,其处理方式与C4.5算法相同:

当我们到达节点时,通过 缺少值的属性,我们 尽可能向下发送实例 按比例加权的分支 正在进行的培训实例数 最后,沿着那些树枝往下走 在叶子上累积结果 节点


当然,您可以采用更积极的方法,并在训练阶段更改树选择要拆分的属性的方式。一种简单的方法是为属性分配权重,并将分割标准(熵、信息增益等)乘以该权重作为惩罚系数,这样“昂贵的属性”就不太可能被选为分割节点。

您在训练时还是在分类时关心这个问题?由于这些时间段是分开的,所以你可以玩一些小把戏来避免对它进行评估,如果是晚一点的话,那就要等到很晚了。在训练期间,你不能玩任何把戏。您必须在培训时提供所有功能。然而,由于这可能发生在程序之外,所以您不必担心计算时间。训练树木是最密集的部分

因此,我建议将所有数据集中起来,对其进行训练,从训练中获取产品,然后在将对象发送到树下时在对象中使用惰性评估。让您的对象实现一些接口来获取值,您可以使用代码对这些值进行惰性计算。如果一个对象从未命中需要昂贵值的节点,则无需对其求值

您昂贵的计算可能不会被选为要拆分的选择,因此您无需在分类时对其进行评估。一旦你训练和修剪你的树,你可能只有3-5个统计相关的特性。然后,您可以使用缓存只优化这些特性,这样分类速度就快了


如果你想进行增量训练,那将是另一个完整的过程,而且有相应的算法。但是,它们没有得到很好的解释,你必须深入研究论文才能得到它们。

所以我要做的就是这样。根据我上一个问题的答案,我想你有如下几点。听起来你想实施类似20个问题的方法

有二十个问题,你有肯定/否定的答案,所以二叉树是最好的。但是,您可以在多个选项中分层,但用户选择一个选项。因此,该算法假设您已经提前训练了树,并且它是从您希望使用的数据集构建的

例如,我们正在尝试进行医疗诊断,因此我们的数据可能如下所示:

Disease Name  Head Ache   Fever  Back Pain  Leg Pain  Blurry Vision  Hearing Loss
Common Cold   Yes         Yes    No         No        No             No
Migraine      Yes         No     No         No        Yes            No
Herpes        No          Yes    No         No        No             No
在本例中,头痛、发烧、背痛、腿痛等是影响因素,疾病名称是目标。每一行都是单个患者的实际诊断,因此一种疾病可以在数据中重复多次

  • 修改漫游算法以从根开始
  • 如果你到达了一片叶子,告诉用户可能的答案
  • 将用于拆分此节点的影响者呈现给用户,并询问“是/否”问题(您是否头痛)
  • 如果用户回答是,则向左走
  • 如果用户回答“否”,则转到右侧
  • 转到步骤2
  • 在叶节点中,您必须找到到达该位置的实际行,以便您可以向用户显示它,说明您可能有以下其中之一:

    头痛 偏头痛 断头

    处方是:诸如此类


    有100万影响者,建立这棵树需要一段时间。如果你想降低这一点,可以使用多值影响者而不是是/否。尽管很难想到100万个是/否的独特问题,即使是针对每种疾病。构建树后,它可以提供您想要的任意多个诊断。

    位于
    具有使用决策树的交互模式。在你需要的意义上,它不是增量的。但是,可以很容易地更改交互操作函数中的代码,以允许您以增量方式查看结果。

    谢谢,我很担心这一点。我目前已经写了一个基本的算法,但它不是最优的,所以我希望可能会有事先的工作。我在分类的时候关心这个问题,因为我想