4.5 实验设计与结果分析
为了验证SparkMFPs算法具有可行性,实验采用Scala语言在Ubuntu操作系统上实现了该算法,实验机为联想台式计算机,处理器为Intel Core(i5),CPU频率为3.3GHz,内存为8GB,开发工具是IntelliJ。集群环境是实验室搭建的Spark平台,使用虚拟机VirtualBox搭建,有1个主节点、3个从节点。Hadoop的版本是2.6.0,Spark的版本是2.2.0,Java的版本是1.8.1。
4.5.1 实验数据集
1)NASA数据集
本章使用NASA(National Aeronautics and Space Administration,美国国家航空航天局)数据集作为Web流量分析日志数据集,也可以作为序列模式挖掘数据集。NASA数据集包括浏览者访问NASA官方网站的1 568 898条日志数据。
2)1998年世界杯World Cup数据集
该数据集由全世界范围内的球迷访问世界杯官方网站的约13.5亿条访问日志构成。NASA数据集与World Cup数据集同属于Web日志数据集,但是数据的量级不同,它们都可以作为实验数据集。
3)IBM合成数据集
利用IBM合成数据生成器Quest Market-Basket生成序列数据集。构造一个包括10 000条平均长度为20的事件的序列,作为合成数据集。
本章对真实日志数据集的预处理采用的是文献[158]中的方法,把日志数据集处理为会话序列,从而进行模式挖掘。
4.5.2 实验结果与分析
1)实验1:运行效率
在NASA数据集、World Cup数据集中进行单机环境运行效率的对比实验,在相同支持度阈值下,若算法运行时间短,则说明算法运行效率高。本章采用的是SparkMFPs算法、PrefixSpan算法和SDD_UDDAG算法。
在NASA数据集和World Cup数据集上挖掘最大频繁序列,三种算法在NASA数据集上的运行时间如图4.2所示,三种算法在World Cup数据集上的运行时间如图4.3所示。图中横坐标表示频繁模式挖掘算法的支持度阈值,理论上,支持度阈值越小,满足最小支持度的频繁模式越多,会导致算法越复杂,时间消耗越多;纵坐标表示算法的运行时间。可以看出,随着支持度阈值的增大,SparkMFPs算法的运行时间缩短,说明SparkMFPs算法符合频繁模式挖掘规律;在支持度阈值相同的情况下,SparkMFPs算法所需要的运行时间更短,说明SparkMFPs算法运行效率更高。
在NASA数据集和IMB合成数据集上进行分布式运行环境运行效率的实验,NASA数据集随机选取了10 000条会话序列。本章算法与SparkMLib源码包中的PrefixSpan算法对比,不同在于PrefixSpan算法需要加上本章提出的提取全局最大频繁模式算法的时间。
图4.2 三种算法在NASA数据集上的运行时间
图4.3 三种算法在World Cup数据集上的运行时间
两个相同集群环境的分布式算法在随机抽取的10 000条NASA数据集上的运行时间如图4.4所示,两个相同集群环境的分布式算法在随机抽取的10 000条IBM合成数据集上的运行时间如图4.5所示。其中,横坐标表示支持度阈值,纵坐标表示相同集群实验环境下的运行时间。从实验结果可以看出,在支持度阈值相同的情况下,SparkMFPs算法所需要的运行时间比SparkMlib源码包中的PrefixSpan算法更短,说明SparkMFPs算法运行效率更高。
图4.4 两个相同集群环境的分布式算法在随机抽取的10 000条NASA数据集上的运行时间
图4.5 两个相同集群环境的分布式算法在随机抽取的10 000条IBM合成数据集上的运行时间
2)实验2:算法有效性
在最大频繁序列模式挖掘算法中,使用挖掘出的频繁序列数量来验证算法的有效性,从而对比频繁序列模式挖掘算法PrefixSpan[165]和本章提出的SparkMFPs算法。
从NASA数据集中随机抽取10000条会话序列,表4.4所示为在支持度阈值为0.04时改变最大序列长度,两种算法所挖掘出的频繁序列数量。
表4.4 最大序列长度与频繁序列数量
选择NASA数据集,从中随机抽取8000条和10 000条会话序列,输入的最大序列长度为20,通过改变支持度阈值来观察算法挖掘数量,两种算法在NASA数据集中8000条会话序列下的频繁序列数量如图4.6所示,两种算法在NASA数据集中10 000条会话序列下的频繁序列数量如图4.7所示。
图4.6 两种算法在NASA数据集中8000条会话序列下的频繁序列数量
从表4.4可以看出,在支持度阈值、最大序列长度相同的情况下,通过最大频繁序列模式挖掘算法挖掘出来的频繁序列明显少于频繁序列模式挖掘算法。图4.6和图4.7说明,随着支持度阈值的减小,挖掘出的频繁序列也在减少;在支持度阈值相同的情况下,通过本章提出的SparkMFPs算法挖掘出的频繁序列明显少于通过PrefixSpan算法挖掘出的频繁序列数量,因此在应用于大规模数据集时,用户更容易理解。
图4.7 两种算法在NASA数据集中10 000条会话序列下的频繁序列数量