本文将简要介绍Spark机器学习库(Spark MLlib’s APIs)的各种机器学习算法,主要包括:统计算法、分类算法、聚类算法和协同过滤算法,以及各种算法的应用。
你不是一个数据科学家。“根据科技和商业媒体报道,机器学习将防止全球变暖”,显然只有中国的新闻媒体才会发布类似的虚假新闻,可能机器学习能够识别虚假新闻吧(与分类算法有关)?事实上,机器学习还真的可以呢!
那么机器学习能做点什么呢?你又将怎样发现呢?如果你已经使用了Apache Spark进行批处理和流处理,那么现在有一东西可以帮你更好地处理。有一个你在用Spark SQL和Spark流处理的时候很可能同时用到的东西,就是Spark MLlib,Spark MLlib是一个API形式的机器学习库和统计算法。
下面简要介绍一下四种最基本的MLlib APIs,主要包括它们的作用和应用。PS:文中所有标蓝字体均可点击底部阅读原文获取详情。
统计算法
这些API主要是用来进行A-B检验或者A-B-C检验。通常在商业中,我们认为,如果两个东西的平均值相等,那么这两个东西就大体相当了。其实不一定。试想一下,一个汽车制造商换掉汽车座椅之后,做一个关于座椅舒适度的调查。对于个子矮小的用户来说,他们可能觉得座椅更舒服了,但是对于个子高大的用户来说,他们可能会觉得非常不舒服,以至于放弃购买汽车,而个子中等的用户刚好平衡了这个差异。通常,新座椅也许要更舒服一些,但是,如果没有身高超过6英尺的用户购买的话,我们还是失败了。根据Spark的假设测试,你可以先做一个皮尔逊卡方值检验或者一个柯尔莫可洛夫-斯米洛夫检验,先测试一下某个东西的“合适程度”,或者它的取值是否符合“正态分布”。这种方法基本适用于所有需要比较两串数据的情况。“合适程度”表明“你是否喜欢”,或者说新算法是否达到了“优于”旧算法的目的。
分类算法
你的属性是什么?如果你手头有一堆属性不同的东西,你可以让电脑对这些东西进行正确的归类。这里的技巧就是要把各个属性对应到各个“类”,而对于这个分类,并没有标准的正确答案,错误答案倒是不少。如果你认为某人在看一组表格并把它们归类,这就是分类算法。你在使用垃圾邮件过滤器时就已经接触过分类算法了,垃圾邮件过滤器就是过滤掉包含垃圾邮件中常见词语的邮件。分类算法还可以用来诊断患者病情或用来预测哪些用户有可能取消订购有线广播电视(一般是不看体育节目的人)。从本质上来说,分类学习是基于过去的数据标签,然后把这些标签应用到未来的发展预测。
聚类算法
当你跟一个人讨论“机器学习”的时候,如果对方只能说出k-means算法,那说明他只看过“小抄”,什么都不懂。如果你手上有一组属性,你可以找到一些关键点把这些属性归为各个类中,这就是聚类算法。你能说出各个不同类之间的区别,但是也有可能有些类是比较接近的。有可能一个大的东西和一个小的东西被归为了同一类,而另一个更小的东西却被归为了大的一类。再加上其他各种复杂的属性和不同的维度,所以其实聚类算法也有很多种。聚类算法和分类算法不同,但是聚类算法经常用来对一群人分组,二者***的区别在于,在聚类算法中,我们不知道集群前面的标签(或组)是什么,而在分类算法中,标签就很明确了。客户细分是一个常见的应用,不同的客户有不一样的喜好特点,比如可以把客户分成信用组、保留风险组或购买组(对于新鲜农产品或熟食),但是也有可能要根据已有数据进行诈骗识别的分类。
协同过滤算法
好吧,协同过滤算法是一种大众化的算法。我们公司就用协同过滤算法去提高搜索结果的精确度,我还做过一个相关的讲座,如果有足够多的人点击第二张猫的照片,那它一定比***张猫的图片好。在一个社交或电子商务环境中,如果你充分运用各种用户的“喜欢”和“不喜欢”,你就可以找到出对于大部分用户或者某一特定用户群体来说“***的”结果,这是通过个性化系统的多属性过滤来实现的,例如,当你在Google地图或Yelp上搜索餐厅(你可以根据服务质量、食物种类、内部风格、是否适合小孩、是否有情调、用户评论和消费水平等等进行过滤)时使用的就是这个原理。
上述并不是关于机器学习的所有算法,但也算是使用过程中最常见的几种算法了。以上四个大类中,每一类中都包含好几个可选算法或者衍生算法,那要选哪个呢?好吧,具体选用哪一种算法是考虑数学背景、实验过程和已知数据等各种因素的综合结果。记住,这些算法都只是你分析问题的工具而已,也有可能使用这些算法之后得到的是没有用的结果。