我想编写一个方法,该方法需要将近70个参数,并根据输入返回结果。
这是我算法的逻辑表示:
在表示形式中,有7个参数,作为树的结果,它给出Y或N。
我如何完成编写类似但又越来越复杂的算法?哪种语言会更有效地计算这种结果?
答案 0 :(得分:2)
在机器学习术语中,您正在描述分类树。
有很多实现分类树的机器学习库。其中许多设计用于部署在服务器上,并且已经过优化,可以有效地与构建模型(这是您要尝试做的机器学习术语)的得分相对。
但是,这些库通常旨在从训练数据中学习树的结构,而您想手动构建它。要使用这种方法,您需要找到一个可以访问并“伪造”其模型格式的库。我不知道该向谁提出建议,这里不建议图书馆建议,但是Data Science也许可以提供帮助。
一种选择是将树编码为PMML,然后将其导入可以执行PMML模型的平台。例如,我相信可以在SQL Server和/或Microsoft Azure中完成。 This reference描述了另一种部署PMML模型的方法。
或者,您可以生成显示所需规则的综合数据集,然后使用所需的任何分类树库在该数据上训练模型。
答案 1 :(得分:1)
一种方法是制作一个带有顶点的图,其中“边”包含要通过它才能满足的条件。
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})