首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >决策树算法建议

决策树算法建议
EN

Stack Overflow用户
提问于 2018-07-12 09:46:51
回答 2查看 327关注 0票数 2

我想要编写一个接受近70个参数的方法,并根据输入返回一个结果。

下面是我的算法的逻辑表示:

在表示中,有7个参数,作为树的结果,它给出了Y或N。

我如何才能完成这样的算法,但更大和更复杂?哪种语言能更有效地计算这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-12 10:12:58

一种方法是有一个顶点图,其中边包含需要满足的条件。

代码语言:javascript
复制
class Node:

    def __init__(self, edges, val = None):
        self.edges = edges
        self.val = val

    def decide(self, args):
        if len(self.edges) < 1:
            return self.val

        for edge in self.edges:
            (cond, next) = edge

            if cond(args):
                return next.decide(args)
                break

n_a_a = Node([], 'y')
n_a_b = Node([], 'n')
n_b_a = Node([], 'y')
n_b_b = Node([], 'n')

n_a = Node([(lambda args: args['B'] > 0, n_a_a),
            (lambda args: args['B'] <= 0, n_a_b)])
n_b = Node([(lambda args: args['B'] > 5, n_b_a),
            (lambda args: args['B'] <= 5, n_b_b)])

root = Node([(lambda args: args['A'] > 0, n_a),
             (lambda args: args['A'] <= 0), n_b)])

print root.decide({'A':5,'B':10})

另一种方法是建模决策树,然后使用生成代码的代码根,或者自己手动编写如下代码:

代码语言:javascript
复制
def root(args):
    if args['A'] > 0:
        return n_a(args)

    return n_b(args)

def n_a(args):
    if args['B'] > 0:
        return n_a_a(args)

    return n_a_b(args)

def n_b(args):
    if args['B'] > 5:
        return n_b_a(args)

    return n_b_b(args)

def n_a_a(args):
    return 'y'

def n_a_b(args):
    return 'n'

def n_b_a(args):
    return 'y'

def n_b_b(args):
    return 'n'

print root({'A':5,'B':10})
票数 2
EN

Stack Overflow用户

发布于 2018-07-12 16:27:56

在机器学习术语中,您描述的是分类树。

有许多机器学习库实现分类树。其中许多都被设计为部署在服务器上,并将被优化为与构建的模型--即机器学习术语--进行有效的评分。

然而,这些库通常是为了从培训数据中学习树的结构而设计的,而您希望手动构建它。要使用这种方法,您需要找到一个库,它的模型格式您可以访问和‘假’。我不知道我该推荐哪一个,这里的主题是询问库的建议,但是数据科学可能会帮上忙。

一种选择是在PMML中对树进行编码,然后将其导入可以执行PMML模型的平台中。例如,我相信这可以在Server和/或Microsoft中完成。本参考描述了另一种部署PMML模型的方法。

或者,您可以生成一个显示所需规则的合成数据集,然后使用任何您喜欢的分类树库来训练该数据的模型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51302378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档