一、大数据
1.1 大数据(Big Data)
众说纷纭!
个人认为,大数据中的“大”,不仅仅是涉及数据规模,而且包含“价值“这个层面。其实无非就是大量的信息罢了,但是我们却能 通过各种手段从这些信息中提取出我们所需要的东西。
二、数据分析、数据挖掘和推荐系统
2.1 数据分析(Data Analysis)
啤酒和尿布这个故事在欧美国家也被传唱,出现的版本还不尽相同。但对此质疑的声音也不少,其中有一位叫Daniel J. Power的教授特此撰文,应该是最全面地有理有据揭开这个故事后面的真相。有兴趣的人可以详细阅读英文全文:What is the "true story" about using data mining to identify a relation between sales of beer and diapers? 主旨内容如下:
这家连锁店不是沃尔玛,而是Osco Drugs,一家主要在美国中西部经营的药房和便利店。 该公司于1992年就着手进行数据分析项目,算是数据分析的先驱者。当时的项目收集了来自25家分店、一千两百多万个购物车的信息。
数据的确发现:下午5点到7点之间,客户购买了啤酒和尿片。 便利店管理层的确对此发现表示兴趣。但现实中,并没有重新设计商品的摆放,没有把啤酒和尿布进行捆绑销售。不过,公司保守地对销售流程进行了改造,即在正确的时间放正确数量的正确商品。
这就是啤酒和尿片的故事真相,所以,这其实并不是数据分析的好故事。大家对此故事津津乐道,无外乎希望表达:数据分析技术是商业决策的好帮手。
数据分析:就是对数据进行分析,得出一些结论性的内容,用于决策。分析什么哪? 根据分析现状、分析原因、预测未来。分析现状和分析原因,需要结合业务才能解释清楚。 用的技术比较简单,最简单的数据分析工具就是 Excel 和 Python 了。预测未来指的是分析未来一段时间的销售额之类的。在预测未来方面,一般用到数据挖掘的技术了。数据分析更多的是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支持过程。在实用中,数据分析可帮助人们作出判断,以便采取适当行动。
数据分析是以输入的数据为基础,通过先验的约束,对数据进行处理,但是不需要对结果做处理,得到任何结果都行。例如你需要图像识别,这个属于数据分析,你要分析人脸,而数据通过你的先验的方法,就是出来个猫脸。你的数据分析也没有问题,你需要的就是默默的承受结果,并且尊重事实。因此数据分析的重点在于数据的有效性、真实性和先验约束的正确性。
简而言之:数据分析是对数据的一种操作手段。或者算法。目标是针对先验的约束,对数据进行整理、筛选、加工,由此得到信息。如一份用户信息表中,某个用户的年龄超过了200岁,这种数据明显就是用户恶搞的数据,我们一般使用数据分析的手段把这种脏数据剔除掉,而我们不需要关心处理后的数据是什么样子的,这就是数据分析中的一种数据预处理手段。
2.2 数据挖掘(Data Mining)
数据挖掘:从字面意思上看,是从数据中挖掘出有价值的信息。比如,超市通过对一段时间的客户消费记录能发现,哪些物品经常被顾客一起购买。那么,就可以把这些物品摆放的位置近一些,或者一起促销。在这里,客户的消费记录是“数据” ,“挖掘” 出的信息是哪些商品经常被一起购买。“价值” 指的是超市可以据此搞促销,提高超市的销售额。挖掘出这些有价值信息的方法就是课程中需要学习的。数据挖掘关注的是一些方法如何在商业中应用,并不是纯粹的理论和学术。数据挖掘涉及到很多的算法,源于机器学习的神经网络,决策树,也有基于统计学习理论的支持向量机,分类回归树,和关联分析的诸多算法,值得庆幸的是 Python 中的 Scikit-learn库 中提供了以上所有的算法。数据挖掘的定义是从海量数据中找到有意义的模式或知识。
较于数据分析的简单分析,数据挖掘则不同,数据挖掘是对信息的价值化的获取。价值化自然不考虑数据本身,而是考虑数据是否有价值。由此,一批数据,你尝试对它做不同的价值挖掘。评估,则就是数据挖掘。此时对比数据分析,最大的特点就是,你需要调整你的不同的先验约束,再次对数据进行分析。而先验的约束已经不是针对数据来源自身的特点,例如信噪比处理算法。而是你期望得到的一个有价值的内容,做先验的约束。以观测,数据根据这个约束,是否有正确的反馈。也就是说,数据挖掘相比较数据分析看重的更是结果,而不看重过程。
举个例子说明数据分析和数据挖掘:你揣着50元去菜市场买菜,对于琳琅满目的鸡鸭鱼猪肉以及各类蔬菜,想荤素搭配,你逐一询问价格,不断进行统计分析,能各自买到多少肉,多少菜,大概能吃多久,心里得出一组信息,这就是数据分析;而关系到你做出选择的时候就需要对这些信息进行价值评估,根据自己的偏好,营养价值,科学的搭配,用餐时间计划,最有性价比的组合等等,对这些信息进行价值化分析,最终确定一个购买方案,这就是数据挖掘。需要注意的是:虽然在此做了这样的比较,但是数据分析的数据量一般远远小于数据挖掘。
2.3 推荐系统(Recommended System)——数据挖掘的应用之一
推荐系统:首先,需要申明一点的就是推荐系统!=推荐算法。推荐系统是一套完善的推荐机制,包括前期数据的准备、具体推荐的过程(这个过程可能是一套复杂的算法模型,也可能是一个简单的规则,也可能是多种模型的混合结果等等)、后期数据的预测、AB测试效果评估等等。
推荐系统在算法模型上大体可以分为基于内容的推荐、基于协同过滤的推荐,如下图所示:
-
基于内容推荐:即通过内容本身的属性,然后计算内容的相似性,找到与某物品属性相似的物品。
-
基于协同过滤推荐:所谓协同过滤,即不依赖于物品本身的物品属性,而是通过其他相关特征,例如人参与的行为数据,来达到推荐物品的目的。关于协同过滤,又分为以下几个类别:
- 基于模型的协同,即ModelCF,其中基于模型的协同又可以分为以下几种类型;
- 基于图模型协同,即Graph,也叫社会网络图模型;
- 基于矩阵分解的协同过滤,即Latent Factor Model(SVD);
- 基于距离的协同过滤;
- 基于用于的协同,即UserCF;
- 基于物品的协同,即ItemCF;
- 基于模型的协同,即ModelCF,其中基于模型的协同又可以分为以下几种类型;
上述讲了那么多,早期的推荐系统算法一直想解决的是超市中的长尾效应(马太效应)。
所谓长尾效应,在推荐系统中的体现即,部分优质物品,购买的人数较多,即与其相关的的用户行为轨迹会较多。这样,在协同过滤推荐中,由于我们主要的依据就是我们的历史行为行为数据,所以这种物品得到推荐的机会就越多。这样,不断循环迭代,得到推荐的物品都集中在少数的一些物品中,而大部分物品是没有被推荐的机会的。这就造成了造成长尾现象。
而马太效应的意思是,通俗点说就是,强者愈强,弱者愈弱。而长尾的直接体现就是马太效应。通常来讲(当然也有特殊情况),一个推荐系统,如果长时间处于长尾之中,就会造成推荐疲劳,推荐的效果就会下降。所以,很多时候,挖掘长尾是推荐系统不可缺少的部分。即,我们需要把尾巴部分 并且是有价值的部分给适当的展示出来。挖掘长尾的方法很多,其中一种常见的方式就是给热点物品适当的降权。比如物品,我们为热点物品进行权重下降,这样在最终推荐的结果中,非热点物品得到推荐的机会就增大,从而适当的挖掘了长尾。
三、人工智能、机器学习、神经网络和深度学习
有人说,人工智能(AI)是未来,人工智能是科幻,人工智能也是我们日常生活中的一部分。这些评价可以说都是正确的,就看你指的是哪一种人工智能。
今年早些时候,Google DeepMind的AlphaGo打败了韩国的围棋大师李世乭九段。在媒体描述DeepMind胜利的时候,将人工智能(AI)、机器学习(machine learning)、神经网络(neural network)和深度学习(deep learning)都用上了。这三者在AlphaGo击败李世乭的过程中都起了作用,但它们说的并不是一回事。
今天我们就用最简单的方法——同心圆,可视化地展现出它们三者的关系和应用。
如上图,人工智能是最早出现的,也是最大、最外侧的同心圆;其次是机器学习,稍晚一点;最内侧,是深度学习,当今人工智能大爆炸的核心驱动。
五十年代,人工智能曾一度被极为看好。之后,人工智能的一些较小的子集发展了起来。先是机器学习,然后是深度学习。深度学习又是机器学习的子集。深度学习造成了前所未有的巨大的影响。
3.1 从概念的提出到走向繁荣
1956年,几个计算机科学家相聚在达特茅斯会议(Dartmouth Conferences),提出了“人工智能”的概念。其后,人工智能就一直萦绕于人们的脑海之中,并在科研实验室中慢慢孵化。之后的几十年,人工智能一直在两极反转,或被称作人类文明耀眼未来的预言;或者被当成技术疯子的狂想扔到垃圾堆里。坦白说,直到2012年之前,这两种声音还在同时存在。
过去几年,尤其是2015年以来,人工智能开始大爆发。很大一部分是由于GPU的广泛应用,使得并行计算变得更快、更便宜、更有效。当然,无限拓展的存储能力和骤然爆发的数据洪流(大数据)的组合拳,也使得图像数据、文本数据、交易数据、映射数据全面海量爆发。
让我们慢慢梳理一下计算机科学家们是如何将人工智能从最早的一点点苗头,发展到能够支撑那些每天被数亿用户使用的应用的。
3.2 人工智能(Artificial Intelligence)——为机器赋予人的智能
人工智能:缩写是 AI,就是像人一样的智能、会思考。人工智能更适合理解为一个产业,泛指产生更加智能的软件和硬件。人工智能实现的方法就是机器学习,所以谈人工智能技术,实际上就是机器学习的各种算法的应用。各种智能家居、智能机器人都是人工智能产业的方向。
早在1956年夏天那次会议,人工智能的先驱们就梦想着用当时刚刚出现的计算机来构造复杂的、拥有与人类智慧同样本质特性的机器。这就是我们现在所说的“强人工智能”(General AI)。这个无所不能的机器,它有着我们所有的感知(甚至比人更多),我们所有的理性,可以像我们一样思考。
人们在电影里也总是看到这样的机器:友好的,像星球大战中的C-3PO;邪恶的,如终结者。强人工智能现在还只存在于电影和科幻小说中,原因不难理解,我们还没法实现它们,至少目前还不行。
我们目前能实现的,一般被称为“弱人工智能”(Narrow AI)。弱人工智能是能够与人一样,甚至比人更好地执行特定任务的技术。例如,Pinterest上的图像分类;或者Facebook的人脸识别。
这些是弱人工智能在实践中的例子。这些技术实现的是人类智能的一些具体的局部。但它们是如何实现的?这种智能是从何而来?这就带我们来到同心圆的里面一层,机器学习。
3.3 机器学习(Machine Learning)—— 一种实现人工智能的方法
机器学习:是研究如何让计算机去学习。学习什么哪? 根据一些过去的事实,学习如何适应新的环境。太小白了,严肃点! 机器学习,是研究算法的学科,研究的是如何让计算机根据以往的经验去适应新的环境。这里“以往的经验” 指的是历史数据,“适应” 指的是通过历史数据创造一个很牛逼的函数,“新的环境” 指的是把新的数据输入到这个函数中,产生一个新的输出。机器学习本质上是研究自学习算法的科学,这些算法是帮助软件和机器进行自我学习解决问题的算法。
机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。
机器学习直接来源于早期的人工智能领域。传统算法包括决策树学习、推导逻辑规划、聚类、分类、回归、强化学习和贝叶斯网络等等(当然还有很多)。众所周知,我们还没有实现强人工智能。早期机器学习方法甚至都无法实现弱人工智能。
机器学习最成功的应用领域是计算机视觉,虽然也还是需要大量的手工编码来完成工作。人们需要手工编写分类器、边缘检测滤波器,以便让程序能识别物体从哪里开始,到哪里结束;写形状检测程序来判断检测对象是不是有八条边;写分类器来识别字母“ST-O-P”。使用以上这些手工编写的分类器,人们总算可以开发算法来感知图像,判断图像是不是一个停止标志牌。
这个结果还算不错,但并不是那种能让人为之一振的成功。特别是遇到云雾天,标志牌变得不是那么清晰可见,又或者被树遮挡一部分,算法就难以成功了。这就是为什么前一段时间,计算机视觉的性能一直无法接近到人的能力。它太僵化,太容易受环境条件的干扰。
随着时间的推进,学习算法的发展改变了一切。
3.4 神经网络(Neural network)——机器学习中的一个算法模型
神经网络:是机器学习中的一个算法模型,指的是模拟人的神经系统。大家知道,人的神经非常复杂,所以神经网络算法需要的计算量很大。神经网络在以前一直不温不火,原因是计算机硬件不足以支撑神经网络的计算量。现在大数据技术的发展,让神经网络迎来了春天。比如人脸识别、交通领域的车牌识别技术都是神经网络的应用。
3.5 深度学习(Deep Learning)——一种实现机器学习的技术
深度学习:属于神经网络的一个发展分支,指的是层数很多的神经网络,可以简单理解为更加高级的神经网络。把神经网络比作数学学科,深度学习类似于高等数学。无人驾驶汽车属于深度学习的典型应用。Python 中,可以使用 TensorFlow2 和 PyTorch库非常简单的实现深度学习中的各种算法。
人工神经网络(Artificial Neural Networks)是早期机器学习中的一个重要的算法,历经数十年风风雨雨。神经网络的原理是受我们大脑的生理结构——互相交叉相连的神经元启发。但与大脑中一个神经元可以连接一定距离内的任意神经元不同,人工神经网络具有离散的层、连接和数据传播的方向。
例如,我们可以把一幅图像切分成图像块,输入到神经网络的第一层。在第一层的每一个神经元都把数据传递到第二层。第二层的神经元也是完成类似的工作,把数据传递到第三层,以此类推,直到最后一层,然后生成结果。
每一个神经元都为它的输入分配权重,这个权重的正确与否与其执行的任务直接相关。最终的输出由这些权重加总来决定。
我们仍以停止(Stop)标志牌为例。将一个停止标志牌图像的所有元素都打碎,然后用神经元进行“检查”:八边形的外形、救火车般的红颜色、鲜明突出的字母、交通标志的典型尺寸和静止不动运动特性等等。神经网络的任务就是给出结论,它到底是不是一个停止标志牌。神经网络会根据所有权重,给出一个经过深思熟虑的猜测——“概率向量”。
这个例子里,系统可能会给出这样的结果:86%可能是一个停止标志牌;7%的可能是一个限速标志牌;5%的可能是一个风筝挂在树上等等。然后网络结构告知神经网络,它的结论是否正确。
即使是这个例子,也算是比较超前了。直到前不久,神经网络也还是为人工智能圈所淡忘。其实在人工智能出现的早期,神经网络就已经存在了,但神经网络对于“智能”的贡献微乎其微。主要问题是,即使是最基本的神经网络,也需要大量的运算。神经网络算法的运算需求难以得到满足。
不过,还是有一些虔诚的研究团队,以多伦多大学的Geoffrey Hinton为代表,坚持研究,实现了以超算为目标的并行算法的运行与概念证明。但也直到GPU得到广泛应用,这些努力才见到成效。
我们回过头来看这个停止标志识别的例子。神经网络是调制、训练出来的,时不时还是很容易出错的。它最需要的,就是训练。需要成百上千甚至几百万张图像来训练,直到神经元的输入的权值都被调制得十分精确,无论是否有雾,晴天还是雨天,每次都能得到正确的结果。
只有这个时候,我们才可以说神经网络成功地自学习到一个停止标志的样子;或者在Facebook的应用里,神经网络自学习了你妈妈的脸;又或者是2012年吴恩达(Andrew Ng)教授在Google实现了神经网络学习到猫的样子等等。
吴教授的突破在于,把这些神经网络从基础上显著地增大了。层数非常多,神经元也非常多,然后给系统输入海量的数据,来训练网络。在吴教授这里,数据是一千万YouTube视频中的图像。吴教授为深度学习(deep learning)加入了“深度”(deep)。这里的“深度”就是说神经网络中众多的层。
现在,经过深度学习训练的图像识别,在一些场景中甚至可以比人做得更好:从识别猫,到辨别血液中癌症的早期成分,到识别核磁共振成像中的肿瘤。Google的AlphaGo先是学会了如何下围棋,然后与它自己下棋训练。它训练自己神经网络的方法,就是不断地与自己下棋,反复地下,永不停歇。
3.6 深度学习,给人工智能以璀璨的未来
深度学习使得机器学习能够实现众多的应用,并拓展了人工智能的领域范围。深度学习摧枯拉朽般地实现了各种任务,使得似乎所有的机器辅助功能都变为可能。无人驾驶汽车,预防性医疗保健,甚至是更好的电影推荐,都近在眼前,或者即将实现。
人工智能就在现在,就在明天。有了深度学习,人工智能甚至可以达到我们畅想的科幻小说一般。你的C-3PO我拿走了,你有你的终结者就好了。
3.7 小结
综上,人工智能就是一个产业,人工智能的实现手段主要靠机器学习的各种算法。在机器学习的算法中,深度学习是一个智能化程度非常高的算法。现在云计算和大数据技术的发展,让神经网络和深度学习得以在实际中应用。
大数据时代,数据是企业的最值钱的财富,但海量的数据并非都是有价值的,如何挖掘出有用的数据变成商业价值,就需要机器学习算法。大数据和机器学习势必颠覆传统行业的运营方式,必将驱动公司业务的发展。目前,越来越多的机器学习/数据挖掘/深度学习算法被应用在电商、搜索、金融、游戏,医疗等领域中的分析、挖掘、推荐上。
但懂机器学习算法的人才却少之又少,物以稀为贵,致使这个行业的工资奇高。
四、数学很差,能学习机器学习吗?
机器学习中的各种算法,都是一个个的数学算式。不会高等数学、概率统计、凸优化等知识,就不能搞透各个数学算式。如果想明白这些算式的来龙去脉,以及如何推导出来的,没有前面的数学知识做铺垫是绝对不可能的。
但是,包括很多公司里需要招聘员工,培养的是工程师,不是科学家。我们要学习的如何使用这些算式,知道算式中的变量是从哪里来的,如何传入,以及变量的变化会对结果有什么样的影响。这些算式已经有各种 python 库可以调用了,并不需要我们去写。
除非是算法方向侧着为主的公司。打个比方吧,公司是驾校,培养的是司机。作为司机不需要了解汽车的内部结构。虽然了解汽车的内部结构对于成为一名优秀的司机是非常有好处的。但是市场上需要的是大量的司机,而不是 4S 点的维修工。
所以,数学很差,也可以搞机器学习,不必太担心。但是,你必须得比别人花更多的努力。
肯定是希望你编程基础又强、数学功底又好啦!
深入机器学习这么久,如果你不是励志成为图灵,我发现学好机器学习靠的不是数学功底、较强的逻辑思维,而是坚韧。
五、如何称为一个数据科学家
什么叫数据科学家?算法工程师和研发工程师,即搞数据挖掘、机器学习、推荐系统的那群人,都可以称为数据科学家。
你可以通过学习以下东西成为,如果你能看到这里的话,就一定程度表明你很坚韧了。
- 数学(基础)
高等数学、线性代数、概率论,进阶可读:凸优化、离散学
- 编程语言(基础)
首选:Python!Python!简单易懂又优雅
其他:C++、Java、R
- 算法和模型(理论)
数据分析、数据挖掘、推荐系统、机器学习、自然语言处理、图像识别
- 开源库(工具)
单机:Numpy、Pandas、Matplotlib、Scikit-learn、TensorFlow2、PyTorch
分布式:Spark
- 实操(实践)
阿里巴巴大数据竞赛、Kaggle竞赛等
六、结语
希望我们都能成为“人生硬核玩家”