智能应用中八个常见的误区

智能应用中八个常见的误区

                

 

  到此,我们已经介绍了与智能应用相关的基础知识,现在你应该已经对什么是智能应用,以及应该如何使用智能应用有了一个整体的了解。你很有可能迫不及待地想要开始写代码,我们不会让你失望的。除了本章之外,每一章都会给你介绍新的有价值的代码。

但在开始进入激动人心且充满经济利益的智能应用世界之前,先来看一些带有智能功能的项目中常见的错误,或者说是误区。你可能熟悉分布式计算的八大误区(如果没有看过,可以参考Van den Hoogen的业界评论),其中列举了第一次开发分布式应用的程序员对分布式应用的常见误区。同样,根据这个传统,我们在这里也会介绍八个智能应用开发中常见的误区。

误区1:数据是可靠的

很多因素会导致你获取的数据不可靠。在考虑具体的智能算法解决方案之前,首先就要判断数据是否可信。如果数据有问题,就算是最聪明的人,通常也会得出错误的结论。

可能导致数据出错的原因有很多,在此不可能一一列举,下面列出了部分有代表性的可能导致数据出错的因素:

·   在开发过程中所使用的数据不能代表产品环境中的数据。例如,对某个社交网络中的用户按身高分类“高”、“一般”和“矮”。如果开发阶段所使用的数据中最矮的用户的身高是1米84,那就有可能会得出“你太矮了,才1米84”的可笑结论。

·   数据中可能含有缺失值。实际上,除非数据是人造的,否则数据就肯定会含有缺失值。缺失值的处理非常需要技巧,通常,既可以保持缺失值状态不变,也可以用某种默认值或是计算得到的值来填充。两种情况都可能导致不稳定的实现。

·   数据可能会改变。数据库策略可能会变,或者数据库中数据的语义也有可能发生变化。

·   数据没有规范化。假如我们关注的是每个人的体重。为了能根据体重得到有意义的结论,所有的单位应该是统一的:磅或是公斤,两者只能取其一,而不能是两者的混合。

·   所想的算法可能不适合数据。数据有不同的形式,也就是数据类型。有些数据集是数值类型的,有些则不是;有些数据集可以排序,有些则不能;有些数值的数据集是离散的(例如,房间中的人数),有些则是连续的(例如气温)。

       误区2:计算能马上完成

任何解决方案的计算都需要时间,应用的反馈速度对于业务在经济方面的成功是至关重要的。不能盲目地假设应用能在限定的反馈时间内在所有的数据集上完成所有的计算,需要仔细测试算法在各种操作中的性能。

误区3:不用考虑数据规模

当我们讨论智能应用时,规模是很重要的。数据的规模会给整个应用带来两方面的影响。其一,是在误区2中提及的反馈速度问题。其二,则是如何从海量数据中获得有意义的结果。如果只有100个用户,系统可能给用户推荐非常靠谱的电影或音乐。但同样的算法在面对100000个用户时,就有可能变得非常糟糕。

反之,在某些情况下,数据越多,应用就会变得越智能。所以,数据规模带来的影响是多方面的,你应该经常问自己:我有足够的数据吗?如果数据增加10倍,会给我的智能应用带来什么影响?

误区4:不考虑解决方案的可扩展性

另一个与误区2、3有关,但又有区别的误区是认为只需要增加计算机的数量就能不断地扩展智能应用解决方案。不要轻易地认为任何一个解决方案都是可扩展的,有些算法是可扩展的,有些则不行。例如,我们要把数十亿条新闻新标题按相似性分成若干组,并不是所有的聚类算法(见第4章)都可以并行。因此,在应用的设计阶段就应该考虑到可扩展性。在某些情况下,可以分割数据,然后将算法应用到分割后的较小的数据上,从而实现并行。运气好的话,在设计中所选择的算法可能是有并行版本的,但因为算法在智能应用中的重要性,以至于很多基础设施和业务逻辑都是围绕算法展开的,所以在设计的开始阶段就要关注所选择的算法的可扩展性。

误区5:随处使用同样的方法

如果能反复用同样的成熟技术解决与应用中的智能行为有关的各种问题,这无疑充满了诱惑。要尽力拒绝这种诱惑!我曾经见过有人试图用Lucene搜索引擎解决世界上所有的问题。如果你也在做同样的事情,请记住这个经验:如果你手上握着锤子,所有的东西在你眼里都像是一颗钉子。

    

 

  智能应用软件跟其他的软件类似——都有一定的应用领域,也有一定的局限性。在将你所喜爱的解决方案应用到新领域之前,要彻底地进行测试。此外,对于每一个问题都应该从新的角度去观察。不同的算法或许能更加高效地解决新问题。

误区6:总是能知道计算时间

此类误区的典型例子是涉及优化的问题。在某些应用中,参数的细微变化都会带来计算时间的大幅变动。人们总是希望在改变问题的参数后依然能够在限定的反馈时间内解决问题。如果只是计算地球上两个地理位置间的距离,计算时间当然与具体的地理位置没有关系,但这并不适用于所有的问题。在某些情况下,数据的细微变化就会造成计算时间剧烈变化,有时候甚至是几秒钟与几个小时的差别。

误区7:复杂的模型更好

任何事情都是过犹不及的。我们首先应该从最简单的模型开始。然后在解决方案中通过逐步添加其他智能元素改进效果。KISS(Keep ItSimple, Stupid)原则永远都是软件工程师的好伙伴。

误区8:存在无偏见的模型

如果有人说过这样的话,原因只有两个:无知或偏见!在选择所需的模型和选择用于训练算法的数据时,就已经引入了偏见。在这里,我们无法从科学的角度深入地讨论学习系统中的偏见,但我们应该注意解决方案中的偏见总是倾向于我们模型的描述和我们的数据。换句话说,偏见使我们的方案受到已知的事实或是我们获得这些事实的方法的限制,而泛化则是试图从已知的事实中推断出未知的事情。

 

本文节选自《智能WEB算法》一书。

图书详细信息:http://blog.csdn.net/broadview2006/article/details/6702401

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页