标签: decision-tree

决策树和规则引擎(Drools)

在我正在进行的应用程序中,我需要定期检查成千上万个对象的资格,以获得某种服务.决策图本身采用以下形式,只是更大:决策图

在每个端节点(圆圈)中,我需要运行一个动作(更改对象的字段,日志信息等).我尝试使用Drool Expert框架,但在这种情况下,我需要为图中的每个路径编写一条长规则,从而导致结束节点.Drools Flow似乎也没有为这样的用例构建 - 我拿一个对象,然后,根据一路上的决定,我最终进入一个终端节点; 然后又为另一个对象.或者是吗?你能给我一些这些解决方案的例子/链接吗?

更新:

Drools Flow调用可能如下所示:

// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Map<String, Object> params = new HashMap<String, Object>();

for(int i = 0; i < 10000; i++) {

    Application app = somehowGetAppById(i);

    // insert app into working memory
    FactHandle appHandle = ksession.insert(app);

    // app variable for action nodes
    params.put("app", app);

    // start a new process instance
    ProcessInstance instance = ksession.startProcess("com.sample.ruleflow", params);
    while(true) {
        if(instance.getState() == instance.STATE_COMPLETED) {
            break; …
Run Code Online (Sandbox Code Playgroud)

java drools expert-system decision-tree drools-flow

9
推荐指数
1
解决办法
1万
查看次数

决策树学习和杂质

测量杂质有三种方法:

熵

基尼指数

分类错误

每种方法有哪些差异和适当的用例?

machine-learning data-mining decision-tree random-forest

9
推荐指数
1
解决办法
6755
查看次数

SVM优于十亿树和AdaBoost算法的优点

我正在研究数据的二进制分类,我想知道使用支持向量机优于决策树和自适应Boosting算法的优缺点.

classification machine-learning svm decision-tree adaboost

9
推荐指数
1
解决办法
7985
查看次数

为什么C4.5算法使用修剪来减少决策树以及修剪如何影响预测精度?

我在google上搜索过这个问题,我找不到能够以简单而详细的方式解释这个算法的东西.

例如,我知道id3算法根本不使用修剪,因此如果你有连续特征,预测成功率将非常低.

所以C4.5为了支持它使用修剪的连续特性,但这是唯一的原因吗?

此外,我在WEKA应用程序中无法理解,置信因子究竟如何影响预测的效率.置信因子越小,算法修剪越多,但修剪与预测精度之间的相关性是多少?修剪越多,预测越好或越差?

谢谢

decision-tree weka pruning

9
推荐指数
1
解决办法
1万
查看次数

pydot:是否可以在其中绘制两个具有相同字符串的不同节点?

我正在使用pydot在python中绘制图形.我想代表一个决策树,比如说(a1,a2,a3是属性,两个类是0和1:

       a1>3
      /    \
  a2>10    a3>-7
   /  \     /  \
  1    0   1    0
Run Code Online (Sandbox Code Playgroud)

但是,使用pydot,只创建了两个叶子,树看起来像这样(png附加):

       a1>3
      /    \
  a2>10    a3>-7
      |  X  |
      1     0
Run Code Online (Sandbox Code Playgroud)

现在,在这个简单的情况下,逻辑很好,但在较大的树中,属于不同分支的凌乱的内部节点是统一的.

我正在使用的简单代码是:

import pydot
graph = pydot.Dot(graph_type='graph')
edge = pydot.Edge("a_1>3", "a_2>10")
graph.add_edge(edge)
edge = pydot.Edge("a_1>3", "a_3>-7")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "1")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "0")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "1")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "0")
graph.add_edge(edge)
graph.write_png('simpleTree.png')
Run Code Online (Sandbox Code Playgroud)

我还尝试创建不同的节点对象而不是创建边缘,而不是将其添加到图形中,但似乎pydot会检查节点池中是否有相同名称的节点而不是创建新节点.

有任何想法吗?谢谢!

上面代码创建的图像

python decision-tree pydot

9
推荐指数
1
解决办法
4491
查看次数

什么是决策树中的多重分类?

我是人工智能领域的新手,正在阅读决策树.我指的是AIMA书,它几乎是推荐的AI书的标准介绍.在关于决策树的章节中,他们在书中讨论了这样一种情况,即在第一个属性分裂后没有遗留任何属性,但正面和负面的例子仍然没有分开,这意味着这些例子具有完全相同的描述.他们建议的这种情况的解决方案是" 返回剩余例子的多个分类 ".我想知道那个部分用粗体表示什么?返回一组示例的"多重分类"是什么意思?

artificial-intelligence machine-learning decision-tree

9
推荐指数
1
解决办法
2687
查看次数

sklearn中的交叉验证+决策树

尝试使用sklearn和panads创建具有交叉验证的决策树.

我的问题是在下面的代码中,交叉验证分割数据,然后我将其用于训练和测试.我将尝试通过在不同的最大深度设置下重新创建n次来找到树的最佳深度.在使用交叉验证时,我应该使用k folds CV,如果是这样,我将如何在我的代码中使用它?

import numpy as np
import pandas as pd
from sklearn import tree
from sklearn import cross_validation

features = ["fLength", "fWidth", "fSize", "fConc", "fConc1", "fAsym", "fM3Long", "fM3Trans", "fAlpha", "fDist", "class"]

df = pd.read_csv('magic04.data',header=None,names=features)

df['class'] = df['class'].map({'g':0,'h':1})

x = df[features[:-1]]
y = df['class']

x_train,x_test,y_train,y_test = cross_validation.train_test_split(x,y,test_size=0.4,random_state=0)

depth = []
for i in range(3,20):
    clf = tree.DecisionTreeClassifier(max_depth=i)
    clf = clf.fit(x_train,y_train)
    depth.append((i,clf.score(x_test,y_test)))
print depth
Run Code Online (Sandbox Code Playgroud)

这里是我正在使用的数据的链接,以防任何人. https://archive.ics.uci.edu/ml/datasets/MAGIC+Gamma+Telescope

machine-learning decision-tree cross-validation

9
推荐指数
1
解决办法
2万
查看次数

为什么具有单个树的Random Forest比决策树分类器好得多?

我通过scikit-learn图书馆学习机器学习.我使用以下代码将决策树分类器和随机森林分类器应用于我的数据:

def decision_tree(train_X, train_Y, test_X, test_Y):

    clf = tree.DecisionTreeClassifier()
    clf.fit(train_X, train_Y)

    return clf.score(test_X, test_Y)


def random_forest(train_X, train_Y, test_X, test_Y):
    clf = RandomForestClassifier(n_estimators=1)
    clf = clf.fit(X, Y)

    return clf.score(test_X, test_Y)
Run Code Online (Sandbox Code Playgroud)

为什么随机森林分类器的结果更好(100次运行,随机抽样2/3的数据用于训练,1/3用于测试)?

100%|???????????????????????????????????????| 100/100 [00:01<00:00, 73.59it/s]
Algorithm: Decision Tree
  Min     : 0.3883495145631068
  Max     : 0.6476190476190476
  Mean    : 0.4861783113770316
  Median  : 0.48868030937802126
  Stdev   : 0.047158171852401135
  Variance: 0.0022238931724605985
100%|???????????????????????????????????????| 100/100 [00:01<00:00, 85.38it/s]
Algorithm: Random Forest
  Min     : 0.6846846846846847
  Max     : 0.8653846153846154
  Mean    : 0.7894823428836184
  Median  : 0.7906101571063208
  Stdev   : 0.03231671150915106
  Variance: 0.0010443698427656967 …
Run Code Online (Sandbox Code Playgroud)

python machine-learning decision-tree random-forest scikit-learn

9
推荐指数
1
解决办法
1441
查看次数

获取sklearn中节点的决策路径

我想要在 scikit-learn 中的决策树(DecisionTreeClassifier)中从根节点到给定节点(我提供)的决策路径(即规则集)。clf.decision_path指定样本经过的节点,这可能有助于获取样本遵循的规则集,但是如何将规则集设置到树中的特定节点?

python decision-tree scikit-learn sklearn-pandas

9
推荐指数
1
解决办法
4845
查看次数

有没有一种方法可以用决策树/随机森林进行迁移学习?

有没有办法使用决策树或随机森林模型进行迁移学习?具体来说,我想知道是否有一种好的、简单的方法可以在 Python 中使用Scikit-learn训练的模型来实现这一点。

我能想到的就是在原始数据集上训练随机森林,当新数据到达时,训练新树并将它们添加到模型中。不过,我想知道这是否是一个好的方法,是否还有其他更好的方法。

python decision-tree random-forest scikit-learn

9
推荐指数
1
解决办法
3954
查看次数