大数据算法基础笔记

一、分类算法:对数据分类和预测

1. KNN算法即K近邻(K Nearest Neighbour)算法,是一种基本的分类算法,其主要原理是:对于一个需要分类的数据,将其和一组已经分类标注好的样本集合进行比较,得到距离最近的K个样本,K个样本最多归属的类别,就是这个需要分类数据的类别。下面是KNN算法的原理图:

大数据算法基础笔记_第1张图片

上图中,红蓝绿三种颜色的点为样本数据,分属三种类别ω1​ω2​和ω3。对于待分类点Xu,计算和它距离最近的5个点即K为5,这5个点最多归属的类别为ω1(4个点归属ω1,1个点归属ω3​),那么Xu的类别被分类为ω1。KNN的算法流程也简单,如下面流程图所示:

大数据算法基础笔记_第2张图片

KNN算法可用于各种分类的场景,比如新闻分类、商品分类等,甚至可用于简单的文字识别。对于新闻分类,可以提前对若干新闻进行人工标注,标好新闻类别,计算好特征向量。对于一篇未分类的新闻,计算其特征向量后,跟所有已标注新闻进行距离计算,然后进一步利用KNN算法进行自动分类。

2. 那如何计算数据的距离,如何获得新闻的特征向量呢?KNN算法的关键是要比较需要分类的数据与样本数据之间的距离,这在机器学习中通常的做法是:提取数据的特征值,根据特征值组成一个n维实数向量空间(该空间也称作特征空间),然后计算向量之间的空间距离。空间之间的距离计算方法有很多种,常用的有欧氏距离、余弦距离等。对于数据xixj​,若其特征空间为n维实数向量空间Rn,即xi​ = (xi1​, xi2​, …, xin​),xj​=( xj1​, xj2​​, …, xjn​​),则其欧氏距离计算公式为:

这个欧式距离公式其实初中就学过,平面几何和立体几何里两个点之间的距离,也是用这个公式计算出来的,只是平面几何(二维几何)里的n=2,立体几何(三维几何)里的n=3,而机器学习需要面对的每个数据都可能有n维的维度,即每个数据有n个特征值。但不管特征值n是多少,两个数据的空间距离计算公式还是这个欧氏计算公式。大多数机器学习算法都需要计算数据之间的距离,因此掌握数据的距离计算公式是掌握机器学习算法的基础

欧氏距离是最常用的数据计算公式,但是在文本数据以及用户评价数据的机器学习中,更常用的距离计算方法是余弦相似度,如下所示:

余弦相似度的值越接近1表示其越相似,越接近0表示其差异越大,使用余弦相似度可以消除数据的某些冗余信息,某些情况下更贴近数据的本质。比如两篇文章的特征值都是:“大数据”、“机器学习”和“Spark”,A文章的特征向量为(3, 3, 3),即这三个词出现次数都是3;B文章的特征向量为(6, 6, 6),即这三个词出现次数都是6。如果光看特征向量,这两个向量差别很大,如果用欧氏距离计算确实也很大,但是这两篇文章其实非常相似,只是篇幅不同而已,它们的余弦相似度为1,表示非常相似。

余弦相似度其实是计算向量的夹角,而欧氏距离公式是计算空间距离。余弦相似度更关注数据的相似性,比如两个用户给两件商品的打分分别是(3, 3)和(4, 4),那么两个用户对两件商品的喜好是相似的,这种情况下,余弦相似度比欧氏距离更合理。

3. 机器学习的算法需要计算距离,而计算距离需要还知道数据的特征向量,因此提取数据的特征向量是机器学习工程师的重要工作。不同数据以及不同的应用场景需要提取不同的特征值,以比较常见的文本数据为例,看如何提取文本特征向量。文本数据的特征值就是提取文本关键词,TF-IDF算法是比较常用且直观的一种文本关键词提取算法。这种算法由TF和IDF两部分构成。TF是词频(Term Frequency),表示某个单词在文档中出现的频率,一个单词在一个文档中出现的越频繁,TF值越高。词频的计算方法如下所示:

TF = 某个词在文档中出现的次数 ​/ 文档总词数

IDF是逆文档频率(Inverse Document Frequency),表示这个单词在所有文档中的稀缺程度,越少文档出现这个词,IDF值越高,计算方法如下所示:

因此,TF与IDF的乘积就是TF-IDF,计算方法如下:

TF-IDF = TF × IDF

所以如果一个词在某一个文档中频繁出现,但在所有文档中却很少出现,那么这个词很可能就是这个文档的关键词。比如一篇关于原子能的技术文章,“核裂变”、“放射性”、“半衰期”等词汇会在这篇文档中频繁出现,即TF很高;但是在所有文档中出现的频率却比较低,即IDF也比较高,因此这几个词的TF-IDF值就会很高,就可能是这篇文档的关键词,也许“中国”这个词也会频繁出现,即TF也很高,但是“中国”也在很多文档中出现,那么IDF就会比较低,最后“中国”这个词的TF-IDF就很低,不会成为这个文档的关键词。

提取出关键词以后,就可以利用关键词的词频构造特征向量,比如上面例子关于原子能的文章,“核裂变”、“放射性”、“半衰期”这三个词是特征值,分别出现次数为12、9、4,那么这篇文章的特征向量就是(12, 9, 4再利用前面提到的空间距离计算公式计算与其他文档的距离,结合KNN算法就可以实现文档的自动分类

4. 贝叶斯公式是一种基于条件概率的分类算法,如果已经知道A和B的发生概率,并且知道了B发生情况下A发生的概率,可以用贝叶斯公式计算A发生的情况下B发生的概率,事实上可以根据A的情况即输入数据,判断B的概率即B的可能性,进而进行分类。

举个例子:假设一所学校里男生占60%,女生占40%,男生总是穿长裤,女生则一半穿长裤一半穿裙子。假设校园中迎面走来一个穿长裤的学生,能够推断出这个穿长裤学生是男生的概率是多少吗?答案是75%,具体算法是:

这个算法就利用了贝叶斯公式,贝叶斯公式的写法是:

意思是A发生的条件下B发生的概率,等于B发生的条件下A发生的概率,乘以B发生的概率,除以A发生的概率。还是上面这个例子,如果问迎面走来穿裙子的学生是女生的概率是多少,同样带入贝叶斯公式,可以计算出是女生的概率为100%。

贝叶斯分类的一个典型的应用场合是垃圾邮件分类,通过对样本邮件的统计,知道每个词在邮件中出现的概率P(Ai​),也知道正常邮件概率P(B0​)和垃圾邮件的概率P(B1​),还可以统计出垃圾邮件中各个词的出现概率P(Ai​∣B1​),那么一封新邮件到来,就可以根据邮件中出现的词计算P(B1​∣Ai​),即这些词出现情况下,邮件为垃圾邮件的概率,进而判断邮件是否为垃圾邮件。

现实中,贝叶斯公式等号右边的概率,可以通过对大数据的统计获得,当有新数据到来时,就可以带入上面的贝叶斯公式计算其概率,而如果设定概率超过某个值就认为其会发生,那就对这个数据进行了分类和预测,具体过程如下图所示:

大数据算法基础笔记_第3张图片

训练样本就是原始数据,有时候原始数据并不包含想要计算的维度数据,比如想用贝叶斯公式自动分类垃圾邮件,那么首先要对原始邮件进行标注,需要标注哪些邮件是正常邮件、哪些邮件是垃圾邮件。这一类需要对数据进行标注才能进行的机器学习训练也叫作有监督的机器学习

二、数据挖掘:发掘数据间的关系

5. 数据挖掘的典型应用场景有搜索排序、关联分析以及聚类。Hadoop大数据技术最早源于Google,而Google使用大数据技术最重要的应用场景就是网页排名。当使用Google进行搜索时会发现,通常在搜索的前三个结果里就能找到自己想要的网页内容,而且大概率第一个结果就是想要的网页。而排名越往后,搜索结果与期望的偏差越大。

那么Google为什么能在十几万的网页中知道最想看的网页是哪些,然后把这些页面排到最前面呢?答案是使用了一种叫PageRank的算法,这种算法根据网页的链接关系给网页打分,如果一个网页A,包含另一个网页B的超链接,那么就认为A网页给B网页投了一票,以下面四个网页A、B、C、D举例,带箭头的线条表示链接:

大数据算法基础笔记_第4张图片

B网页包含了A、D两个页面的超链接,相当于B网页给A、D每个页面投了一票,初始时所有页面都是1分,那么经过这次投票后,B给了A和D每个页面1/2分(B包含了A、D两个超链接,所以每个投票值1/2分),自己从C页面得到1/3分(C包含了A、B、D三个页面的超链接,每个投票值1/3分)。而A页面则从B、C、D分别得到1/2、1/3、1分,用公式表示就是如下的样子:

等号左边是经过一次投票后,A页面的PageRank分值;等号右边每一项的分子是包含A页面超链接的页面的PageRank分值,分母是该页面包含的超链接数目。这样经过一次计算后,每个页面的PageRank分值就会重新分配,重复同样的算法过程,经过几次计算后,根据每个页面PageRank分值进行排序,就得到一个页面重要程度的排名表。根据这个排名表,将用户搜索出来的网页结果排序,排在前面的通常也正是用户想要的结果。

但是这个算法还有个问题,如果某个页面只包含指向自己的超链接,这样的话其他页面不断给它送分,而自己一分不出,随着计算执行次数越多,它的分值也就越高,这显然是不合理的。这种情况就像下图所示,A页面只包含指向自己的超链接:

大数据算法基础笔记_第5张图片

Google的解决方案是,设想浏览一个页面的时候,有一定概率不是点击超链接,而是在地址栏输入一个URL访问其他页面,表示在公式上就是:

上面1−α)就是跳转到其他任何页面的概率,通常取经验值0.15(即α为0.85),因为有一定概率输入的URL是自己的,所以加上上面公式最后一项,其中分母4表示所有网页的总数。那么对于N个网页,任何一个页面Pi​的PageRank计算公式如下:

公式中,Pj​M(Pi​)表示所有包含有Pi​超链接的Pj​L(Pj​)表示Pj​页面包含的超链接数,N表示所有的网页总和。由于Google要对全世界的网页进行排名,所以这里的N可能是一个万亿级的数字,一开始将所有页面的PageRank值设为1,带入上面公式计算,每个页面都得到一个新的PageRank值,再把这些新的PageRank值带入上面的公式,继续得到更新的PageRank值,如此迭代计算,直到所有页面的PageRank值几乎不再有大的变化才停止

6. 关联分析是大数据计算的重要场景之一。通过数据挖掘,商家发现尿不湿和啤酒经常会同时被购买,所以商家就把啤酒和尿不湿摆放在一起促进销售。这个案例曾经被质疑是假的,因为没有人见过超市把啤酒和尿布放在一起卖。通过观察京东上的沃尔玛旗舰店,哈尔滨啤酒下方的六个店长推荐,两个是儿童纸尿裤,还有两个儿童奶粉,如下图所示:

大数据算法基础笔记_第6张图片

在传统商超确实没有见过把啤酒和纸尿裤放在一起的情况,可能是因为传统商超的物理货架分区策略限制它没有办法这么做,而啤酒和尿不湿存在关联关系则确实是大数据中存在的规律,在电商网站就可以轻易进行关联推荐。通过商品订单,可以发现频繁出现在同一个购物车里商品间的关联关系,这种大数据关联分析也被称作是“购物车分析”,频繁出现的商品组合也被称作是“频繁模式”。

在深入关联分析前需要先了解两个基本概念,一个是支持度,一个是置信度支持度是指一组频繁模式的出现概率,比如(啤酒,尿不湿)是一组频繁模式,它的支持度是4%,也就是说在所有订单中,同时出现啤酒和尿不湿这两件商品的概率是4%。置信度用于衡量频繁模式内部的关联关系,如果出现尿不湿的订单全部都包含啤酒,那么就可以说购买尿不湿后购买啤酒的置信度是100%;如果出现啤酒的订单中有20%包含尿不湿,那么就可以说购买啤酒后购买尿不湿的置信度是20%。

电商网站的商品种类和历史订单数据非常庞大,虽然有大数据技术但是资源依然是有限的,那应该从哪里考虑着手,可以使用最少计算资源找到满足最小支持度的频繁模式?找到这种频繁模式经典算法是Apriori算法,它的步骤是:

(1)设置最小支持度阈值。

(2)寻找满足最小支持度的单件商品,也就是单件商品出现在所有订单中的概率不低于最小支持度。

(3)从第2步找到的所有满足最小支持度的单件商品中,进行两两组合,寻找满足最小支持度的两件商品组合,也就是两件商品出现在同一个订单中概率不低于最小支持度。

(4)从第3步找到的所有满足最小支持度的两件商品,以及第2步找到的满足最小支持度的单件商品进行组合,寻找满足最小支持度的三件商品组合。

(5)以此类推,找到所有满足最小支持度的商品组合。

Apriori算法极大降低了需要计算的商品组合数目,这个算法的原理是,如果一个商品组合不满足最小支持度,那么所有包含这个商品组合的其他商品组合也不满足最小支持度。所以从最小商品组合,也就是一件商品开始计算最小支持度,逐渐迭代,进而筛选出所有满足最小支持度的频繁模式。通过关联分析,可以发现看似不相关商品的关联关系,并利用这些关系进行商品营销。

7. 分类算法主要解决如何将一个数据分到几个确定类别中的一类里去。分类算法通常需要样本数据训练模型,再利用模型进行数据分类,那么一堆样本数据又如何知道各自的类别呢?样本数据归类一方面可以通过人工手动打标签,另一方面也可以利用算法进行自动归类,即所谓的“聚类”。聚类就是对一批数据进行自动归类,如下图这样的一组数据,一眼就可以看出可以分为四组:

大数据算法基础笔记_第7张图片

但是如果这些数据不是画在平面上,而是以二维坐标的方式给出的一堆数据,就不那么容易看出来了。K-means是一种在给定分组个数后,能够对数据进行自动归类即聚类的算法。计算过程如下图所示:

大数据算法基础笔记_第8张图片

(1)随机在图中取K个种子点,图中K=2,即图中的实心小圆点。

(2)求图中所有点到这K个种子点的距离,假如一个点离种子点X最近,那么这个点属于X点群。在图中可以看到A、B属于上方的种子点,C、D、E属于中部的种子点。

(3)对已经分好组的两组数据,分别求其中心点。对于图中二维平面上的数据,求中心点最简单暴力的算法就是对同一个分组中所有点的X和Y坐标分别求平均值,得到的就是下一个中心点。

(4)重复第2步和第3步,直到每个分组的中心点不再移动。这时候,距每个中心点最近的点数据聚类为同一组数据

K-means算法原理简单,在知道分组个数的情况下效果非常好,是聚类经典算法。通过聚类分析可以发现事物的内在规律:具有相似购买习惯的用户群体被聚类为一组,一方面可以直接针对不同分组用户进行差别营销,线下渠道还可以根据分组情况进行市场划分;另一方面可以进一步分析,比如同组用户的其他统计特征还有哪些,并发现一些有价值的模式。

上面提到的数据挖掘的几个典型算法,PageRank算法通过挖掘链接关系,发现互联网网页的排名权重;Apriori算法通过购物车分析,发现商品的频繁模式;K-means算法则可以进行自动数据聚类,这些算法不需要人工事先对数据进行标注,一般被称作无监督算法。再上面的分类算法需要样本数据,而这些样本数据是需要人工进行预先标注的,因此分类算法一般都是有监督算法

三、推荐引擎:预测用户的喜好

8. 在用户对自己需求相对明确时,可以用搜索引擎通过关键字搜索方便地找到自己需要的信息。但有些时候,搜索引擎并不能完全满足用户对信息发现的需求。一方面,用户有时候其实对自己的需求并不明确,期望系统能主动推荐一些自己感兴趣的内容或商品;另一方面,企业也希望能够通过更多渠道向用户推荐信息和商品,在改善用户体验的同时,提高成交转化率,获得更多营收。常用的推荐算法有:基于人口统计的推荐、基于商品属性的推荐、基于用户的协同过滤推荐、基于商品的协同过滤推荐。

基于人口统计的推荐是相对比较简单的一种推荐算法,根据用户的基本信息进行分类,然后将商品推荐给同类用户,如下图所示:

大数据算法基础笔记_第9张图片

从图中可以看到,用户A和用户C有相近的人口统计信息,划分为同类,那么用户A喜欢(购买过)的商品D就可以推荐给用户C。基于人口统计的推荐比较简单,只要有用户的基本信息就可以进行分类,新注册的用户总可以分类到某一类别,那么立即就可以对他进行推荐,没有所谓的“冷启动”问题,也就是不会因为不知道用户的历史行为数据,而不知道该如何向用户推荐。而且这种推荐算法也不依赖商品的数据,和要推荐的领域无关,不管是服装还是美食,不管是电影还是旅游目的地,都可以进行推荐,甚至可以混杂在一起进行推荐。

当然也正因为这种推荐算法比较简单,对于稍微精细一点的场景,推荐效果就比较差了。因此,在人口统计信息的基础上,根据用户浏览、购买信息和其他相关信息,进一步细化用户的分类信息,给用户贴上更多的标签,比如家庭成员、婚姻状况、居住地、学历、专业、工作等,即所谓的用户画像,根据用户画像进行更精细的推荐,并进一步把用户喜好当做标签完善用户画像,再利用更完善的用户画像进行推荐,如此不断迭代优化用户画像和推荐质量。

前面一个算法是基于用户的属性进行分类,然后根据同类用户的行为进行推荐。而基于商品属性的推荐则是将商品的属性进行分类,然后根据用户的历史行为进行推荐,如下图所示:

大数据算法基础笔记_第10张图片

从图中可以看到,电影A和电影D有相似的属性,被划分为同类商品,如果用户A喜欢电影A,那么就可以向用户A推荐电影D,比如给喜欢《星球大战》的用户推荐《星际迷航》。一般来说,相对基于人口统计的推荐,基于商品属性的推荐会更符合用户的口味,推荐效果相对更好一点。

但是基于商品属性的推荐需要对商品属性进行全面的分析和建模,难度相对也更大一点,在实践中一种简单的做法是,提取商品描述的关键词和商品的标签作为商品的属性。此外,基于商品属性的推荐依赖用户的历史行为数据,如果是新用户进来,没有历史数据,就没有办法进行推荐了,即存在“冷启动”问题

9. 而基于用户的协同过滤推荐是根据用户的喜好进行用户分类,常用的就是前面提到的KNN算法,寻找和当前用户喜好最相近的K个用户,然后根据这些用户的喜好为当前用户进行推荐,如下图所示:

大数据算法基础笔记_第11张图片

从图中可以看到,用户A喜欢商品A、商品B和商品D,用户C喜欢商品A和商品B,那么用户A和用户C就有相似的喜好,可以归为一类,然后将用户A喜欢的商品D推荐给用户C。

基于用户的协同过滤推荐和基于人口统计的推荐都是将用户分类后,根据同类用户的喜好为当前用户进行推荐。不同的是,基于人口统计的推荐仅仅根据用户的个人信息进行分类,分类的粒度比较大,准确性也较差;而基于用户的协同过滤推荐则根据用户历史喜好进行分类,能够更准确地反映用户的喜好类别,推荐效果也更好一点。例如豆瓣推荐电影,就是基于用户的协同过滤进行推荐。

基于商品的协同过滤推荐是根据用户的喜好对商品进行分类,如果两个商品,喜欢它们的用户具有较高的重叠性,就认为它们的距离相近,划分为同类商品,然后进行推荐,如下图所示:

大数据算法基础笔记_第12张图片

从图中可以看到,用户A喜欢商品A、商品B和商品D,用户B喜欢商品B、商品C和商品D,那么商品B和商品D的距离最近,划分为同类商品;而用户C喜欢商品B,那么就可以为其推荐商品D。商品的分类相对用户的分类更为稳定,通常情况下,商品的数目也少于用户的数目,因此使用基于商品的协同过滤推荐,计算量和复杂度小于基于用户的协同过滤推荐

除了上面这些推荐算法,还有基于模型的推荐,根据用户和商品数据,训练数学模型,然后进行推荐。前面提到过的关联分析,也可以进行推荐。在实践中,通常会混合应用多种算法进行推荐,特别是大型电商网站,推荐效果每进步一点,都可能会带来巨大的营收转化。

四、机器学习的数学原理

10. 所谓的人工智能,在技术层面很多时候就是指机器学习,通过选择特定的算法对样本数据进行计算,获得一个计算模型,并利用这个模型,对以前未曾见过的数据进行预测,如果这个预测在一定程度上和事实相符,就认为机器像人一样具有某种智能,即人工智能。这个过程和人类的学习成长非常类似,也是经历一些事情(获得样本数据),进行分析总结(寻找算法),产生经验(产生模型),然后利用经验(模型)指导自己的日常行为,如下图所示:

大数据算法基础笔记_第13张图片

机器学习的完整过程也是如此,利用样本数据经过算法训练得到模型,这个模型会和预测系统部署在一起,当外部需要预测的数据到达预测系统的时候,预测系统调用模型,就可以立即计算出预测结果。因此,构建一个机器学习系统,需要有三个关键要素:样本、模型、算法

样本就是常说的“训练数据”,包括输入和结果两部分。比如要做一个自动化新闻分类的机器学习系统,对于采集的每一篇新闻,能够自动发送到对应新闻分类频道里面,比如体育、军事、财经等,这时候就需要批量的新闻和其对应的分类类别作为训练数据。通常随机选取一批现成的新闻素材就可以,但是分类需要人手工进行标注,也就是需要有人阅读每篇新闻,根据其内容打上对应的分类标签。在数学上,样本通常表示为:

其中xn​表示一个输入,比如一篇新闻;yn​表示一个结果,比如这篇新闻对应的类别。样本的数量和质量对机器学习的效果至关重要,如果样本量太少,或者样本分布不均衡,对训练出来的模型就有很大的影响。就像一个人见得世面少、读书也少,就更容易产生偏见和刻板印象。

模型就是映射样本输入与样本结果的函数,可能是一个条件概率分布,也可能是一个决策函数。一个具体的机器学习系统所有可能的函数构成了模型的假设空间,数学表示是:

其中X是样本输入,Y是样本输出,f就是建立XY映射关系的函数。所有f的可能结果构成了模型的假设空间F。很多时候F的函数类型是明确的,需要计算的是函数的参数,比如确定f函数为一个线性函数,那么f的函数表示就可以写为:

这时候需要计算的就是a1​a0​两个参数的值。这种情况下模型的假设空间的数学表示是:

其中θf函数的参数取值空间,一个n维欧氏空间,被称作参数空间。

11. 算法就是要从模型的假设空间中寻找一个最优的函数,使得样本空间的输入X经过该函数的映射得到的f(X),和真实的Y值之间的距离最小。这个最优的函数通常没办法直接计算得到,即没有解析解,需要用数值计算的方法不断迭代求解。因此如何寻找到f函数的全局最优解,以及使寻找过程尽量高效,就构成了机器学习的算法

如何保证f函数或者f函数的参数空间最接近最优解,就是算法的策略。机器学习中用损失函数来评估模型是否最接近最优解,损失函数用来计算模型预测值与真实值的差距,常用的有0-1损失函数、平方损失函数、绝对损失函数、对数损失函数等。以平方损失函数为例,损失函数如下:

对于一个给定的样本数据集:

模型f(X)相对于真实值的平均损失为每个样本的损失函数的求和平均值:

这个值被称作经验风险,如果样本量足够大,那么使经验风险最小的f函数就是模型的最优解,即求:

但是相对于样本空间的可能取值范围,实际中使用的样本量总是有限的,可能会出现使样本经验风险最小的模型f函数并不能使实际预测值的损失函数最小,这种情况被称作过拟合,即一味追求经验风险最小,而使模型f函数变得过于复杂,偏离了最优解。这种情况下,需要引入结构风险以防止过拟合,结构风险表示为:

在经验风险的基础上加上λJ(f),其中J(f)表示模型f的复杂度,模型越复杂J(f)越大。要使结构风险最小,就要使经验风险和模型复杂度同时小,求解模型最优解就变成求解结构风险最小值:

上面提到的就是机器学习的数学原理:给定模型类型,也就是给定函数类型的情况下,如何寻找使结构风险最小的函数表达式由于函数类型已经给定,实际上就是求函数的参数,各种有样本的机器学习算法,基本上都是在各种模型的假设空间上求解结构风险最小值的过程,理解了这一点也就理解了各种机器学习算法的推导过程。

那么为什么机器学习要解偏微分方程?机器学习跟偏微分方程究竟是什么关系?事实上,关系很简单。机器学习要从假设空间寻找最优函数,而最优函数就是使样本数据的函数结果值和真实值距离最小的那个函数给定函数模型,求最优函数就是求函数的参数值。给定不同参数,得到不同函数值和真实值的距离,这个距离就是损失,损失函数是关于模型参数的函数,距离越小,损失越小。最小损失值对应的函数参数就是最优函数

数学上求极小值就是求一阶导数,计算每个参数的一阶导数为零的偏微分方程组,就可以算出最优函数的参数值。这就是为什么机器学习要计算偏微分方程的原因。

五、从感知机到神经网络算法

12. 感知机是一种比较简单的二分类模型,将输入特征分类为+1、-1两类,就像下图所示,一条直线将平面上的两类点分类:

大数据算法基础笔记_第14张图片

二维平面上的点只有两个输入特征(横轴坐标和纵轴坐标),一条直线就可以分类。如果输入数据有更多维度的特征,那么就需要建立同样多维度的模型,高维度上的分类模型也被称为超平面。感知机模型如下:

其中x代表输入的特征空间向量,输出空间是{-1, +1},w为权值向量,b叫作偏置,sign是一个符号函数,如下所示:

wx+b=0为超平面的方程,当感知机输出为+1表示输入值在超平面的上方,当感知机输出为-1表示输入值在超平面的下方。训练感知机模型就是要计算出参数wb的值,当有新的数据需要分类的时候,输入感知机模型就可以计算出+1或者-1从而进行分类。由于输出空间只有{-1, +1}两个值,所以只有误分类的时候,才会有模型计算值和样本真实值之间的偏差,偏差之和就是感知机的损失函数,如下所示:

其中M为误分类点集合,误分类点越少,损失函数的值越小;如果没有误分类点,损失函数值为 0。求模型的参数wb,就是求损失函数的极小值。数学上求函数的极小值就是求函数的一阶导数,但是感知机损失函数用统计求和函数表达,没办法计算解析解。机器学习采用梯度下降法求损失函数极小值,实质上就是求导过程的数值计算方法。对于误分类点集合M,损失函数L(w,b)变化的梯度,就是某个函数变量的变化引起的函数值的变化,根据感知机损失函数可知:

大数据算法基础笔记_第15张图片

使用梯度下降更新wb,不断迭代使损失函数L(w,b)不断减小,直到为0也就是没有误分类点。感知机算法的实现过程为如下几步:

(1)选择初始值w0​、b0​。

(2)在样本集合中选择样本数据xi​, yi​。

(3)如果yi​(wxi​ + b) < 0,表示yi​为误分类点,那么w = w + ηyi​xi​、b = b + ηyi​,在梯度方向校正wb。其中η为步长,步长选择要适当,步长太长会导致每次计算调整太大出现震荡;步长太短又会导致收敛速度慢、计算时间长

(4)跳转回第2步,直到样本集合中没有误分类点,即全部样本数据yi​(wxi​ + b) ≥ 0。

13. 现在所说的神经网络,通常是指机器学习所使用的“人工神经网络”,是对人脑神经网络的一种模拟。人脑神经网络由许多神经元构成,每个神经元有多个树突,负责接收其他神经元的输出信号,神经元细胞完成对输入信号的处理,转换成输出信号,通过突触传递给其他神经元。神经元细胞的输出只有0或者1两种输出,但是人脑大约有140亿个神经元,这些神经元组成一个神经网络,前面的神经元输出作为后面的神经元输入进一步处理,如下图所示:

大数据算法基础笔记_第16张图片

人脑神经元可以通过感知机进行模拟,每个感知机相当于一个神经元,使用sign函数的感知机输出也是只有两个值,跟人脑神经元一样,如下图所示:

大数据算法基础笔记_第17张图片

x1​, x2​, x3​相当于神经元的树突,实现信号的输入;sum() + bsign函数相当于神经元细胞,完成输入的计算;y是神经元的输出,上图用数学形式表达的样子如下所示:

它是感知机y = sign(wx + b)的向量展开形式。将感知机组成一层或者多层网络状结构,就构成了机器学习神经网络,下图就是一个两层神经网络:

大数据算法基础笔记_第18张图片

在多层神经网络中,每一层都由多个感知机组成。将输入的特征向量x传递给第一层的每一个感知机,运算以后作为输出传递给下一层的每一个感知机,直到最后一层感知机产生最终的输出结果,这就是机器学习神经网络的实现过程。以神经网络实现手写数字识别为例,样本如下图所示:

大数据算法基础笔记_第19张图片

这个手写数字样本中的每个数字都是一个28×28像素的图片,把每个像素当作一个特征值,这样每个数字就对应784个输入特征。因为输出需要判别10个数字,所以第二层(输出层)的感知机个数就是10个,每个感知机通过0或者1输出是否为对应的数字,如下图所示:

大数据算法基础笔记_第20张图片

使用梯度下降算法,利用样本数据,可以训练神经网络识别手写数字,计算每个感知机的wb参数值。当所有的感知机参数都计算出来,神经网络也就训练出来了。这样对于新输入的手写数字图片,可以进行自动识别,输出对应的数字。

训练神经网络的时候采用一种反向传播的算法,针对每个样本,从最后一层,也就是输出层开始,利用样本结果使用梯度下降算法计算每个感知机的参数,然后以这些参数计算出来的结果作为倒数第二层的输出计算该层的参数。然后逐层倒推,反向传播,计算完所有感知机的参数。当选择两层神经网络的时候,原始感知机的sign函数表现并不太好,更常用的是sigmoid函数,如下图所示:

大数据算法基础笔记_第21张图片

对于两层以上的多层神经网络,ReLU函数的效果更好一些。ReLU函数表达式非常简单,如下所示:

y = max(x, 0)

x大于0则输出x;当x小于0则输出0。神经网络根据组织和训练方式的不同有很多类型,当神经网络层数比较多时,称它们为深度学习神经网络

14. 前两年的的围棋程序AlphaGo则是一种卷积神经网络,对于一个19×19的围棋棋盘,在下棋过程中每个位置有黑、白、空三种状态,将其提取为特征就是神经网络的输入(事实上,输入特征还需要包括气、眼、吃等围棋规则盘面信息),而输出设置19×19即361个感知机产生对应的落子,然后将大量人类的棋谱,即当前盘面下的最佳落子策略作为训练样本,就可以训练出一个智能下棋的神经网络。

但是这样根据人类棋谱训练得到神经网络最多就是人类顶尖高手的水平,AlphaGo之所以能够碾压人类棋手还依赖一种叫蒙特卡洛搜索树的算法,对每一次落子以后的对弈过程进行搜索,判断出真正的最佳落子策略。利用蒙特卡洛搜索树结合神经网络,AlphaGo还可以进行自我对弈,不断进行自我强化,找到近乎绝对意义上的最优落子策略。

一般说来,传统机器学习算法的结果是可以解释的,KNN算法的分类结果为什么是这样,贝叶斯分类的结果为什么是这样,都是可以利用样本数据和算法来解释的。如果分类效果不好,是样本数据有问题,还是算法过程有问题,也都可以分析出来。但是一般认为,神经网络计算的结果是不可解释的,为什么神经网络会分类输出这样的结果,人们无法解释;输出结果不满意,也无法找到原因,只能不断尝试。

你可能感兴趣的:(大数据,大数据算法)