小小梦想家 2019-11-14
什么是数据
数据是什么?这几乎成为一个我们熟视无睹的问题。
有不少朋友脑子里可能会直接冒出一个词“数字”——“数字就是数据”,我相信会有一些朋友会斩钉截铁地这么告诉我。
一些朋友会在稍作思考后回答“数字和字符、字母,这些都是数据”。
不知道你现在是不是正在纠结哪个回答更正确,亦或第二个回答更合理一些,我们先放一放。先看下面这组例子:
这里有6个0,请问它是数据吗?
我们再看这样的例子:
这里有4个1和2个a,那么它是数据吗?
也许你可能会摇摇头,“这到底是啥意思?”不错,这也就是我们在认识数据的过程中存在的一个很要命的问题,几乎在我们出发时就拦住了我们的去路。
我们回过头再想想刚才的问题可能会得到比较令自己和他人信服的回答“承载了信息的东西”才是数据,换句话说,不管是石头上刻的画,或者小孩子在沙滩上歪歪扭扭写出的字迹,或者是嬉皮士们在墙上的涂鸦,只要它表达一些确实的含义,那么这种符号就可以被认为是数据。而没有承载信息的符号,就不是数据。这个观点似乎看上去要比我们前面的回答理性得多,也科学得多,但是这个观点真的不需要补充了吗?
我们假设这两个例子都有一些比较特殊的场景,假设第一组里出现的6个0其实是时分秒的简写,000000表示00点00分00秒,而如果写作112349则表示11点23分49秒的含义,那么它是不是也是数据呢?假设第二组出现的5个1和2个a其实是一组密码,5个1代表一个被约定的地点,aa代表一种被约定的事件,那这组数字字母的意义也有了相应的解读,那么它是不是也是数据呢?
不难看出,一些符号如果想要被认定为数据,那就必须承载一定的信息。而信息很可能是因场景而定,因解读者的认知而定,所以一些符号是不是可以被当做数据,有相当的因素是取决于解读者的主观视角的。不知道这个观点你是不是认可,总之这点很重要。
什么是信息
说到这里,我的同事娟娟非常认真且煞有介事地跟我说:“我觉得数字、字母、图像,这些都是数据,跟信息不信息的没啥关系。”看着她认真地跟我抬杠,我觉得蛮好,至少在认识数据过程中积极思考只有好处。
信息一词,在没有学术背景的情况下其实有着很多解释,例如,广播中的声音、互联网上的消息、通讯系统中传输和处理的语音对象、甚至是小区和校园的消息看板,也就是人类社会传播的一切内容。1948年,数学家香农(Claude Elwood Shannon)在题为《通讯的数学理论》的论文中指出:“信息是用来消除随机不定性的东西”。这句话如果要我们来举个例子说明的话,大概可以想象这样一个场景。
我说了两句话:“我今年33岁。”“我明年34岁。”
那么第一句话如果是为了对不了解我的人介绍我的年龄的话而可以算作信息的话,第二句话则不是信息。至少你会觉得说了第一句以后,后面这句简直就是废话,因为这个从第一句话完全可以推导出来。
再比如,某一天巴西足球队和中国足球队进行了比赛。
前提是只要他们都是说实话的人,那么对于我来说,也就只有张三告诉我的能算信息,李四和王五说的则不能算做信息。甚至连张三说的“昨天巴西队赢了”这句话是否能够被算作信息,我们都要表示怀疑,因为这也有点“废话”的意味——但凡对足球运动有点认识的人这几乎可以认定,即便你不告诉我昨天巴西队赢了,我也能猜个八九不离十,因为可能性实在是太大太大了,大到几乎是一定的,几乎是毋庸置疑的。国足的粉丝们请放下手中的臭鸡蛋和烂西红柿,听我把例子讲完。
现在信息是什么清晰多了吧?我们可以粗忽地认为,信息就是那些把我们不清楚的事情阐明的描述,而已经明确或者知晓的东西让我们再“知晓”一遍,这些被知会的内容就不再是信息了。这个概念是很有用的,我们后面在讲信息论的时候也会再做定量的说明,现在只做一个定性的了解。
数据和信息是我们在数据挖掘和机器学习领域天天要打交道的基础,也是我们研究的主要对象。所以对数据和信息有个比较一致性的认识对后面咱们讨论问题是非常有好处的。
什么是算法
算法这个名称大家应该通常不陌生,如果你是一个信息相关专业的本科学生,至少在本科一年级或者二年级就接触过不少算法了。随便打开一个人力资源网站去搜搜看“算法工程师”,好的算法工程师的年薪也随便就到三五十万甚至上百万的都有的。
算法是什么?算法可以被理解成为“计算的方法和技巧”,在计算机中的算法大多数指的就是一段或者几段程序,告诉计算机用什么样的逻辑和步骤来处理数据和计算,然后得到处理的结果。
科班出身的信息相关专业的朋友看到这里就会觉得比较亲切了,经典的算法有很多,比如“冒泡排序”算法,这几乎是所有以高级语言为依托的《数据结构》的入门必学;再比如“八皇后问题”算法,这几乎也是我们在讲穷举计算时的经典保留算法案例(就是在国际象棋棋盘上放八个能够横竖斜无限制前进的皇后,让它们之间互相还不能攻击,看有多少种解);还有不少我们听说过的算法,比如MD5算法,ZIP2压缩算法等各种不胜枚举的算法。下图就是八皇后问题的一组解,我们经过穷举是可以求出所有92组解的。
应该说算法是数据加工的灵魂。如果说数据和信息是原始的食材,数据分析的结论是菜肴,那么算法就是烹调过程;如果说数据是玉璞,数据中蕴含的知识是价值连城的美碧,那么算法就是玉石打磨和加工的机床和工艺流程。
算法在高级语言发展了很多年之后,更多的被封装成了独立的函数或者独立的类,开放接口供人调用,然而算法封装地再好却是不能用纯粹不假思索地使用就能获益的东西,要知道,这些封装只是在一定程度上避免了我们重复发明轮子而已。
大家不要以为算法全都是算法工程师的事情,跟普通的程序员或者分析人员无关,算法说到底是对处理逻辑理解的问题。
《孙子兵法·作战篇》有云,“不尽知用兵之害者,则不能尽知用兵之利”,意思是说,不对用兵打仗的坏处与弊端进行充分了解的话同样不可能对用兵打仗的好处有足够的认识。算法的应用是一个辩证的过程,不仅在于不同算法间的比较和搭配使用有着辩证关系,在同一个算法中,不同的参数和阈值设置同样会带来大相径庭的结果,甚至影响数据解读的科学性。这一点请大家务必有所注意。
统计、概率和数据挖掘
统计、概率、数据挖掘,这几个词经常伴随出现,尤其是统计和概率两个概念,几乎就像自然界的伴生矿一样分不了家,有很多出版社都出版过叫做《概率统计》的书籍。
我们这本书本身也不准备从学术的角度给统计和概率做严格的区分,在平时工作中我们用的统计大多为计数功能,例如我们在使用EXCEL中也会用到COUNT、SUM、AVERAGE等这些统计函数;如果是在软件开发的朋友在用SQL语言对数据库的某些字段进行计数(count)、求和(sum)、求平均(avg)等函数。而概率的应用大多则是根据样本的数量以及占比得到“可能性”和“分布比例”等描述数值。当然,概率的用法远其实不止这些,在数据挖掘中同样用到大量概率相关的算法。
数据挖掘这个词很多时候是和机器学习一起出现,现在网上众人对这两个词的关系说法也是莫衷一是。有的说数据挖掘包含机器学习,有的说机器学习是数据挖掘发展的更高阶段云云。在我看来,数据挖掘和机器学习这样的词汇命名应该是信息科学自然进化和衍生出来的,带有一定的约定俗成的色彩,人们的看法见仁见智也在情理之中。
我的观点是这样。
首先我认为没有必要一定要给两个词汇划一个界限,或者一定要把他们做严格的概念区分,因为区分的标准到目前本就没有科学而无争议的界定,况且是不是能分清一个算法属于数据挖掘的范畴还是机器学习的范畴对于算法本身使用是没有任何影响的。这两个词大家如果想听解释的话,不妨只从字面意思去理解就已经足够了。
数据挖掘——首先是有一定量的数据作为研究对象,挖掘——顾名思义,说明有一些东西并不是放在表面上一眼就能看明白,要进行深度的研究、对比、甄别等工作,最终从中找到规律或知识,“挖掘”这个词用的很形象。
机器学习——我们先想想人类学习的目的是什么?是掌握知识,掌握能力,掌握技巧,最终能够进行比较复杂或者高要求的工作。那么类比一下机器,我们让机器学习,不管学习什么,最终目的都是让它独立或至少半独立地进行相对复杂或者高要求的工作。我们在这里提到的机器学习更多是让机器帮助人类做一些大规模的数据识别、分拣、规律总结等人类做起来比较花时间的事情。但是请注意,与数据挖掘一起出现的这个机器学习概念和我们说的“人工智能”还是相差甚远,因为这里面对“智能”的考究程度实在是太低了。
什么是商业智能
另一个和大数据一起经常出现的词汇是商业智能,也就是我们平时简称的BI(Business Intelligence)。
商业智能——业界比较公认的说法是在1996年最早由加特纳集团(Gartner Group)提出的一个商业概念,通过应用基于事实的支持系统来辅助商业决策的制定。商业智能技术提供使企业迅速分析数据的技术和方法,包括收集、管理和分析数据,将这些数据转化为有用的信息。如果这个书本式的概念读起来还是比较费解,那么就听一个形象的比喻。
公司在日常运营过程中是需要做很多决策的,无时无刻都存在于公司的各个方面,而决策最终不管是股东大会讨论也好还是企业领导部门领导直接发布行政命令也好,最终可能是由于很多因素共同影响做出的结果,无论其来自主观还是客观。