天天看点

《Python数据挖掘:概念、方法与实践》扩展你的数据挖掘工具箱

本节书摘来自华章出版社《safe 4.0参考指南:精益软件与系统工程的规模化敏捷框架》一书中的第1章,第1节,作者[美] 梅甘·斯夸尔(megan squire)更多章节内容可以访问云栖社区“华章计算机”公众号查看。

扩展你的数据挖掘工具箱

面对感官信息时,人类自然想要寻找模式,对其进行区别、分类和预测。这种寻找周围模式的过程是人类的基本活动,人类的大脑对此很擅长。利用这种技能,我们的祖先更好地掌握了狩猎、聚会、烹饪和组织知识。因此,人类最早计算机化的任务是模式识别和模式预测也就不足为奇了,这种渴望一直持续到现在。近来,根据给定项目的目标,使用计算机找出数据中的模式,已经涉及数据库系统、人工智能、统计学、信息检索、计算机视觉和其他各种计算机科学子领域,以及信息系统、数学或者商业等。不管我们将这种活动称作什么—数据库中的知识发现、数据挖掘、数据科学,其主要使命始终是找出有趣的模式。

这一使命听起来似乎有些微不足道,数据挖掘已经存在了很长时间,对其实现已经积累了足够多的变种,但是现在它已经成为了一个广泛而复杂的领域。我们可以想象一所烹饪学校,其中的每位新人首先学习的是如何煮开水,如何使用刀具,然后才转向更高级的技能,如制作松饼或者为鸡肉去骨。在数据挖掘中,也有一些常用的技术,刚入门的数据挖掘人员也要学习它们:如何构建分类器,如何在数据中找到聚类宏。但是,本书的主题是精通python数据挖掘,所以,作为“精通”级别的书籍,目标是传授给你一些在之前的数据挖掘项目中未曾见过的技术。

在第1章中,我们将介绍如下主题:

什么是数据挖掘?要确定数据挖掘在不断增强的其他相似概念中的位置,还将学习这一学科成长和变化的历史。

我们如何进行数据挖掘?在此,我们将对比数据挖掘项目中常用的几种过程或者方法论。

数据挖掘中使用哪些技术?在这一部分,将总结数据挖掘定义中包含的典型数据分析技术,并强调这本精通级书籍将要涵盖的较为独特却未得到应有重视的技术。

如何建立数据挖掘工作环境?最后,我们将经历建立基于python开发环境的过程,我们将用这个环境完成本书余下部分中的项目。

1.1 什么是数据挖掘

前文解释了数据挖掘的目标是找出数据中的模式,但是细看之下,这一过分简单的解释就站不住脚。毕竟,寻找模式难道不也是经典统计学、商业分析、机器学习甚至更新的数据科学或者大数据的目标吗?数据挖掘和其他这些领域有什么差别呢?当我们实际上是忙于挖掘模式时,为什么将其称作“数据挖掘”?我们不是已经有数据了吗?

从一开始,“数据挖掘”这一术语就明显有许多问题。这个术语最初是统计学家们对盲目调查的轻蔑叫法,在这种调查中,数据分析人员在没有首先形成合适假设的情况下,就着手寻找模式。但是,这一术语在20世纪90年代成为主流,当时的流行媒体风传一种激动人心的研究,将成熟的数据库管理系统领域与来自机器学习和人工智能的最佳算法结合起来。“挖掘”这一单词的加入预示着这是现代的“淘金热”,执著、无畏的“矿工”们将发现(且可能从中得益)之前隐藏的珍宝。“数据本身可能是珍稀商品”这一思路很快吸引了商业上和技术刊物的注意,使他们无视先驱们努力宣传的、更为全面的术语—数据库中的知识发现(kdd)。

但是,“数据挖掘”这一术语沿用了下来,最终,该领域的一些定义试图改变其解释,认为它指的只是更漫长、更全面的知识发现过程中的一步。今天“数据挖掘”和kdd被视为非常相似、紧密相关的术语。

那么,其他相关术语如机器学习、预测性分析、大数据和数据科学又是怎么回事?这些术语和数据挖掘或者kdd是不是一回事?下面我们比较这些术语:

机器学习是计算机科学中的一个非常特殊的子领域,其焦点是开发能从数据中学习以作出预测的算法。许多数据挖掘解决方案使用了来自机器学习的技术,但是并不是所有数据挖掘都试图从数据中作出预测或者学习。有时候,我们只是想要找到数据中的一个模式。实际上,在本书中,我们所研究的数据挖掘解决方案中只有少数使用了机器学习技术,而更多的方案中并没有使用。

预测性分析有时简称为分析,是各个领域中试图从数据中作出预测的计算解决方案的统称。我们可以思考商业分析、媒体分析等不同术语。有些(但并不是全部)预测性分析解决方案会使用机器学习技术进行预测,但是同样,在数据挖掘中,我们并不总是对预测感兴趣。

大数据这一术语指的是处理非常大量数据的问题和解决方案,与我们是要搜索数据中的模式还是简单地存储这些数据无关。对比大数据和数据挖掘这两个术语,许多数据挖掘问题在数据集很大时更为有趣,所以为处理大数据所开发的解决方案迟早可用于解决数据挖掘问题。但是这两个术语只是互为补充,不能互换使用。

数据科学是最接近于kdd过程的术语,数据挖掘是它们的一个步骤。因为数据科学目前是极受欢迎的流行语,它的含义将随着这一领域的成熟而继续发展和变化。

我们可以查看google trends,了解上述术语在一段时期内的搜索热度。google

trends工具展示了一段时期内人们搜索各种关键词的频度。在图1-1中,新出现的术语“大数据”目前是炙手可热的流行语,“数据挖掘”居于第二位,然后是“机器学习”、“数据科学”和“预测性分析”。(我试图加入搜索词“数据库中的知识发现”,但是结果太接近于0,无法看到趋势线。)y轴以0~100的指数显示了特定搜索词的流行度。此外,我们还将google trends给出的2014~2015年每周指数组合为月平均值。

图1-1 5个常用数据相关术语的google

trends搜索结果

1.2 如何进行数据挖掘

由于数据挖掘传统上被视为kdd全过程中的一步,并且越来越成为数据科学过程的一部分,在本节中我们将熟悉其所涉及的步骤。进行数据挖掘有多种流行的方法。本书中我们重点介绍4种方法:其中两种取自数据挖掘理论的教科书,一种取自行业中非常实用的过程,一种是为教授入门者而设计的。

1.2.1 fayyad等人的kdd过程

知识发现和数据挖掘过程的早期版本之一由usama fayyad、gregory piatetsky-shapiro和 padhraic smyth在1996年的一篇论文(the kdd process for extracting useful knowledge from volumes of data)中定义。这篇论文在当时很重要,它将快速变化的kdd方法论精炼为具体的一组步骤。如下步骤以原始数据开始,以知识作为结束:

数据选择。这一步的输入是原始数据,输出是较小的数据子集,称为目标数据。

数据预处理。目标数据得到清理,删除异常值,处理缺失数据。这一步的输出是预处理数据或清理后数据。

数据变换。清理后的数据组织成适合于挖掘步骤的格式,如果有必要,精简特征或者变量的数量。这一步的输出是变换后数据。

数据挖掘。用适合于问题的一种或者多种数据挖掘算法对变换后数据进行挖掘,这一步的输出是发现的模式。

数据解释/评估。评估所发现模式解决手上问题的能力。这一步的输出是知识。

由于这一过程从原始数据得出知识,因此,这些作者对“数据库中的知识发现”这一术语作出了真正的贡献,而不仅仅是简单的数据挖掘。

1.2.2 韩家炜等人的kdd过程

韩家炜、micheline kamber和裴健所著的流行数据挖掘教科书《data mining:

concepts and techniques》描述了知识发现过程的另一个版本,其中的步骤也是从原始数据导出知识:

数据清理。这一步的输入是原始数据,输出是清理后的数据。

数据整合。在这一步中,清理后数据被整合(如果它们来自多个来源)。这一步的输出是整合数据。

数据选择。数据集被精简为仅包含手上问题所需的数据。这一步的输出是较小的数据集。

数据变换。较小的数据集被合并为一种适合于将来的数据挖掘步骤的形式,称为变换后数据。

数据挖掘。变换后的数据由设计用于发现数据中模式的智能算法处理。这一步的输出是一种或者多种模式。

模式评估。评估所发现模式的兴趣度和解决手上问题的能力。这一步的输出是适用于每个模式(代表知识)的兴趣度计量。

知识表示。在这一步中,通过各种手段(包括可视化)将知识传达给用户。

在fayyad和韩的方法中,都预计该过程在必要时需要多次重复这些步骤。例如,如果在变换步骤中,分析人员发现需要再进行一次数据清理或者预处理,这两种方法都规定分析人员应该按原路返回,完成前面未完成步骤的第二次迭代。

1.2.3 crisp-dm过程

kdd过程的第3种流行版本称为crisp-dm,其用于许多商业和应用领域,它的全称是cross-industry standard process for data mining(跨行业数据挖掘标准过程),包含如下步骤:

1)业务理解。在这一步中,分析人员花时间从业务视角理解数据挖掘项目的动机。

2)数据理解。在这一步中,分析人员熟悉数据及其潜在优势和不足,并开始生成假设。分析人员的任务是在必要时重新评估第1步的业务理解。

3)数据准备。这一步包含其他模型作为单独步骤列举的选择、整合、变换和预处理步骤。crisp-dm模型对这些任务的执行顺序没有要求。

4)建模。这一步中对数据应用算法以发现模式。这一步骤最接近于其他kdd模型中的数据挖掘步骤。分析人员的任务是在建模和挖掘步骤需要的时候重新评估第3步的数据准备。

5)评估。评估模型和发现的模式在回答手上的业务问题中的价值。分析人员的任务是在必要时重温第1步的业务理解。

6)部署。呈现发现的知识和模型,并投产以解决手上的原始问题。

这种方法的优势之一是,迭代是内建的。在特定步骤之间,分析人员将检查当前步骤仍然与之前的某些步骤保持一致。另一个优势是明确地提醒分析人员,即使在评估步骤中也要将业务问题放在项目的核心位置。

1.2.4 六步过程

当我在大学里教授数据科学入门课程时,使用了自己创造的一种混合方法。这种方法称为“六步过程”,这种专门设计的方法对于授课很合适。我的六步方法消除了没有经验的学生在crisp-dm中的开放式任务(如业务理解)或者基于企业任务(如部署)中可能遇到的歧义问题。此外,六步方法要求学生在过程的开始和最后回答“为什么这么做”和“这有什么意义”的问题,以拓展学生的批判性思维技能。我的六步方法如下:

1)问题陈述。在这一步中,学生确定他们试图解决的问题。在理想状况下,了解进行这些工作的原因可以提高他们的积极性。

2)数据收集和存储。在这一步中,学生们定位数据并规划这一问题所需数据的存储。他们还提供一些信息,这些信息与回答他们感兴趣的问题所需数据的来源、格式以及所有字段含义相关。

3)数据清理。在这一步中,学生们认真选择真正需要的数据,并将数据处理成挖掘步骤所需的格式。

4)数据挖掘。在这一步中,学生形式化所选择的数据挖掘方法。他们描述使用的算法以及原因。这一步的输出是模型和发现的模式。

5)表示和可视化。在这一步中,学生直观地展示工作成果。这一步的输出可以是表格、图示、图形、图表、网络框图、映射图等。

6)问题解决。这一步对数据挖掘初学者很重要,它明确地鼓励学生评估第5步中展示的模式是不是第1步中提出的问题的答案。学生们被要求说明模型或者结果的局限性,确定用这种方法无法回答的部分相关问题。

1.2.5 哪一种数据挖掘方法最好

2014年,gregory piatetsky-shapiro在其非常受欢迎的数据挖掘电子邮件通讯kd-nuggets上进行的调查包含了一个问题:“你在分析、数据挖掘或者数据库科学项目中使用哪一种主要方法?”

43%的调查对象表示他们使用crisp-dm方法。

27%的调查对象使用自己的方法或者混合方法。

7%的调查对象使用传统的kdd方法。

其余调查对象选择另一种kdd方法。

这些结果和2007年同一邮件通讯所做的相同调查结果类似。

我的最佳建议是,不要过于重视用于数据挖掘项目的方法,随便挑一种即可。如果完全不使用任何方法,那么就有遗漏重要步骤的危险。选择看上去对你的项目和需求有效的方法,然后尽可能遵循该方法的步骤。

在本书中,我们将根据相关章节中研究的技术,选择不同的数据挖掘方法。例如,尽管本书的焦点是数据挖掘步骤,但是仍然需要对每章中的项目实施健全的业务理解(crisp-dm)或者问题陈述(六步过程)步骤,以便理解我们执行任务的原因和结果的意义。此外,为了学习特定的数据挖掘方法,我们可能还必须进行一些预处理,不管这一过程称为“数据清理”、“整合”还是“变换”。但是通常来说,我们将尽可能减少此类任务,将焦点清晰地置于数据挖掘之上。在最后一章有个显著的例外,我们将在那里展示处理缺失数据和异常数据的具体方法。最后,尽管对于将数据挖掘过程的结果展示给受众来说,数据可视化通常非常重要,我们仍然将尽可能减少这些任务,以便将重点放在主要的工作—数据挖掘上。

1.3 在数据挖掘中使用哪些技术

现在我们对数据挖掘在整个kdd或者数据科学过程中的位置有了了解,下面就可以开始讨论完成这一任务的细节了。

从试图定义数据挖掘的早期起,几类相关的问题就一再出现。fayyad等人在1996年的另一篇重要论文“from data mining to knowledge discovery in databases”中提出了6类问题,我们将其总结如下:

分类问题。这里,有需要根据某些特征分成预定义类别的数据。我们需要一种算法,使用过去已经分类的数据,学习如何将未知数据置于正确的类别下。

聚类问题。这类问题是,我们需要根据数据点的特征将其分为不同类别,但是事先不知道这些类别。我们需要一种能够计量数据点之间相似性并自动根据这些相似性分割数据的算法。

回归问题。我们的数据必须根据某个预测变量进行映射,所以必须学习进行这种映射的函数。

摘要问题。假定我们的数据需要以某种方式缩短或者总结。这可能很简单,只是从数据计算基本统计数字;也可能很复杂,需要学习如何总结文本,或者为文本找出一个主题模型。

依赖性建模问题。对于这些问题,我们的数据之间可能有某种联系,我们需要开发一个算法,计算这种联系的概率,或者描述互相联系的数据的结构。

变化和偏差检测问题。在另一种情况下,我们的数据已经有了显著的变化,或者数据的一些子集偏离了正常值。为了解决这些问题,我们需要一种能够自动发现这些问题的算法。

在同年撰写的另一篇论文中,这些作者还加入了其他几种类别:

链接分析问题。我们有一些相关的数据点,必须发现它们之间的关系,并以数据集的支持程度和关系置信度的方式描述它们。

序列分析问题。想象我们的数据点遵循某种顺序,如时间序列或者基因组,我们必须发现序列中的趋势或者偏差,或者发现导致序列的原因,以及序列的演化方式。

韩家炜、kamber和裴健在前面提及的教科书中描述了数据挖掘所能解决的4类问题,并进一步将其分为描述性和预测性两大类。描述性数据挖掘意味着找出模式,帮助我们理解拥有的数据。预测性数据挖掘意味着找出模式,帮助我们预测尚未拥有的数据。

在描述性类别中,他们列出了如下数据挖掘问题:

数据特性描述和数据区分问题,包括数据摘要或者概念特性描述(或称描述)。

频率挖掘,包括找出数据中的频繁模式、关联规则和相关性。

在预测性类别中,他们列出了如下问题:

分类,回归

聚类

离群值和异常检测

很容易看出,fayyad等人和韩家炜等人的问题列表有许多相似之处,只是项目的分组不同。确实,如果你过去曾经完成过数据挖掘项目,这两个列表上出现的项目就是你可能已经熟悉的数据挖掘问题。分类、回归和聚类是非常流行的基本数据挖掘技术,所以从业者们所看到的每本数据挖掘书籍几乎都介绍过它们。

本书将使用哪些技术

由于本书是关于“精通”数据挖掘的图书,因此我们将介绍几种在标准书籍中不常介绍的技术。具体地说,我们将在第2章中介绍关联规则,在第9章中介绍异常检测。我们还将应用几种对数据清理和数据预处理有帮助的数据挖掘技术,也就是第9章中的缺失值处理和第3章中通过实体匹配进行的一些数据整合。

除了从技术上定义数据挖掘之外,有时候人们还根据所挖掘的数据类型,划分各种数据挖掘问题。例如,你可能听人说过文本挖掘或者社交网络分析。这些术语指的是所挖掘的数据类型,而不是用于挖掘的具体技术。例如,文本挖掘指的是任何应用于文本文档的数据挖掘技术,而网络挖掘指的是从网络图表数据中寻找模式。在本书中,我们将在第4章中进行一些网络挖掘,在第6、7、8章中进行不同类型的文本文档摘要,在第5章中根据情绪(文本中的情感)进行文本分类。

如果你和我一样,现在可能会想,“对这些背景资料我受够了,我想要写点代码。”我很高兴你对实际项目感兴趣。本书几乎已经做好了开始编码的准备,但是首先要建立一个好的工作环境。

1.4 如何建立数据挖掘工作环境

前面几节帮助我们更好地了解了将要从事的项目及原因。现在可以开始建立一个开发环境,支持所有项目工作了。由于本书的目的是介绍如何构建挖掘数据模式的软件,因此我们将用一种通用编程语言编写程序。python编程语言具有非常强大且仍在不断成长、专门致力于数据挖掘的社区。这个社区已经贡献了一些非常方便的程序库,我们可以用来进行高效的处理,我们还可以依靠他们提供的许多数据类型,更快地工作。

在本书编著时,有两个版本的python可供下载:现在被视为经典的python 2(最新版本为2.7)和python 3(最新版本为3.5)。本书将使用python 3。因为我们需要使用许多相关的程序包和程序库,尽可能地使数据挖掘体验不那么痛苦,也因为其中一些程序包和库难以安装,所以这里我建议使用专为科学及数学计算设计的python分发版本。具体地说,我推荐continuum analytics 制作的python 3.5 anaconda分发版本。他们的基本python分发版本是免费的,所有组件都保证能够协同工作,而无需我们进行令人沮丧的兼容性保证工作。

要下载anaconda python分发版本,只需要用浏览器访问continuum

analytics的网站(https://www.continuum.io),根据提示符下载适合你的操作系统的anaconda免费版本(目前的编号是3.5或者更高)。

启动该软件,将会看到如图1-2所示的启动画面。

根据你使用的版本和下载的时间,anaconda中的每个应用程序中除了launch按钮之外可能还有几个update(更新)按钮。如果你的软件版本显示需要,可以单击每个按钮以更新程序包。

图1-2 continuum anaconda navigator

为了开始编写python代码,单击spyder以启动代码编辑器和集成开发环境。如果你想使用自己的文本编辑器(如macos上的textwrangler或者windows上的sublime编辑器),完全没有问题。可以从命令行运行python代码。

花一点时间将spyder配置成你喜欢的样子,设置颜色和常规布局,或者保留默认值。对于我自己的工作空间,我移动了几个控制台窗口,建立一个工作目录,并进行几个自定义调整,使自己更适应这个新编辑器。你也可以这么做,使开发环境更舒适。

现在,我们已经为测试编辑器和安装程序库做好了准备。单击file(文件)并选择new file(新建文件)测试spyder编辑器,观察其工作方式。然后,输入简单的“hello world”语句:

单击绿色箭头,按下f5键或者单击run(运行)菜单中的run命令,运行程序。不管用哪一种方式,程序将执行,你将在控制台输出窗口看到输出。

此时,我们知道spyder和python正在工作,可以测试和安装一些程序库了。

首先,打开一个新文件,将其保存为packagetest.py。在这个测试程序中,我们将确定scikit-learn是否已经随anaconda正确安装。scikit-learn是很重要的程序包,包含了许多机器学习函数,以及用于测试这些函数的现成数据集。许多书籍和教程使用scikit-learn示例教授数据挖掘,所以在我们的工具箱中也有这个程序包。我们将在本书的多个章节中使用这个程序包。

运行scikit-learn网站上的教程中的如下小程序(可以在http://scikit-learn.org/stable/tutorial/basic/tutorial.html

#loading-an-example-dataset上找到),它将告诉我们环境是否正常建立:

如果上述程序运行正常,将在控制台窗口中输出显示类列表数据结构中的一系列数值:

这个输出足以说明scikit-learn已正常安装。接下来,添加一行代码,它将帮助我们学习digits.data结构的数据类型:

输出如下:

从上述输出,我们可以确定scikit-learn依赖另一个重要程序包numpy处理其数据结构。anaconda也已经正常安装numpy,这正是我们要确认的事项。

接下来,我们将测试是否已经包含了网络分析库。我们将在第4章中使用networkx程序库构建图形化社交网络。下面的代码示例创建一个具有一个节点的小型网络,并在屏幕上打印其类型:

这正是我们想要看到的输出,它告诉我们networkx已经安装并正常工作。

接下来,我们将测试后面几章需要的文本挖掘软件。这也很方便,自然语言工具包(natural language toolkit,nltk)也已随anaconda安装。但是,它有自己的图形化下载工具,用于下载它使用的各种语料库和单词列表。anaconda没有自动安装这些组件,因此我们必须人工完成。为了得到单词列表和字典,需创建一个新的python文件,导入ntlk模块,然后提示ntlk启动图形化下载工具:

新的下载程序窗口将在anaconda中打开(见图1-3):

图1-3 ntlk下载程序对话窗口

在这个下载程序窗口中,从标识符列表中选择all(全部),更改download directory(下载目录,可选),并按下download(下载)按钮。下载程序窗口左下角的红色进度条将随着每个数据集安装而变动。如果连接较慢,这一步可能需要花费几分钟。图1-4中的屏幕截图展示了这一下载中的步骤:

图1-4 工作中的ntlk下载程序

下载程序完成ntlk语料库的安装后,可以测试它们是否正常工作。下面是一个短的python程序,其中要求ntlk使用布朗大学的语料库并打印前10个单词:

该程序的输出如下,是ntlk布朗文本语料库的前10个单词,它们恰好来自一篇新闻报道:

从这个输出,我们可以确信ntlk已经安装,所有必要的语料库也已经安装。

接下来,将安装文本挖掘模块gensim,在后面进行主题建模时需要它。gensim默认不作为anaconda的一部分预先安装,而是可使用anaconda内建的conda安装程序轻松添加,有数百个这样的程序包,gensim是第一个。从anaconda tools菜单,选择open a terminal(打开终端)命令,并输入conda install gensim。如果提示更新numpy和scipy,则输入y,安装将继续。

安装结束时,启动一个新的python程序,输入来自gensim网站的测试程序的如下精简版本:

这个程序所做的只不过是测试该模块是否正常导入,然后在屏幕上打印一个列表,但是这在现在已经足够了。

最后,由于本书是关于数据挖掘或者数据结构中的知识发现的书籍,因此使用某种数据库软件绝对是个好主意。我选择mysql实现本书中的项目,因为它是免费软件,易于安装,可用于许多种操作系统。

要得到mysql,可以进入http://dev.mysql.com/downloads/mysql/,找到你要用操作系统的免费社区版本(community edition)下载页面。

为了让anaconda python与mysql通信,必须安装一些mysql python驱动程序。我喜欢pymysql驱动程序,因为它相当健壮,没有标准驱动程序常会有的一些bug。从anaconda中,启动一个终端窗口,运行如下命令:

现在所有模块似乎都已经安装,可以在需要它们时使用。如果还需要其他模块,或者其中一个模块过时,现在我们也已经知道如何在必要时安装或者升级模块了。

1.5 小结

在本章中,我们学习了将数据挖掘工具箱扩展到大师级别所需要做的工作。首先,我们从作为数据库知识发现(kdd)过程一部分的数据挖掘历史开始,对该领域进行了全面的介绍。还比较了数据挖掘其他类似的领域,如数据科学、机器学习和大数据等。

接下来,概述了kdd过程中大部分专家认为最重要的工具和技术,特别关注挖掘和分析步骤中最频繁使用的技术。为了真正精通数据挖掘,重要的是要关注和简单的教科书示例不同的问题。因此,我们将致力于更独特的数据挖掘技术,如生成摘要和寻找离群值,并关注更加不同寻常的数据类型,如文本和网络。

在本章的最后,我们组合了一个健全的数据挖掘系统。我们的工作空间以强大的全功能编程语言python及其许多实用数据挖掘程序包(如ntlk、gensim、numpy、networkx和scikit-learn)为中心,辅之以易于使用的免费数据库mysql。

现在,通过以上对软件包的讨论使我们想到:你是否对哪些程序包最经常一起使用感到疑惑?是较为常见的ntlk和networkx组合,还是相对不常见的程序包搭配?在下一章中,我们将解决这一类问题。在第2章中,我们将学习如何生成经常发现的配对、三元组、四元组等的列表,然后根据找出的模式作出预测。