决策树算法建议

埃姆雷·阿尔帕斯兰(Emre Alparslan)

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

这是我算法的逻辑表示:

示例树

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

如何完成编写类似但又越来越复杂的算法?哪种语言会更有效地计算?

罗马人

一种方法是制作一个带有顶点的图,其中“边”包含要通过它必须满足的条件。

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})

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

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})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章