一种基于Spark改进的K-Means算法的电商餐饮数据分析方法与流程

文档序号:17466067发布日期:2019-04-20 05:31阅读:446来源:国知局
一种基于Spark改进的K-Means算法的电商餐饮数据分析方法与流程
本发明属于大数据分析挖掘
技术领域
,尤其是一种基于spark平台改进的聚类算法在电商餐饮数据分析领域中的应用。
背景技术
:21世纪以来,随着科技的不断进步,我们的社会也越来越信息化,随之而来各行各业的庞大数据与信息化产业也是相辅相成。大数据的存在,给我们的生活,商业,医疗,航天,农业,交通以及其他领域的发展,起了非常重要的作用。因此,挖掘数据之间更加深层次关系,对各领域的预判研究方面有着很重要的价值意义。但是面对数据,分析技术的投入和信息获取之间存在一个巨大的矛盾,如何高效快速的提取所需要的信息及知识、去除不需要的次要或无用信息、提高数据挖掘在各领域的实用性是一个很重要的研究方向。在信息化产业高速发展情况下,数据以几乎指数级别的速度增长,对于数据的研究方法也是具有多样性,其中聚类分析是其中的一种重要的分析方法,也是分析研究人员使用频率最高的方法之一。但传统的数据分析往往受限于数据处理平台和技术,无法满足现阶段研究发展的需求。但近年来,随着hadoop平台和spark平台的相继出现,为数据挖掘分析提供了良好的分布式集群框架,针对性的解决了大量数据的存储和运行难点。相比于hadoop平台,spark平台在hadoopmapreduce框架的基础上,通过增加rdd和本身的数据运算中间结果存储于内存这主要两大特点,使得spark平台具有更高的容错性和高扩展性。技术实现要素:为了提高面对信息化产业日益产生的巨大电商餐饮数据的分析挖掘工作效率,本发明利用spark提供的map和combine算子;内部最常用的rdd的数据结构;spark中间计算结果存于内存等优势,与一种对k-means算法的初始化聚类中心部分进行改进的聚类算法结合,实现对北京市一些电商餐饮行业的数据分析,从中比较改进的算法的优越性和算法在spark平台与单机平台的运行时间来体现spark集群并行处理数据速度的优越性。本发明解决其技术问题所采用的技术方案是:一种基于spark改进的k-means算法的电商餐饮数据分析方法,所述方法包括以下步骤:步骤1,搭建实验平台及其配置,为实现并行k-means聚类算法搭建执行环境,过程如下:1.1配置master的spark的分布式环境,如下:1.1.1下载spark2.1.0安装包,解压并进行安装;1.1.2修改相关配置文件:进入/spark2.1.0-bin-hadoop2.7.5/conf目录下,修改两个文件。其中一个是配置spark-env.sh文件,设置变量scala_hone、java_home、spark_master_ip、spark_woker_memory和hadoop_conf_dir的值;另一个是配置slave文件,将master和各节点添加到这个文件中;1.2配置scala开发环境:因为spark平台使用scala语言进行编译,所以需要安装scala;下载到.msi文件以后,按照步骤进行安装,安装完成后,设置全局变量scala_home为scala的安装路径;最后进行测试,查看scala是否安装成功,打开一个新的cmd窗口,输入默认的scala指令,如果交互命令可以正常循环执行,表示安装成功;步骤2,原始数据集的获取,过程如下:实验数据是选取餐饮商铺的信息数据,数据对象包括经度、维度、城市、店名、地址、综合评分、点评数、环境评分、口味评分、服务评分和商圈数据信息;步骤3,对原始数据集进行预处理,补充空缺数据和删除无用数据;步骤4,使用scalable语言实现k-means算法在spark中的开发,过程如下:4.1k-means算法以距离作为数据对象之间的相似性度量标准,来对数据进行聚类,属于无监督学习,采用欧氏距离来表示数据之间的相似性,欧氏距离的计算公式:其中,xi,xj分别代表数据集中任意两个数据对象,n表示每个数据对象总属性的个数;k-means聚类过程中的每一次迭代,聚类中心都要从新计算并更新,计算新的聚类中心,就是计算出这个簇中,所有对象的均值,假设第k个簇的聚类中心表示为centerk,计算这个簇的新的聚类中心的方式如下:其中,ck是第k类簇,|ck|是第k类簇中数据对象的个数。这里的求和是指第k类簇ck中所有元素在每列属性上的和,所以centerk是一个长度为d的向量,表示如下:centerk=[centerk1,centerk2,centerk3,...,centerkd]迭代的终止条件有两种,一种是设置迭代次数t,当达到第t次迭代的时候,程序终止迭代,此时得到的聚类结果即为最终的聚类结果;另一种是使用误差平方和作为程序迭代终止的阀值,该函数式表示如下:其中,k表示类簇的数目,当两次迭代的e的差值小于某一定的阀值的时候,即δe<δ,程序终止迭代;4.2对初始化聚类中心部分的算法改进,步骤如下:4.2.1随机从预处理后的数据集中随机选择个数据对象作为初始中心点ci,其中,i∈(1,2,3,...k),数据集的数据对象假设一共有n个,将数据对象称作为数据点,数据点是指数据集中数据对象的三维特征组成的向量;ci=rand([v(1,j),v(2,j),v(3,j))=[v(1,i),v(2,i),v(3,i)]其中,j∈(1,2,3,...n)4.2.2计算数据集中每个点到最近的聚类中心点ci(ci+1)的距离dj,对所有的dj做和,记为sumi,首次使用的是ci,循环内部使用的是ci+1;4.2.3再取一个随机点,然后使用权重的方式算出下一个初始聚类中心点,随机点ri的取值方式是,随机值ri∈(0,sumi),对数据集做ri=ri-dj的循环运算,直到ri<0,那么,对应的dj就是下一个聚类中心点ci+1=dj;4.2.4重复4.2.2和4.2.3以上两个步骤,直至第k个中心点被选出,选取初始中心点算法结束;4.3改进的k-means算法在spark中实现步骤:4.3.1利用hdfs、rdd对原始数据进行并行处理先对数据集里面的定量特征进行数值化处理和去除数据对象里面不需要的特征维度,并将处理后的数据源存放至hdfs;4.3.2执行4.2步骤的聚类中心初始化过程,得到所需要的k个初始聚类中心;4.3.3执行迭代操作,满足参考迭代次数或者得到的新的聚类中心点超过了所规定的临界值范围,则迭代结束,否则继续执行迭代操作;4.3.4得到新的数据变量,从而得到新的聚类中心点;4.3.5更新聚类中心点和迭代次数;步骤5,将编辑好的程序进行编译执行,最终完成聚类过程。进一步,所述方法还包括以下步骤:步骤6,对聚类后的数据进行可视化。再进一步,所述方法还包括以下步骤:步骤7,分别进行单板机和集群下的执行速度测试:分别将程序在单板机和不同worker节点的集群下,记录整个数据处理所用时间。本发明的技术构思为:本发明利用spark提供的map和combine算子;内部最常用的rdd的数据结构;spark中间计算结果存于内存等优势,首先从hdfs读取数据集,并创建所需要的rdd,然后执行本实验改进的聚类中心初始化方法,更高概率的得到距离较远的初始聚类中心点,进一步进行迭代,得到新的聚类中心,在新的聚类中心下进行迭代操作,当各部分的聚类操作都完成以后,汇聚各部分的聚类结果,计算距离新的中心点,直到迭代完成,最终得到聚类结果。本发明的有益效果主要表现在:一方面,在spark平台上,运行函数是与rdd直接相互关联的,也就是每个rdd里面所分配的数据仍旧向中心点进行聚类,并且并行执行,运行结果不需要多次返回从新计算,那么使用集群处理数据要比在单板机上处理快很多;另一方面,在算法方面,与原始算法的直接随机取k个初始化聚类中心点相比,改进了初始化中心点的过程,使得选取的随机点之间的距离尽可能的大的概率要比原始算法的直接随机选取的概率要高。附图说明图1为使用spark并行运行k-means算法实现对数据集的聚类的整体流程图。图2为k-means聚类算法在单机和spark平台上设置不同数目节点上的运行时间对比图。图3为对北京市餐饮商铺的聚类结果三维散点示意图。具体实施方式下面结合附图对本发明作进一步描述。参照图1~图3,一种基于spark改进的k-means算法的电商餐饮数据分析方法,包括以下步骤:步骤1,搭建实验平台及其配置,为实现并行k-means聚类算法搭建必要的执行环境,过程如下:1.1配置master的spark的分布式环境,如下:1.1.1下载spark2.1.0安装包,解压并进行安装;1.1.2修改相关配置文件:进入/spark2.1.0-bin-hadoop2.7.5/conf目录下,修改两个文件。其中一个是配置spark-env.sh文件,设置变量scala_hone、java_home、spark_master_ip、spark_woker_memory和hadoop_conf_dir的值;另一个是配置slave文件,将master和各节点添加到这个文件中;1.2配置scala开发环境:因为spark平台使用scala语言进行编译,所以需要安装scala;下载到.msi文件以后,按照步骤进行安装,安装完成后,设置全局变量scala_home为scala的安装路径;最后进行测试,查看scala是否安装成功。打开一个新的cmd窗口,输入默认的scala指令,如果交互命令可以正常循环执行,表示安装成功。步骤2,原始数据集的获取2.1实验数据是选取北京市的餐饮商铺的一些信息数据,数据对象包括经度、维度、城市、店名、地址、综合评分、点评数、环境评分、口味评分、服务评分、商圈等112065条数据信息。步骤3,对于本数据是研究整体背景餐饮商铺的整体分布情况和商铺的综合评分与点评数量与环境评分三者的相关程度,该实验所需要的字段有经度、维度、综合评分、点评数、环境评分。由上图的原始数据可以看出,很多数据存在空缺值,并且原始数据集的一些字段在试验中不需要的,比如,商铺地址,点名等。因此要对原始的数据集进行预处理;步骤4,使用scalable语言实现k-means算法在spark中的开发,过程如下:4.1k-means算法以距离作为数据对象之间的相似性度量标准,来对数据进行聚类,属于无监督学习,该方法通常采用欧氏距离来表示数据之间的相似性,欧氏距离的计算公式:其中,xi,xj分别代表数据集中任意两个数据对象,n表示每个数据对象总属性的个数;k-means聚类过程中的每一次迭代,聚类中心都要从新计算并更新,计算新的聚类中心,就是计算出这个簇中,所有对象的均值,假设第k个簇的聚类中心表示为centerk,计算这个簇的新的聚类中心的方式如下:其中,ck是第k类簇,|ck|是第k类簇中数据对象的个数。这里的求和是指第k类簇ck中所有元素在每列属性上的和,所以centerk是一个长度为d的向量,表示如下:centerk=[centerk1,centerk2,centerk3,...,centerkd]该算法迭代的终止条件一般有两种,一种是设置迭代次数t,当达到第t次迭代的时候,程序终止迭代,此时得到的聚类结果即为最终的聚类结果;另一种是使用误差平方和作为程序迭代终止的阀值,该函数式表示如下:其中,k表示类簇的数目。当两次迭代的e的差值小于某一定的阀值的时候,即δe<δ,程序终止迭代。4.2对初始化聚类中心部分的算法改进原始k-means的算法在初始化聚类中心的步骤,是使用随机算子,然后产生k个初始聚类中心点。由于初始点产生的随机性,可能初始聚类点之间的距离很小,或者选取的是数据集的噪声点等,往往会导致聚类结果很差。因此,选择初始化聚类中心点之间的距离尽可能的大,对初始化聚类中心这一部分做了如下的改进,步骤如下:4.2.1随机从预处理后的数据集中随机选择个数据对象作为初始中心点ci。其中,i∈(1,2,3,...k),数据集的数据对象假设一共有n个。为了更好的理解,将数据对象称作为数据点,这里的点实际是指数据集中数据对象的三维特征组成的向量;;ci=rand([v(1,j),v(2,j),v(3,j))=[v(1,i),v(2,i),v(3,i)]其中,j∈(1,2,3,...n)4.2.2计算数据集中每个点到最近的聚类中心点ci(ci+1)的距离dj,对所有的dj做和,记为sumi。算法首次使用的是ci,循环内部使用的是ci+1;4.2.3再取一个随机点,然后使用权重的方式算出下一个初始聚类中心点,随机点ri的取值方式是,随机值ri∈(0,sumi),对数据集做ri=ri-dj的循环运算,直到ri<0,那么,对应的dj就是下一个聚类中心点ci+1=dj;4.2.4重复4.2.2和4.2.3以上两个步骤,直至第k个中心点被选出,选取初始中心点算法结束;4.3改进的k-means算法在spark中实现步骤:4.3.1利用hdfs、rdd对原始数据进行并行处理先对数据集里面的定量特征进行数值化处理和去除数据对象里面不需要的特征维度,并将处理后的数据源存放至hdfs;4.3.2执行4.2步骤的聚类中心初始化过程,得到所需要的k个初始聚类中心;4.3.3算法内部执行迭代操作,满足参考迭代次数或者得到的新的聚类中心点超过了所规定的临界值范围,则迭代结束,否则继续执行迭代操作。4.3.4得到新的数据变量,从而得到新的聚类中心点。4.3.5更新聚类中心点和迭代次数。步骤5,将编辑好的程序进行编译执行,最终完成聚类过程。步骤6,对聚类后的数据进行可视化步骤7,分别进行单板机和集群下程序的执行速度测试:为了更好的证明spark集群并行处理数据的优越性,这一步骤分别将程序在单板机和不同worker节点的集群下,记录整个数据处理所用时间。数据最终运行时间在图2展示出来。为验证算法改进部分的有效性,下面对改进算法和spark的ml库所带的原始算法从轮廓系数、ch(calinski-harabaz)指标来评估聚类的效果。轮廓系数是聚类是否合理、有效的度量。对于每个样本,轮廓系数的表达式如下:其中,j∈(1,2,3,...n),aj表示与其他类别中样本的平均距离,bj是与它距离最近不同类别中样本的平均距离。也可以表示成下式:轮廓系数取值为[-1,1],其值越大说明同类之间样本距离很小,不同类别之间的样本距离越大,所以值越大越好。对于一个样本集合,它的轮廓系数是所有样本的轮廓系数的平均值。ch指标是表示同一类别内的稠密程度和不同类别之间的离散程度的,它的数学表达式如下:其中,m为训练集的样本数;k为类别数,在本实验中,k=3;bk为类别之间的协方差矩阵;wk为类别内部的协方差矩阵,tr表示矩阵的迹。如果类别内部的协方差越小,类别间的协方差越大,那么分数值也就越大,说明聚类效果越好。如果数值较小,那么表示不同簇之间的界限不明显,聚类效果也就越差。ml-k-means算法和改进算法的两个指标大小分别如表1所示:轮廓系数ch指标ml-k-means0.816647557.9709change-k-means0.859650846.2341表1从表1中可以看出,改进的算法在轮廓系数和ch指标上与spark的ml库提供的算法相比较,两个系数均高于原始算法,虽然在轮廓系数指标中提高不太明显,但是ch指标上提高是比较大的,因此整体上,改进的算法的聚类效果要优与ml库自带的算法。图1是k-means算法在spark框架上数据处理的整体流程框架图,主要由三部分组成,分别是map、combine、reduce这三个过程。利用rdd和spark与内存之间的关系,首先保证运行效率;然后将rdd分派到各个节点上,各分区并行执行局部聚类操作,各部分局部聚类结束后,汇聚局部聚类结果,计算新的中心点的距离是否收敛,若收敛则算法结束,反之则各分区从新执行以上所有步骤,直至最后新中心点的距离收敛,算法结束。图2是把算法在单板机和spark框架下不同节点之间的运行速度进行了对比。其中,数据集是93625条数据,“0”表示在单板机上的运行时间;“1”表示在有一个worker节点的集群运行时间;“2”表示在有两个worker节点的集群运行时间,以此类推。由图可以看出,当集群worker节点只有一个的时候,算法的运行时间是高于单板机运行的,这是因为集群计算需要初始化相关任务,有job的新建、资源的分配和调度等等,这些都是需要耗时的,但是单板机不需要。但是随着节点数的增加,spark的并行执行任务优势就越明显,可以看到,当worker节点等于4个的时候,spark的处理速度是单板机的1.6倍左右。图3这张图是从数据本身的三个属性角度看整体聚类的情况。其中,符号“◆”表示簇0,符号“+”区域表示簇1,符号“*”表示簇2。由图可以看出,簇0综合评分和环境评分两个维度大致成线性关系,综合评分较高的,环境评分也比较高,综合评分较低的,环境评分也比较低,但是店面总评论数量大部分在2000条以下,与另外两个簇在总评论数量相差很大,在三维散点图中,基本分布在下面;簇2整体分布是在簇0之上的,并且综合评分和环境评分都集中在中等偏高的分数范围,评论总数量基本在2000到5000范围内;簇1分布在三维散点图的最上面,综合评分和环境评分两个维度的线性关系没那么明显,综合分数基本在4.5到5,环境评分基本在8到10,两个维度的分数和另外两个维度相比较,分数范围是最高的,最明显的一个指标就是总评论数量,基本在5000到15000之间。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1