面向开发人员的机器学习:谎言,真理和业务逻辑

时间:2019-03-13 20:12:05 阅读:53次

  当我第一次听说机器学习时,我的反应几乎是“meh”。我不在乎。我没有看到它影响我或我的工作那么多。我正忙着写软件。软件主要专注于从某些远程源提取数据,将规则应用于该数据,并将其放在屏幕上。机器学习不会改变它。

<! - more - >

  实际上,这是一个秃头的谎言。我吓坏了。我必须掌握这种新技术,否则我会“落后”。而这一次,它不仅仅是一种新的编程语言或JavaScript框架。这是完全不同的东西。我不知道它会如何影响我写的软件,但它会变坏。

  嗯,事实证明,我把它全都落后了。我那秃顶的谎言不是谎言。机器学习非常适合我已经在做的事情,虽然肯定不同,但它并不令人震惊,并没有证明我的恐怖。让我解释一下似乎是关于“业务逻辑”的题外话。

  业务逻辑是位于“表示”(即用户看到的内容)和“数据”(即我们拥有的信息)之间的代码位。它是一种双向适配器,它以一种有意义的方式获取数据并将其呈现给用户,并从用户那里获取有意义的输入并以技术方式保存。

  对于一个简单的应用程序,通常很少有业务逻辑方式。数据与用户想要查看的内容相匹配,因此这些应用程序专注于将数据放在屏幕上(或者可能是一张纸)。它们往往易于编写和维护,因为没有重要的逻辑。

  当然,最终,你还需要更多。用户输入特定值 - 通知他们特定的事物。数据有一些特殊的价值 - 显示一些特殊的东西。这些规则是应用程序的业务逻辑。它们起初很简单,因此,出于权宜之计或缺乏经验而经常被错误地放在演示文稿或数据层中。但它们很快就会变得非常复杂,最终会出现一盘意大利面条代码。解决方案:给他们自己的层。

  但随着规则的增长和扩展,业务逻辑层本身会变得非常复杂。我花了很多时间在一家保险公司工作,在那里我亲眼看到了这一点。如果该州是俄亥俄州并且该县是Cuyahoga并且EPA对车辆的检查不超过90天,那么做一件事。但如果该县是富兰克林或凯霍加(但不是任何其他县),并且EPA检查不超过60天做其他事情。疯狂!像这样的代码可以迅速失控,变成一堆覆盖着marinara的面条。

  通常,此问题的解决方案是规则引擎。您可以在外部软件中定义所有规则,并使用该软件执行规则,而不是编写深层嵌套的难以理解的条件。规则引擎针对管理这些规则进行了优化,甚至可以将它们暴露给业务本身,而不仅仅是开发人员。但有时甚至规则引擎变得难以管理,并且很难理解规则如何在其中进行交互。最终,你不再使用意大利面条代码,最终会出现意大利面规则的堆积部分,并带有肉丸的一面。

  此时,有一个重要的实现。所有这些方法都面临过度复杂的问题。他们有不同的门槛,当然。但是,如果有足够的复杂性,它们都变得无法管理。一旦你实现了一个规则引擎,你已经到了最后一行吗?

  喔。你好,机器学习。

  机器学习就像是类固醇的规则引擎。它允许我们创建封装复杂模式的规则,否则这些模式几乎是不可能的。但是我们不是使用它来定义我们的规则,而是找到规则然后为我们编码。我们必须提供的只是示例和正确的答案(即功能和标签),它将创建一个抽象,我们可以用来执行这些规则(即模型)。

  这是一个非常巧妙的技巧!

  这是否意味着模型应该取代所有业务逻辑?当然不是。规则引擎并没有取代我们编码的所有业务逻辑。它增加了它。有时候我们代码中的一个简单条件就可以了。有时,使用规则引擎可以更好地管理业务逻辑。这不是代码与规则引擎与机器学习的问题。这是一个菜单,我们从中选择我们需要的东西。我们的应用程序的业务逻辑,即我们的数据和用户之间的层,可以由许多东西组成:代码中的简单规则,规则引擎和现在的机器学习模型。

  事实证明,机器学习不会改变我正在做的事情。我还在编写软件,主要专注于从某些远程源中提取数据,将规则应用于该数据,并将其放在屏幕上。只是我们找到了一种新的方法来封装之前的规则,这些规则过于复杂,我们无法管理,或者在某些情况下甚至可以定义。

  这并不可怕。这是授权!

  

  

面向开发人员的机器学习:谎言,真理和业务逻辑所属专题:机器学习 《面向开发人员的机器学习:谎言,真理和业务逻辑》链接:http://www.zhouchuanxiong.net/1206

面向开发人员的机器学习:谎言,真理和业务逻辑相关文章