Welcome

首页 / 软件开发 / 数据结构与算法 / 我是这么利用数据:1篮子鸡蛋

我是这么利用数据:1篮子鸡蛋2014-06-06 cnblogs 欢乐的财神一篮子鸡蛋放在你面前,让你挑几个带回去吃,你会怎么办?我想大致会这样:也不能说全拿走,这样不 好,也就看看里面哪几个个头大一些,然后挑那几个!今天想和大家分享一点点,由挑选引出的数据驱动的含 义!

说点题外话,可能“数据驱动”这个说法并不是我提出的,但是这四个字真的很贴切,很符合 我的思路,准备长期的使用,不过,问题是真的很难解释它是什么,尝试过很多角度来解释它,都还没有说清 楚,当然了,这给了我一次又一次反思的机会,倒也不错!今天这个话题也是继续拿鸡蛋的例子来谈数据驱动 ,可能是你的菜,也可能不是你的菜,但是我决定上无数盘菜,你一定会找到你要的那一盘!哈哈!这本身就 是数据驱动的做法!

让我们回到鸡蛋的话题!回顾一下鸡蛋拥有者的陈述:“挑几个带回去吃”!思考两个问题:

1、他说挑几个,但没有说“挑三个”或者是“挑五个”,是什么让你最终拿了3个 或者是5个的?

2、他说挑几个,但没有说挑哪几个,或者这么问“挑是什么意思”?但这丝毫不影响你选鸡蛋 的行为和规则,这个规则怎么来的?

好了,问题提完了,有人可能要说这两个问题太简单了,可以概括为两个字“常识”,由于常 识人家让你挑几个,那么一般你也就拿三五个!根据常识,挑就是选择你喜欢的,假设你喜欢大的就选大的, 万一你喜欢小的,也没人拦着你!

哦,原来是“常识”,这个多么简单,而又扼杀想象力的玩意!让我们把水搅浑,看看“ 常识”怎么办?比如说这个人总共就3个鸡蛋,让你挑几个,你根据常识挑三五个,于是把三个全拿走了 !

你可能要反驳了,如果这人总共就3个鸡蛋,根据“常识”你应该只拿一个就行了!虽然这么说 好像常识很强大,但也反应了它并不是个省油的灯,具有相当的复杂性,掌握它并不容易,这是一种“ 行为艺术”,也许想当然的以为它是常识,不过它早已复杂到不是常识这么简单了!

这是什么呢?让我们反过来想一想,其实常识不是让你拿三五个,也不是让你拿一个,而是让你拿一个很 小的百分比,也就是不要拿太多!想到了这一点,问题转换为:拟定一个合适的百分比,就搞定这个常识了!

让我们再谈一谈刚才的第二个问题!我们说挑大一些的。那么,到底哪个算大一些呢?可能你要鄙视我, 大都看不出来啊,就是大一点的啊!好吧,又是一个完全靠感觉的东西,这些东西越简单明了,越习以为常, 越扼杀想象力,如果我们让程序来执行这个过程,难道你要这么写:pick(大一点的)?

好吧,说到软件开发了!其实“大”并不难对么?按照“数据驱动”的理解,我们 早已掌握了全部的数据,给你找出最大的,不就行了?当然了,除了找最大的,还有一个更有意思的方法,和 大家一起分享:

1、掌握全部的数据,计算平均值u

2、设定一个合适的x,但凡某个鸡蛋的重量大于u+x 它就是“大”的!

此方法模拟了人的视觉,计算的平均值u,就是篮子里的鸡蛋大都长什么样,然后大于平均值x个单位的鸡 蛋,就是大于一般鸡蛋到达一定程度的那种!嘿嘿,是不是比“大一点”的说法要更“靠谱 ”哈!

当然了,这个方法还不是完美的,万恶的数学给了我们一个标准的设定x的方法:

1、掌握所有数据,让每个鸡蛋的重量减去平均值u,得到一个值,然后把这个值求平方,得到d(i)

2、把所有的d(i)求平均,得到一个值,把这个值开根号得到x(正式的统计学教程里这个量是“西格 玛”)

让我们来看看这是在做什么!每个重量都减去平均值是用来标记各个鸡蛋和一般大小之间的差异有多大,求 平方是让或大或小不能得以抵消,大家都懂全体求平均是让这些差异平均化,最后开根号是因为前面求了平方 ,这里把单位再折算回去!

其实,我可以告诉你这是在求“标准差”,但是为什么要把求解的过程详细描述一遍呢?因为 ,虽然这个是推荐的方法,但“数据驱动”就是这么有魅力,它不是“统计学”驱动, 不完美的规则依然奏效,你不必精通万恶的数学,因为它不仅能驱动业务,还能驱动“数据驱动” 本身!我们可以尝试适当的简化规则,只要你喜欢!比如这里,我不平方了,而是求绝对值,这样也就不用开 根号了!虽然这有一些缺陷,但是总体方向上,它早已可以驱动软件利用数据完善规则了,其他的,who cares?

好了,得到x了,理论上大于一个x就是很大了,大于2个x就是超级大,大于3个x的话,那可能不是鸡蛋, 而是一个鹅蛋不小心掺进来了!

让我们回顾一下,这一篮子鸡蛋就是仅仅他们本身,就可以用个数说明了拿几个是“常识”所 指。就可以用每个鸡蛋的重量自然的决定了哪个是大一些的,甚至一个鹅蛋放在里面,不用告诉我,看重量就 能判断了,我绝对不会以为它是个超级大的鸡蛋!这在软件里叫做异常数据,我这么说你明白么?

好了,故事快要结束了,按惯例我们说一说数据思路!本系列文章强调的最重要的一个方法就是用数据解 释业务,而不是人为的指定,比如这里的鸡蛋,传统软件开发非要问大于多少克才算大,你让客户怎么回答你 ?况且随着新鸡蛋加入进来,大的标准在时刻变化!随着鸡蛋被拿走,大的标准也在不断变化!这么说吧,这 个标准变的太快了,但是冥冥中,它好像总是那么贴合需要!这便是“数据驱动”!可爽了,试试 ?

来吧,写程序用数据驱动,蓝瓶的,好吸收!