做商城网站哪里好设计制作活动记录表
做商城网站哪里好,设计制作活动记录表,wordpress 支付宝,网站开发哪里数据分析与决策技术丛书 R语言数据挖掘 Learning Data Mining with R #xff3b;哈萨克斯坦#xff3d;贝特麦克哈贝尔#xff08;Bater Makhabel#xff09; 著 李洪成 许金炜 段力辉 译 图书在版编目#xff08;CIP#xff09;数据 R语言数据挖掘 / #xff08;哈… 数据分析与决策技术丛书 R语言数据挖掘 Learning Data Mining with R 哈萨克斯坦贝特·麦克哈贝尔Bater Makhabel 著 李洪成 许金炜 段力辉 译 图书在版编目CIP数据 R语言数据挖掘 / 哈贝特·麦克哈贝尔Bater Makhabel著李洪成许金炜段力辉译. —北京机械工业出版社2016.9 数据分析与决策技术丛书 书名原文Learning Data Mining with R ISBN 978-7-111-54769-3 I. R… II. ①贝… ②李… ③许… ④段… III. ①程序语言程序设计 ②数据采集 IV. ①TP312 ②TP274 中国版本图书馆CIP数据核字2016第212252号 本书版权登记号图字01-2015-2379 Bater MakhabelLearning Data Mining with RISBN: 978-1-78398-210-3. Copyright ? 2015 Packt Publishing. First published in the English language under the title “Learning Data Mining with R”. All rights reserved. Chinese simplified language edition published by China Machine Press. Copyright ? 2016 by China Machine Press. 本书中文简体字版由Packt Publishing授权机械工业出版社独家出版。未经出版者书面许可不得以任何方式复制或抄袭本书内容。 R语言数据挖掘 出版发行机械工业出版社北京市西城区百万庄大街22号 邮政编码100037 责任编辑盛思源 责任校对殷 虹 印 刷 版 次2016年11月第1版第1次印刷 开 本186mm×240mm 1/16 印 张13.75 书 号ISBN 978-7-111-54769-3 定 价49.00元 凡购本书如有缺页、倒页、脱页由本社发行部调换 客服热线01088379426 88361066 投稿热线01088379604 购书热线01068326294 88379649 68995259 读者信箱hzithzbook.com 版权所有 ? 侵权必究 封底无防伪标均为盗版 本书法律顾问北京大成律师事务所 韩光/邹晓东 The Translator’s Words?译 者 序 随着互联网中文档的快速积累在网络中获取一些有用的信息变得愈发困难。本书收集了数据挖掘的一些最常用算法首先对这些算法进行简单描述然后给出了这些算法的常见应用背景以方便数据挖掘用户学习和参考。对于关联规则、分类、聚类分析、异常值检测、数据流挖掘、时间序列、图形挖掘、网络分析、文本挖掘和网络分析等流行的数据挖掘算法给出了较为详尽的介绍并且给出了这些算法的伪代码和R语言实现。 本书提供了应用最流行的数据挖掘算法解决预测模型问题的可行策略读者可以从中更好地理解主流的预测模型也可以学习数据挖掘的实际经验。 本书第1章介绍数据挖掘、机器学习和数据预处理的基本概念第2章介绍频繁模式挖掘、关联规则和相关性第3章和第4章分别介绍分类和高级分类技术第5章和第6章分别介绍聚类分析算法和高级聚类分析算法第7章讨论异常值检测第8章介绍流数据、时间序列数据及序列数据挖掘第9章讨论图挖掘和网络分析第10章介绍文本和网络数据挖掘。 读者可以从书中给出的伪代码出发构建适合自己需要的算法或者直接应用随书提供的R语言实现的算法。本书适合对数据挖掘感兴趣的各类人士不管你是数据挖掘算法的研究人员还是数据挖掘工程师本书都可以提供相应的帮助。 本书的翻译得到了广西高校数据分析与计算重点实验室的资助。在本书的翻译过程中得到了王春华编辑的大力支持和帮助。本书责任编辑盛思源老师具有丰富的经验为本书的出版付出了大量的劳动这里对她们的支持和帮助表示衷心的感谢。 由于时间和水平所限难免会有不当之处希望同行和读者多加指正。 译者 作者简介 About the Author Bater MakhabelLinkedIn: BATERMJ和GitHub: BATERMJ为系统构架师生活在中国北京、上海和乌鲁木齐等地。他于1995至2002年之间在清华大学学习并获得计算机科学和技术的学士和博士学位。他在机器学习、数据挖掘、自然语言处理NLP、分布系统、嵌入系统、网络、移动平台、算法、应用数学和统计领域有丰富的经验。他服务过的客户包括CA Technologies、META4ALL和EDADFR的一家子公司。同时他也拥有在中国创办公司的经历。 Bater的生活开创性地在计算机科学和人文科学之间取得了平衡。在过去的12年中他在应用多种先进计算机技术于文化创作方面获得了经验其中一项是人机界面通过哈萨克语与计算机系统进行交互。他一直和他工作领域中的其他作家有合作但是本书是他的第一部正式作品。 About the Reviewers 审校者简介 Jason H.D. Cho在伊利诺伊大学香槟分校获得计算机硕士学位现在在攻读博士。他对应用自然语言处理和大数据解决医学信息问题特别感兴趣。尤其是他希望能在社交媒体上找到病人关心的健康需求。他曾带领一个学员小组在美国一项主要的保健竞赛CIMIT中跻身前10名。Jason也为自然语言处理和大数据研究领域的文章进行审稿。 Gururaghav Gopal现在在Paterson证券公司工作其职位是量化分析员、开发人员、交易员和分析师。以前他是一个和电商行业相关的数据科学咨询师。他曾经在印度韦洛尔的韦洛尔理工大学教授大学生和研究生模式识别课程。他曾经在一些研究机构做过研究助理包括IFMR和NAL。 Gururaghav获得了电子工程的学士学位、计算机科学和工程的硕士学位并在IFMR辅修金融工程和风险管理方面的课程。之后他便在金融相关领域工作。他获得过多个奖项并以他的名字发表过多篇文章。他对编程、教学和咨询感兴趣。在闲暇时间他会听 音乐。 Vibhav Kamath获得了位于孟买的印度理工学院工业工程和运筹学的硕士学位并具有位于浦那的工学院的电子工程学士学位。大四期间他对算法和数学模型产生了兴趣从此便进入分析领域。Vibhav现在在班加罗尔的一家IT服务公司工作其工作的一部分内容是应用R编程语言基于优化和线性回归技术来开发统计和数学模型。他曾经审阅过Packt出版社出版的两本R语言图书R Graphs Cookbook, Second Edition和Social Media Mining with R他曾经应用SAS、SQL和Excel/VBA做过数据可视化为一家银行开发过仪表盘程序。 过去Vibhav从事过离散时间仿真和语言处理均基于MATLAB等方面的学术工作。他涉猎过机器人领域建立了一个浏览魔方的机器人Micromouse。除了分析和编程之外Vibhav喜欢阅读小说类读物。空闲时他打乒乓球、板球和网球实在无聊时就玩田字格游戏数独和数谜。可以通过邮件vibhav.kamathhotmail.com或者领英in.linkedin.com/in/vibhavkamath与他联系。 Hasan Kurban于2012年在布卢明顿的印度大学获得计算机硕士学位现在在该校的信息与计算机学院攻读博士学位专业为计算机科学同时辅修统计学。他的研究方向为数据挖掘、机器学习和统计学。 Preface 前 言 世界各地的统计学家和分析师正面临着处理许多复杂统计分析项目的迫切问题。由于人们对数据分析领域的兴趣日益增加所以R语言提供了一个免费且开源的环境非常适合学习和有效地利用现实世界中的预测建模方案。随着R语言社区的不断发展及其大量程序包的不断增加它具备了解决众多实际问题的强大功能。 R编程语言诞生已经有数十年了它已经变得非常知名不但被社区的科学家而且被更广泛的开发者社区所熟知。它已经成长为一个强大的工具可以帮助开发者在执行数据相关任务时生成有效且一致的源代码。由于R语言开发团队和独立贡献者已经创建了良好的文档所以使用R语言编程并不困难。 进而你可以使用来自R语言官方网站的程序包。如果你想不断提高自己的专业水平那么你可能需要阅读在过去几年中已经出版的书籍。你应该始终铭记创建高水平、安全且国际兼容的代码比初始创建的第一个应用程序更加复杂。 本书的目的是帮助你处理在复杂的统计项目中遇到的一系列可能比较困难的问题。本书的主题包括学习在运行R语言程序时如何使用R代码段处理数据挖掘频繁模式、关联规则和相关规则。本书还为那些具有R语言基础的读者提供了成功创建和自定义最常用数据挖掘算法的技能和知识。这将有助于克服困难并确保在运用R语言公开可用的丰富程序包开发数据挖掘算法时R编程语言能够得到最有效的使用。 本书的每一章是独立存在的因此你可以自由地跳转到任何一章学习你觉得自己需要对某个特定的话题进行更加深入了解的章节。如果你觉得自己遗漏了一些重要的知识你可以回顾前面的章节。本书的组织方式有助于逐步拓展你的知识框架。 你需要了解如何编写不同的预测模型、流数据和时间序列数据的代码同时你还会接触到基于MapReduce算法一种编程模型的解决方案。学完本书你将会为自己所具备的能力知道哪种数据挖掘算法应用于哪种情况而感到自信。 我喜欢使用R编程语言进行多用途数据挖掘任务的开发与研究我非常高兴能与大家分享我的热情和专业知识帮助大家更有效地使用R语言更舒适地使用数据挖掘算法的发展成果与应用。 本书主要内容 第1章阐述数据挖掘的概要知识数据挖掘与机器学习、统计学的关系介绍数据挖掘基本术语如数据定义和预处理等。 第2章包含使用R语言编程时学习挖掘频繁模式、关联规则和相关规则所需的高级且有趣的算法。 第3章帮助你学习使用R语言编写经典分类算法涵盖了应用于不同类型数据集的多种分类算法。 第4章讲述更多的分类算法如贝叶斯信念网络、支持向量机SVM和k近邻算法。 第5章讲述如何使用流行与经典的算法进行聚类如k均值、CLARA和谱算法。 第6章介绍与当前行业热点话题相关的高级聚类算法的实现如EM、CLIQUE和DBSCAN等。 第7章介绍如何应用经典和流行算法来检测现实世界案例中的异常值。 第8章运用最流行、最经典以及一流的算法来讲解流数据、时间序列和序列数据挖掘这3个热点话题。 第9章介绍图挖掘和社交挖掘算法的概要及其他有趣的话题。 第10章介绍应用领域中最流行算法的有趣应用。 附录包含算法和数据结构的列表以便帮助你学习数据挖掘。 学习本书的准备知识 任何一台装有Windows、Linux或者Mac OS系统的个人计算机都可以运行本书给出的代码示例。本书所使用的软件都是开源的可以从http://www.r-project.org/上免费获取。 读者对象 本书适合对R语言和统计学具有基本知识的数据科学家、定量分析师和软件工程师。本书假定读者只熟悉非常基本的R语言知识如主要的数据类型、简单的函数和如何来回移动数据。不需要先前熟悉数据挖掘软件包。但是你应该对数据挖掘的概念和过程有基本的认知。 即使你对于数据挖掘完全是一个新人你也能够同时掌握基本和高级的数据挖掘算法的实现。你将学习如何从各种数据挖掘算法中选择合适的算法将这些算法应用于现实世界可用的大多数数据集中的某些特定数据集中。 约定 本书中你将发现多种文字印刷格式它们用于对不同类型的信息进行区分。下面是关于这些格式的一些例子以及它们的含义。 文本中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter ID如下所示“我们可以通过使用include指令来包含其他的上下文。” 新的术语和重要词用粗体标示。例如在屏幕上、菜单中或者对话框中看到的词将这样出现在文本中“单击Next按钮进入下一个界面。” 警告或者重要的说明将会出现在这样的图标后面。 提示或技巧将会出现在这样的图标后面。 读者反馈 读者的反馈始终是受欢迎的。让我们知道你如何看待本书——你喜欢哪些内容或者你可能不喜欢哪些内容。读者的反馈对于我们制定使读者真正获得最大效用的主题是十分重要的。 可以通过发送电子邮件至邮箱feedbackpacktpub.com并在电子邮件的主题中提及书名来给我们提供意见。 如果你对于某个主题有专长或者你有兴趣编写一本书或协助完成一本书可以到网站www.packtpub.com/authors看一看我们的撰稿指南。 客户支持 既然你现在自豪地拥有了一本Packt书那么我们可以做很多事来帮助你充分利用你购买的书籍。 下载示例代码 你可以从你在http://www.packtpub.com网站的账户上下载所有你已经购买的Packt书的示例代码。如果你在其他地方购买本书你可以访问http://www.packtpub.com/support网站并注册我们将通过电子邮件直接给你发送文件。你也可以在网站https://github.com/batermj/learning-data-mining-with-r找到本书的代码文件。 勘误表 虽然我们已经尽力确保书中内容的准确性但错误难免会发生。如果你在我们的某一本书中发现错误可能是文本或者代码中的错误并向我们报告错误我们将不胜感激。由此你可以使其他读者免于困惑并帮助我们改进该书的后续版本。如果你发现任何错误请通过访问http://www.packtpub.com/submit-errata网站选择相应图书单击errata submission form勘误提交表单的链接并输入错误的详细信息以便报告给我们。一旦你的错误得到验证你的提交将被接受并上传到我们的网站或者添加到现有的勘误表中列于该标题下的勘误表部分。任何现有的勘误表均可从http://www.packtpub.com/support网站上选择你所需要的标题进行查看。 盗版行为 因特网上版权材料的盗版行为是所有媒介一直存在的问题。在Packt我们非常重视对版权和许可证的保护。如果你在网络上遇到任何形式非法复制我们著作的行为请立刻向我们提供位置地址或者网站名称以便我们能够寻找补救方法。 我们的联系方式是copyrightpacktpub.com请一并附上关于涉嫌盗版材料的链接。 我们非常感谢你对我们的作者以及我们为你带来有价值内容的能力的保护。 问题 如果你对本书有任何方面的问题可以联系我们questionspacktpub.com我们将竭尽所能帮助你解决。 Acknowledgements?致 谢 感谢我的妻子Zurypa Dawletkan和儿子Bakhtiyar。他们支持我利用多个周末和夜晚使得本书得以出版。 我也要感谢Luke Presland给予我机会来撰写这本书。十分感谢Rebecca Pedley和Govindan K你们对本书的贡献是巨大的。感谢Jalasha D’costa和其他技术编辑及团队为该书出版付出的努力使得本书看起来还不错。同时感谢组稿编辑和技术审校者。 我也要谢谢我的兄弟Bolat Makhabel博士LinkedIn: BOLATMJ他给我提供了本书英文版封面的照片他具有医学背景。照片中的植物名为Echinops植物学的拉丁名字哈萨克语称为Lahsa在中国称为蓝刺头。这种植物用于传统的哈萨克医药也是我兄弟研究的一部分。 尽管我的专业知识来源于不断的实践但它也来源于我的母校清华大学和戴梅萼教授、赵雁南教授、王家钦教授、Ju Yuma教授以及其他众多老师为我打下的坚实基础。他们的精神鼓励我在计算机科学和技术领域继续努力。我要感谢我的岳父母Dawletkan Kobegen和Burux Takay感谢他们照顾我的儿子。 最后我要对我的姐姐Aynur Makhabel和姐夫Akimjan Xaymardan表达我最大的敬意。 目 录 Contents 译者序 作者简介 审校者简介 前言 致谢 第1章 预备知识 1 1.1 大数据 2 1.2 数据源 3 1.3 数据挖掘 4 1.3.1 特征提取 4 1.3.2 总结 4 1.3.3 数据挖掘过程 5 1.4 社交网络挖掘 7 1.5 文本挖掘 9 1.5.1 信息检索和文本挖掘 10 1.5.2 文本挖掘预测 10 1.6 网络数据挖掘 10 1.7 为什么选择R 12 1.8 统计学 12 1.8.1 统计学与数据挖掘 13 1.8.2 统计学与机器学习 13 1.8.3 统计学与R语言 13 1.8.4 数据挖掘中统计学的局限性 13 1.9 机器学习 13 1.9.1 机器学习方法 14 1.9.2 机器学习架构 14 1.10 数据属性与描述 15 1.10.1 数值属性 16 1.10.2 分类属性 16 1.10.3 数据描述 16 1.10.4 数据测量 17 1.11 数据清洗 18 1.11.1 缺失值 18 1.11.2 垃圾数据、噪声数据或异常值 19 1.12 数据集成 19 1.13 数据降维 20 1.13.1 特征值和特征向量 20 1.13.2 主成分分析 20 1.13.3 奇异值分解 20 1.13.4 CUR分解 21 1.14 数据变换与离散化 21 1.14.1 数据变换 21 1.14.2 标准化数据的变换方法 22 1.14.3 数据离散化 22 1.15 结果可视化 23 1.16 练习 24 1.17 总结 24 第2章 频繁模式、关联规则和相关规则挖掘 25 2.1 关联规则和关联模式概述 26 2.1.1 模式和模式发现 26 2.1.2 关系或规则发现 29 2.2 购物篮分析 30 2.2.1 购物篮模型 31 2.2.2 Apriori算法 31 2.2.3 Eclat算法 35 2.2.4 FP-growth算法 37 2.2.5 基于最大频繁项集的GenMax算法 41 2.2.6 基于频繁闭项集的Charm算法 43 2.2.7 关联规则生成算法 44 2.3 混合关联规则挖掘 46 2.3.1 多层次和多维度关联规则挖掘 46 2.3.2 基于约束的频繁模式挖掘 47 2.4 序列数据集挖掘 48 2.4.1 序列数据集 48 2.4.2 GSP算法 48 2.5 R语言实现 50 2.5.1 SPADE算法 51 2.5.2 从序列模式中生成规则 52 2.6 高性能算法 52 2.7 练习 53 2.8 总结 53 第3章 分类 54 3.1 分类 55 3.2 通用决策树归纳法 56 3.2.1 属性选择度量 58 3.2.2 决策树剪枝 59 3.2.3 决策树生成的一般算法 59 3.2.4 R语言实现 61 3.3 使用ID3算法对高额度信用卡用户分类 61 3.3.1 ID3算法 62 3.3.2 R语言实现 64 3.3.3 网络攻击检测 64 3.3.4 高额度信用卡用户分类 66 3.4 使用C4.5算法进行网络垃圾页面检测 66 3.4.1 C4.5算法 67 3.4.2 R语言实现 68 3.4.3 基于MapReduce的并行版本 69 3.4.4 网络垃圾页面检测 70 3.5 使用CART算法判断网络关键资源页面 72 3.5.1 CART算法 73 3.5.2 R语言实现 74 3.5.3 网络关键资源页面判断 74 3.6 木马程序流量识别方法和贝叶斯分类 75 3.6.1 估计 75 3.6.2 贝叶斯分类 76 3.6.3 R语言实现 77 3.6.4 木马流量识别方法 77 3.7 垃圾邮件识别和朴素贝叶斯分类 79 3.7.1 朴素贝叶斯分类 79 3.7.2 R语言实现 80 3.7.3 垃圾邮件识别 80 3.8 基于规则的计算机游戏玩家类型分类和基于规则的分类 81 3.8.1 从决策树变换为决策规则 82 3.8.2 基于规则的分类 82 3.8.3 序列覆盖算法 83 3.8.4 RIPPER算法 83 3.8.5 计算机游戏玩家类型的基于规则的分类 85 3.9 练习 86 3.10 总结 86 第4章 高级分类算法 87 4.1 集成方法 87 4.1.1 Bagging算法 88 4.1.2 Boosting和AdaBoost算法 89 4.1.3 随机森林算法 91 4.1.4 R语言实现 91 4.1.5 基于MapReduce的并行版本 92 4.2 生物学特征和贝叶斯信念网络 92 4.2.1 贝叶斯信念网络算法 93 4.2.2 R语言实现 94 4.2.3 生物学特征 94 4.3 蛋白质分类和k近邻算法 94 4.3.1 kNN算法 95 4.3.2 R语言实现 95 4.4 文档检索和支持向量机 95 4.4.1 支持向量机算法 97 4.4.2 R语言实现 99 4.4.3 基于MapReduce的并行版本 99 4.4.4 文档检索 100 4.5 基于频繁模式的分类 100 4.5.1 关联分类 100 4.5.2 基于判别频繁模式的分类 101 4.5.3 R语言实现 101 4.5.4 基于序列频繁项集的文本分类 102 4.6 基于反向传播算法的分类 102 4.6.1 BP算法 104 4.6.2 R语言实现 105 4.6.3 基于MapReduce的并行版本 105 4.7 练习 106 4.8 总结 107 第5章 聚类分析 108 5.1 搜索引擎和k均值算法 110 5.1.1 k均值聚类算法 111 5.1.2 核k均值聚类算法 112 5.1.3 k模式聚类算法 112 5.1.4 R语言实现 113 5.1.5 基于MapReduce的并行版本 113 5.1.6 搜索引擎和网页聚类 114 5.2 自动提取文档文本和k中心点算法 116 5.2.1 PAM算法 117 5.2.2 R语言实现 117 5.2.3 自动提取和总结文档文本 117 5.3 CLARA算法及实现 118 5.3.1 CLARA算法 119 5.3.2 R语言实现 119 5.4 CLARANS算法及实现 119 5.4.1 CLARANS算法 120 5.4.2 R语言实现 120 5.5 无监督的图像分类和仿射传播聚类 120 5.5.1 仿射传播聚类 121 5.5.2 R语言实现 122 5.5.3 无监督图像分类 122 5.5.4 谱聚类算法 123 5.5.5 R语言实现 123 5.6 新闻分类和层次聚类 123 5.6.1 凝聚层次聚类 123 5.6.2 BIRCH算法 124 5.6.3 变色龙算法 125 5.6.4 贝叶斯层次聚类算法 126 5.6.5 概率层次聚类算法 126 5.6.6 R语言实现 127 5.6.7 新闻分类 127 5.7 练习 127 5.8 总结 128 第6章 高级聚类分析 129 6.1 电子商务客户分类分析和DBSCAN算法 129 6.1.1 DBSCAN算法 130 6.1.2 电子商务客户分类分析 131 6.2 网页聚类和OPTICS算法 132 6.2.1 OPTICS算法 132 6.2.2 R语言实现 134 6.2.3 网页聚类 134 6.3 浏览器缓存中的访客分析和DENCLUE算法 134 6.3.1 DENCLUE算法 135 6.3.2 R语言实现 135 6.3.3 浏览器缓存中的访客分析 136 6.4 推荐系统和STING算法 137 6.4.1 STING算法 137 6.4.2 R语言实现 138 6.4.3 推荐系统 138 6.5 网络情感分析和CLIQUE算法 139 6.5.1 CLIQUE算法 139 6.5.2 R语言实现 140 6.5.3 网络情感分析 140 6.6 观点挖掘和WAVE聚类算法 140 6.6.1 WAVE聚类算法 141 6.6.2 R语言实现 141 6.6.3 观点挖掘 141 6.7 用户搜索意图和EM算法 142 6.7.1 EM算法 143 6.7.2 R语言实现 143 6.7.3 用户搜索意图 143 6.8 客户购买数据分析和高维数据聚类 144 6.8.1 MAFIA算法 144 6.8.2 SURFING算法 145 6.8.3 R语言实现 146 6.8.4 客户购买数据分析 146 6.9 SNS和图与网络数据聚类 146 6.9.1 SCAN算法 146 6.9.2 R语言实现 147 6.9.3 社交网络服务 147 6.10 练习 148 6.11 总结 148 第7章 异常值检测 150 7.1 信用卡欺诈检测和统计方法 151 7.1.1 基于似然的异常值检测算法 152 7.1.2 R语言实现 152 7.1.3 信用卡欺诈检测 153 7.2 活动监控——涉及手机的欺诈检测和基于邻近度的方法 153 7.2.1 NL算法 153 7.2.2 FindAllOutsM算法 153 7.2.3 FindAllOutsD算法 154 7.2.4 基于距离的算法 155 7.2.5 Dolphin算法 156 7.2.6 R语言实现 157 7.2.7 活动监控与手机欺诈检测 157 7.3 入侵检测和基于密度的方法 157 7.3.1 OPTICS-OF算法 159 7.3.2 高对比度子空间算法 159 7.3.3 R语言实现 160 7.3.4 入侵检测 160 7.4 入侵检测和基于聚类的方法 161 7.4.1 层次聚类检测异常值 161 7.4.2 基于k均值的算法 161 7.4.3 ODIN算法 162 7.4.4 R语言实现 162 7.5 监控网络服务器的性能和基于分类的方法 163 7.5.1 OCSVM算法 163 7.5.2 一类最近邻算法 164 7.5.3 R语言实现 164 7.5.4 监控网络服务器的性能 164 7.6 文本的新奇性检测、话题检测与上下文异常值挖掘 164 7.6.1 条件异常值检测算法 165 7.6.2 R语言实现 166 7.6.3 文本的新奇性检测与话题检测 166 7.7 空间数据中的集体异常值 167 7.7.1 路径异常值检测算法 167 7.7.2 R语言实现 167 7.7.3 集体异常值的特征 168 7.8 高维数据中的异常值检测 168 7.8.1 Brute-Force算法 168 7.8.2 HilOut算法 168 7.8.3 R语言实现 169 7.9 练习 169 7.10 总结 169 第8章 流数据、时间序列数据和序列数据挖掘 171 8.1 信用卡交易数据流和STREAM算法 171 8.1.1 STREAM算法 172 8.1.2 单通道法聚类算法 173 8.1.3 R语言实现 174 8.1.4 信用卡交易数据流 174 8.2 预测未来价格和时间序列分析 175 8.2.1 ARIMA算法 176 8.2.2 预测未来价格 176 8.3 股票市场数据和时间序列聚类与分类 176 8.3.1 hError算法 177 8.3.2 基于1NN分类器的时间序列分类 178 8.3.3 R语言实现 178 8.3.4 股票市场数据 178 8.4 网络点击流和挖掘符号序列 179 8.4.1 TECNO-STREAMS算法 179 8.4.2 R语言实现 181 8.4.3 网络点击流 181 8.5 挖掘事务数据库中的序列模式 181 8.5.1 PrefixSpan算法 182 8.5.2 R语言实现 182 8.6 练习 182 8.7 总结 182 第9章 图挖掘与网络分析 183 9.1 图挖掘 183 9.1.1 图 183 9.1.2 图挖掘算法 184 9.2 频繁子图模式挖掘 184 9.2.1 gPLS算法 184 9.2.2 GraphSig算法 184 9.2.3 gSpan算法 185 9.2.4 最右路径扩展和它们的支持 185 9.2.5 子图同构枚举算法 186 9.2.6 典型的检测算法 186 9.2.7 R语言实现 186 9.3 社交网络挖掘 186 9.3.1 社区检测和Shingling算法 187 9.3.2 节点分类和迭代分类算法 188 9.3.3 R语言实现 188 9.4 练习 188 9.5 总结 188 第10章 文本与网络数据挖掘 189 10.1 文本挖掘与TM包 190 10.2 文本总结 190 10.2.1 主题表示 191 10.2.2 多文档总结算法 192 10.2.3 最大边缘相关算法 193 10.2.4 R语言实现 193 10.3 问答系统 194 10.4 网页分类 194 10.5 对报刊文章和新闻主题分类 195 10.5.1 基于N-gram的文本分类算法 195 10.5.2 R语言实现 197 10.6 使用网络日志的网络使用挖掘 197 10.6.1 基于形式概念分析的关联规则挖掘算法 198 10.6.2 R语言实现 198 10.7 练习 198 10.8 总结 199 附录 算法和数据结构 200 第1章 预?备?知?识 本章中你将学习基本的数据挖掘术语比如数据定义、预处理等。 最重要的数据挖掘算法将通过R语言进行说明以便帮助你快速掌握原理包括但不局限于分类、聚类和异常值检测。在深入研究数据挖掘之前我们来看一看将要介绍的主题 数据挖掘 社交网络挖掘 文本挖掘 网络数据挖掘 为什么选择R 统计学 机器学习 数据属性与描述 数据测量 数据清洗 数据集成 数据降维 数据变换与离散化 结果可视化 在人类历史上来自每个方面的数据结果都是广泛的例如网站、由用户的电子邮件或姓名或账户构成的社交网络、搜索词、地图上的位置、公司、IP地址、书籍、电影、音乐和产品。 数据挖掘技术可应用于任何类型的旧数据或者新数据每种数据类型都可以运用特定的技术并不需要全部技术得到最好的处理。也就是说数据挖掘技术受到数据类型、数据集大小以及任务应用环境等条件的限制。每一种数据集都有自己适合的数据挖掘解决方案。 一旦旧的数据挖掘技术不能应用于新的数据类型或者如果新的数据类型不能转换成传统的数据类型那么总是需要研究新的数据挖掘技术。应用于Twitter庞大资源集的流数据挖掘算法的演变是一个典型的例子针对社交网络开发的图挖掘算法是另一个例子。 最流行且最基本的数据形式来自数据库、数据仓库、有序数据或者序列数据、图形数据以及文本数据等。换句话说它们是联合数据、高维数据、纵向数据、流数据、网络数据、数值数据、分类数据或者文本数据。 1.1 大数据 大数据是数据量很大的数据它不适合存储在单台机器中。也就是说在研究大数据时数据本身的大小成为了问题的一部分。除了容量Volume大数据的其他两个主要特征就是多样性Variety和速度Velocity这就是大数据著名的三个特征。速度指的是数据处理的速率或者数据处理有多快多样性指的是各种数据源类型。大数据源集合产生的噪声更频繁并且影响挖掘的结果这就需要高效的数据预处理算法。 因此分布式文件系统用来作为对大量数据成功执行并行算法的工具可以肯定的是每过1秒我们将得到更多的数据。数据分析和可视化技术是与海量数据相关的数据挖掘任务的主要部分。海量数据的特性吸引了许多与平台相关的新的数据挖掘技术其中一个就是RHadoop。我们将在后面的内容中对它进行描述。 大数据中的一些重要数据类型如下所述 第一种数据类型来自摄像机视频它包含了用于加快犯罪调查分析、增强零售分析以及军事情报分析等更多的元数据。 第二种数据类型来自嵌入式的传感器如医用传感器用来监测病毒的任何潜在爆发。 第三种数据类型来自娱乐由任何人通过社交媒体自由发布的信息。 第四种数据类型来自消费者图像它们源自社交媒体像这种图像的标注是很重要的。 下面的表说明了数据大小增长的历史。该表显示信息每两年翻一番多改变着研究人员或者公司的管理方式通过数据挖掘技术从数据中获取价值揭示着新的数据挖掘研究。 年份 数据大小 说 明 N/A 1MBMegabyte兆字节220 人的大脑大约存储200MB的信息 N/A 1PBPetabyte拍字节250 这类似于由NASA对地球3年的观察数据的大小或者相当于美国国会图书馆书籍的70.8倍 1999 1EB 1EBExabyte艾字节260 世界产生了1.5EB独特的信息 2007 281EB 世界产生了大约281EB独特的信息 2011 1.8ZB 1ZBZetabyte泽字节270 这是人类在2011年收集的所有数据 近期 1YBYottabytes尧字节280 可扩展性和效率 效率、可扩展性、性能、优化以及实时执行的能力对于几乎所有的算法都是很重要的问题它对数据挖掘也是如此。数据挖掘算法始终有一些必要的衡量指标或者基准因素。 随着数据量的持续增长保持数据挖掘算法的效率和可扩展性对于有效地从众多数据存储库或数据流中的海量数据集里提取信息是很有必要的。 从单台机器到广泛分布的数据存储、众多数据集的庞大规模以及数据挖掘方法计算的复杂性这些都是驱动并行和分布式数据密集型挖掘算法发展的因素。 1.2 数据源 数据充当数据挖掘系统的输入因此数据存储库是非常重要的。在企业环境中数据库和日志文件是常见来源在网络数据挖掘中网页是数据的来源连续地从各种传感器中提取数据也是典型的数据源。 这里有一些免费的在线数据源十分有助于学习数据挖掘 频繁项集挖掘数据存储库Frequent Itemset Mining Dataset Repository一个带有数据集的存储库用于找到频繁项集的方法http://fimi.ua.ac.be/data/。 UCI机器学习存储库UCI Machine Learning Repository一个数据集的集合适用于分类任务http://archive.ics.uci.edu/ml/。 statlib的数据及其描述库The Data and Story Library at statlibDASL是一个在线库它拥有说明基本统计方法用途的数据文件和故事。我们希望提供来自多主题的数据这样统计学教师可以找到学生感兴趣的真实世界的例子。使用DASL强大的搜索引擎来查找感兴趣的故事和数据文件http://lib.stat.cmu.edu/DASL/。 词汇网WordNet一个英语词汇数据库http://wordnet.princeton.edu。 1.3 数据挖掘 数据挖掘就是在数据中发现一个模型它也称为探索性数据分析即从数据中发现有用的、有效的、意想不到的且可以理解的知识。有些目标与其他科学如统计学、人工智能、机器学习和模式识别是相同的。在大多数情况下数据挖掘通常被视为一个算法问题。聚类、分类、关联规则学习、异常检测、回归和总结都属于数据挖掘任务的一部分。 数据挖掘方法可以总结为两大类数据挖掘问题特征提取和总结。 1.3.1 特征提取 这是为了提取数据最突出的特征并忽略其他的特征。下面是一些例子 频繁项集Frequent itemset该模型对构成小项集篮子的数据有意义。找出一堆项目中出现最为频繁、关系最为密切的一个子集。——译者注 相似项Similar item有时你的数据看起来像数据集的集合而目标是找到一对数据集它们拥有较大比例的共同元素。这是数据挖掘的一个基本问题。 1.3.2 总结 目标是简明且近似地对数据集进行总结或者说摘要比如聚类它是这样一个过程检查数据的集合并根据某些度量将数据点分类到相应的类中。目标就是使相同类中的点彼此之间的距离较小而不同类中的点彼此之间的距离较大。 1.3.3 数据挖掘过程 从不同的角度定义数据挖掘过程有两种比较流行的过程其中更广泛采用的一种是CRISP-DM 跨行业数据挖掘标准过程Cross-Industry Standard Process for Data MiningCRISP-DM。 采样、探索、修正、建模、评估Sample, Explore, Modify, Model, Assess缩写为SEMMA这是由美国SAS研究所制定的。 1.3.3.1 CRISP-DM 这个过程共分6个阶段如下图所示。它不是一成不变的但通常会有大量的回溯。 让我们详细地看一看每个阶段 业务理解business understanding这项任务包括确定业务目标、评估当前形势、建立数据挖掘目标并制订计划。 数据理解data understanding这项任务评估数据需求包括原始数据收集、数据描述、数据探索和数据质量的验证。 数据准备data preparation一旦获得数据在上一步中确定数据源。然后需要对数据进行选择、清洗并形成期望的形式和格式。 建模modeling可视化和聚类分析对于初步分析是有用的。可以应用像广义规则归纳generalized rule induction这样的工具开发初始关联规则。这是一个发现规则的数据挖掘技术从条件因素与给定的决策或者结果之间的因果关系来对数据进行说明。也可以应用其他适用于数据的模型。 评估evaluation结果应该在第一阶段中的业务目标指定的环境下对模型结果进行评估。在大多数情况下这会导致新需求的确定转而返回到前一个阶段。 部署deployment可以使用数据挖掘来验证之前的假设或者知识。 1.3.3.2 SEMMA 下图是SEMMA过程的概览。 让我们详细地看一看这些过程 采样sample在该步中提取一个大数据集的一部分。 探索explore为了更好地理解数据集在此步中搜索未预料的趋势和异常。 修正modify创建、选择和转换变量以便专注于模型构建过程。 建模model搜索多种模型的组合以便预测一个满意的结果。 评估assess根据实用性和可靠性对数据挖掘过程的结果进行评估。 1.4 社交网络挖掘 正如我们前面提到的数据挖掘是从数据中发现一个模型社交网络挖掘就是从表示社交网络的图形数据中发现模型。 社交网络挖掘是网络数据挖掘的一个应用比较流行的应用有社会科学和文献计量学、PageRank和HITS算法、粗粒度图模型的不足、增强模型和技术、主题提取的评估以及网络的评估与建模。 社交网络 当涉及社交网络的讨论时你会想到Facebook、Google和LinkedIn等。社交网络的基本特征如下 存在一个参与网络的实体集合。通常情况下这些实体是人但它们也完全可能是其他实体。 网络的实体之间至少存在一种关系。在Facebook上这种关系被称为朋友有时这种关系要么存在要么不存在两个人要么是朋友要么不是朋友。然而在社交网络的其他例子中关系有一个度。这个度可以是离散的比如在Google上朋友、家人、相识或者不相识这个度也可能是一个实际的数字比如平均一天内两个人相互交谈所花费的时间。 社交网络有一个非随机性或者忠诚性的假设。这个条件最难形式化但直观解释是关系趋于集中也就是说如果实体A与B和C都相关那么B与C相关的概率就高于平均水平。 下面是社交网络的一些种类 电话网络telephone network该网络的节点是电话号码代表个体。 电子邮件网络E-mail network该网络的节点是电子邮件地址也代表个体。 合作网络collaboration network该网络的节点代表发表了研究论文的个体连接两个节点的边表示联合发表一篇或者多篇论文的两个个体。 社交网络以无向图建模。实体是节点如果两个节点根据刻画网络的关系相互关联那么就有一条边连接两个节点。如果相关联的关系有一个度那么这个度就通过标记边来表示。 下载代码示例 你可以从http://www.packtpub.com的账户中下载所有你购买的Packt出版社出版的书籍的示例代码文件。如果你在其他地方购买了这本书你可以访问http://www.packtpub.com/support网站并注册我们将通过电子邮件直接给你发送文件。 这里有一个例子它是用R语言的sna程序包中的科尔曼高中朋友数据Coleman’s High School Friendship Data进行分析。数据来源于对某个学年同一高中的73个男孩之间的友好关系的研究所有被调查对象提供了两个时间点春季和秋季来报告其关系。数据集的名称是coleman它是R语言中的数组类型。节点代表一个具体的学生线代表两个学生之间的关系。 1.5 文本挖掘 文本挖掘基于文本数据关注从大型自然语言文本中提取相关信息并搜寻有意义的关系、语法关系以及提取实体或各项之间的语义关联。它也被定义为自动或半自动的文本处理。相关的算法包括文本聚类、文本分类、自然语言处理和网络挖掘。 文本挖掘的特征之一是数字与文本混合或者用其他的观点来说就是源数据集中包含了混合数据类型。文本通常是非结构化文件的集合这将被预处理并变换成数值或者结构化的表示。在变换之后大部分的数据挖掘算法都可以应用并具有不错的效果。 文本挖掘的过程描述如下 第一步准备文本语料库包括报告、信函等。 第二步基于文本语料库建立一个半结构化的文本数据库。 第三步建立一个词语文档矩阵包含词语的频率。 第四步进行进一步的分析比如文本分析、语义分析、信息检索和信息总结。 1.5.1 信息检索和文本挖掘 信息检索帮助用户查找信息经常与在线文档相关联它着重于信息的获取、组织、存储、检索和分布。信息检索Information RetrievalIR的任务是根据查询检索有关的文档。信息检索的基本技术是测量相似性。其基本步骤如下所述 指定一个查询。下面是一些查询类型 关键词查询keyword query由一个关键词列表表示用来查找包含至少一个关键词的文档。 布尔查询boolean query由布尔运算符和关键词构建的查询。 短语查询phrase query由组成短语的一系列词语所构成的查询。 近邻查询proximity query短语查询的降级版本它可以是关键词和短语的组合。 全文档查询full document query一个完整文档的查询用于寻找类似于查询文档的其他文档。 自然语言问题natural language questions该查询有助于将用户的需求表示成一个自然语言问题。 搜索文档集。 返回相关文档的子集。 1.5.2 文本挖掘预测 预测文本的结果与预测数值数据挖掘一样耗力并且有与数值分类相关联的相似问题。文本挖掘预测通常是一个分类问题。 文本预测需要先验知识通过样本了解如何对新文档做出预测。一旦文本变换成数值数据就可以应用预测方法。 1.6 网络数据挖掘 网络挖掘的目的是从网络超链接结构、网页和使用数据来发现有用的信息或知识。网络是作为数据挖掘应用输入的最大数据源之一。 网络数据挖掘基于信息检索、机器学习Machine LearningML、统计学、模式识别和数据挖掘。尽管很多数据挖掘方法可以应用于网络挖掘但是由于异构的、半结构化的和非结构化的网络数据所以网络挖掘不单纯是一个数据挖掘问题。 网络挖掘任务至少可以定义为3种类型 网络结构挖掘web structure mining这有助于从超链接中寻找有关网址和页面的有用信息或者有价值的结构总结。 网络内容挖掘web content mining这有助于从网页内容中挖掘有用的信息。 网络用法挖掘web usage mining这有助于从网络日志中发现用户访问模式以便检测入侵、欺诈和试图闯入的情况。 应用于网络数据挖掘的算法源自经典的数据挖掘算法。它们有很多相似之处比如挖掘过程但也存在差异。网络数据挖掘的特征使其不同于数据挖掘的原因如下 数据是非结构化的。 网络信息不断变化和数据量不断增长。 任何数据类型都可以在网络上得到如结构化和非结构化数据。 网络上存在异构信息冗余页面也存在。 网络上链接着海量信息。 数据是噪声数据。 网络数据挖掘不同于一般数据挖掘是由于源数据集的巨大动态容量、极其多样化的数据格式等。与网络相关的最流行的数据挖掘任务如下 信息提取Information ExtractionIE信息提取的任务包含以下步骤词汇标记、句子分割、词性分配、命名实体识别、短语解析、句子解析、语义解释、话语解释、模板填充以及合并。 自然语言处理Natural Language ProcessingNLP它研究人与人和人与机器互动的语言特征、语言能力和行为模型、用这样的模型实现过程的框架、过程/模型的迭代优化以及对结果系统的评估技术。与网络数据挖掘相关的经典自然语言处理任务包括标注、知识表示、本体论模型等。 问题回答question answering目标就是以自然语言形式从文本集中寻找问题的答案。它可以归类为槽填充、有限域以及具有更高难度的开放域。一个简单的例子就是基于预先定义的常见问题解答FAQ来回答客户的询问。 资源发现resource discovery比较流行的应用是优先收集重要的页面使用链路拓扑结构、主题局部性和主题爬行进行相似性搜索社区发现。 1.7 为什么选择R R是一种高质量、跨平台、灵活且广泛使用的开源免费语言可用于统计学、图形学、数学和数据科学。它由统计学家创建并为统计学家服务。 R语言包含了5?000多种算法以及全球范围内具备专业知识的数百万用户并得到了充满活力且富有才华的社区贡献者的支持。它不仅可以使用完善的统计技术也允许使用试验性的统计技术。 R是一个用于统计计算与图形学的免费开源软件其环境由R-projects维护根据自由软件基金会Free Software Foundation的GNU通用公共授权General Public License的条款R语言的源代码是可以获得的。由于存在各种平台如Unix、Linux、Windows以及Mac OS所以R语言也编译和开发了用于不同平台的版本。 R的缺点有哪些 R存在以下3个缺点 一个缺点就是内存约束因此它需要将整个数据集存储在内存RAM中以便实现高性能这也称为内存分析。 类似于其他开源系统任何人都可以创建和贡献经过严格测试或者未经过严格测试的程序包。换言之贡献给R社区的程序包是容易出错的需要更多的测试以确保代码的质量。 R语言似乎比某些其他商业语言慢。 幸运的是存在可用于解决这些问题的程序包。有些方法可以归为并行解决方案本质就是将程序的运行分散到多个CPU上从而克服上面所列R语言的缺陷。有不少好的例子比如RHadoop但并不局限于RHadoop。你很快就会在下面的章节中看到更多关于这个话题的内容。你可以从综合R典藏网Comprehensive R Archive NetworkCRAN下载SNOW添加包和Parallel添加包。 1.8 统计学 统计学研究数据收集、数据分析、数据解释或说明以及数据表示。作为数据挖掘的基础它们的关系将在下面章节中说明。 1.8.1 统计学与数据挖掘 第一次使用数据挖掘这个术语的人是统计学家。最初数据挖掘是一个贬义词指的是企图提取得不到数据支持的信息。在一定程度上数据挖掘构建统计模型这是一个基础分布用于可视化数据。 数据挖掘与统计学有着内在的联系数据挖掘的数学基础之一就是统计学而且很多统计模型都应用于数据挖掘中。 统计模型可以用来总结数据集合也可以用于验证数据挖掘结果。 1.8.2 统计学与机器学习 随着统计学和机器学习的发展这两个学科成为一个统一体。统计检验被用来验证机器学习模型和评估机器学习算法机器学习技术与标准统计技术可以有机结合。 1.8.3 统计学与R语言 R是一种统计编程语言它提供大量基于统计知识的统计函数。许多R语言添加包的贡献者来自统计学领域并在他们的研究中使用R语言。 1.8.4 数据挖掘中统计学的局限性 在数据挖掘技术的演变过程中由于数据挖掘中统计的局限性人们在试图提取并不真正存在于数据中的信息时可能会犯错误。 Bonferroni原则Bonferroni’s Principle是一个统计定理也被称为Bonferroni校正Bonferroni correction。你可以假设你找到的大部分结果都是事实上不存在的即算法返回的结果大大超过了所假设的范围。 1.9 机器学习 应用于机器学习算法的数据集称为训练集它由一组成对的数据(x, y)构成称为训练样本。成对的数据解释如下 x这是一个值向量通常称为特征向量。每个值或者特征要么是分类变量这些值来自一组离散值比如{S, M, L}要么是数值型。 y这是一个标签表示x的分类或者回归值。 机器学习过程的目的就是发现一个函数yf(x)它能最好地预测与每一个x值相关联的y值。原则上y的类型是任意的但有一些常见的和重要的类型 y这是一个实数机器学习问题称为回归。 y这是一个布尔值真或者假通常分别写为1和-1。在这种情况下机器学习问题称为二元分类。 y这是某些有限集合的成员。这个集合的成员可以认为是类并且每个成员代表一类。此机器学习问题称为多级分类。 y这是某些潜在无限集合的成员例如x的一个解析树它被解析为一个句子。 到现在为止在我们可以更直接地描述挖掘目标的情况下还没有证明机器学习是成功的。机器学习和数据挖掘是两个不同的主题尽管它们共享一些算法——特别是目标为提取信息时。在某些情况下机器学习是有意义的一个典型的情形就是当我们试图从数据集中寻找某些信息。 1.9.1 机器学习方法 算法的主要类型均列于下方每个算法由函数f区分。 决策树decision tree这种形式的f呈树形树的每个节点都有一个关于x的函数用来确定必须搜索哪个子节点或者哪些子节点。 感知器perceptron这些是应用于向量x{x1, x2, …, xn}的分量的阈值函数。对每个i1, 2, …, n权重wi与第i个分量相关联且有一个阈值wixi≥θ。如果阈值满足条件输出为1否则为-1。 神经网络neural net这些是有感知器的非循环网络某些感知器的输出用作其他感知器的输入。 基于实例的学习instance-based learning此方法使用整个训练集来表示函数f。 支持向量机support-vector machine该类的结果是一个分类器它对未知数据更准确。分类的目标是寻找最优超平面通过最大化两个类的最近点之间的间隔将它们分隔。 1.9.2 机器学习架构 这里机器学习的数据方面指的是处理数据的方式以及使用数据构建模型的方式。 训练和测试training and testing假定所有数据都适用于训练分离出一小部分可用的数据作为测试集使用余下的数据建立一个合适的模型或者分类器。 批处理与在线学习batch versus online learning对于批处理方式在其进程的开始整个训练集都是可得到的对于在线学习其训练集以数据流的形式获得且对它进行处理后不能被再次访问。 特征选择feature selection这有助于找出那些用作学习算法输入的特征。 创建训练集creating a training set通过手动创建标签信息从而把数据变为训练集。 1.10 数据属性与描述 属性attribute是代表数据对象的某些特征、特性或者维度的字段。 在大多数情况下数据可以用矩阵建模或者以矩阵形式表示其中列表示数据属性行表示数据集中的某些数据记录。对于其他情况数据不能用矩阵表示比如文本、时间序列、图像、音频以及视频等。数据可以通过适当的方法如特征提取变换成矩阵。 数据属性的类型来自它的语境、域或者语义有数值、非数值、分类数据类型以及文本数据。有两种适用于数据属性与描述的视角它们在数据挖掘与R语言中被广泛使用如下所述 基于代数或者几何视角的数据data in algebraic or geometric view整个数据集可以建模为一个矩阵。线性代数和抽象代数在这里起着很重要的作用。 基于概率视角的数据data in probability view将观测数据视为多维随机变量。每一个数值属性就是一个随机变量维度就是数据的维度。不论数值是离散的还是连续的这里都可以运用概率论。 为了帮助读者更自然地学习R语言我们将采用几何、代数以及概率视角的数据。 这里有一个矩阵的例子。列数由m确定m就是数据的维度行数由n确定n就是数据集的大小。 其中xi表示第i行表示一个m元组如下所示 Xj表示第j列表示一个n元组如下所示 1.10.1 数值属性 因为数值数据是定量的且允许任意计算所以它易于处理。数值数据与整数或者浮点数的性质是一样的。 来自有限集或者可数无限集的数值属性称为是离散的discrete例如一个人的年龄它是从1150开始的整数值。来自任何实数值的其他属性称为是连续的continuous。主要有两种数值类型 定距尺度interval-scaled这是以相同单位尺度测量的定量值例如某些特定鱼类的重量以国际度量标准如克或者千克。 定比尺度ratio-scaled除了值之间的差值之外该值可以通过值之间的比率进行计算。这是一个具有固定零点的数值属性因此可以说一个值是另一个值的多少倍。 1.10.2 分类属性 分类属性的值来自一组符号构成的集域集合例如人类服装的大小被分类为{S, M, L}。分类属性可以划分为两种类型 名义nominal该集合中的值是无序的且不是定量的这里只有相等运算是有意义的。 定序ordinal与定类类型相反这里的数据是有序的。这里除了相等运算外也可以进行不相等运算。 1.10.3 数据描述 基本描述可以用来识别数据的特征区分噪声或者异常值。两种基本的统计描述如下所示 集中趋势的度量measures of central tendency它测量数据分布的中间或中心位置均值、中位数、众数、值域中点等。 数据的离散程度的度量measures of dispersion of the data它包括全距、四分位数、四分位数间距等。 1.10.4 数据测量 数据测量用于聚类、异常值检测和分类。它指的是近似性、相似性和差异性的度量。两个元组或数据记录之间的相似值的取值范围是01的一个实数值数值越大元组之间的相似度就越高。差异性的原理相反差异性值越大两个元组就越不相似。 对于一个数据集数据矩阵在n×m阶矩阵n个元组和m个属性中存储了n个数据元组 相异度矩阵存储了数据集中的所有n个元组的近似度集合通常为一个n×n阶的矩阵。在下面的矩阵中d(i,?j)是两个元组之间的差异性。0表示彼此之间高度相似或者高度接近同样1表示完全不相同。数值越大相异度就越高。 大多数时候相异度和相似度是相关的概念。相似性度量通常可以使用一个函数来定义可以用相异性的度量来构建相似性反之亦然。 这里有一张表它列出了不同类型属性值常用的度量方法。 属性值类型 相异度 定类属性 两个元组之间的相异度可由下式计算d(i,?j)(p-m)/p。其中p表示数据的维度m表示在相同状态下匹配的数目 定序属性 定类属性的处理与数值属性的处理类似但在使用相应的方法之前它首先需要进行变换 定距尺度 欧几里得Euclidean、曼哈顿Manhattan、闵可夫斯基Minkowski距离用于计算数据元组的相异度 1.11 数据清洗 数据清洗是数据质量的一部分数据质量Data QualityDQ的目标如下 准确性数据被正确记录。 完整性所有相关数据都被记录。 唯一性没有重复的数据记录。 时效性数据不过时。 一致性数据是一致的。 数据清洗试图填补缺失值、发现异常值同时平滑噪声、修正数据中的不一致性。数据清洗通常是一个两步迭代的过程由差异检测和数据变换构成。 在大多数情况下数据挖掘的过程都包含如下两个步骤 第一步对源数据集进行测试以便发现差异。 第二步是选择变换方法来修正数据基于要修正属性的准确性以及新值与原始值的接近程度。然后应用变换来修正差异。 1.11.1 缺失值 在从各类数据源获取数据的过程中当某些字段为空或者包含空值时会存在许多情况。好的数据录入程序应该尽量避免或者最小化缺失值或错误的数目。缺失值与默认值是无法区分的。 如果某些字段存在缺失值那么有一些解决方案——每种解决方案都有不同的考虑与缺陷并且每种方案在特定情况下都是可用的。 忽略元组由于忽略元组除了那个缺失值以外你也不能使用剩余的值。这种方法只适用于当元组包含的一些属性有缺失值或者每个属性缺失值的百分比变化不大时。 人工填补缺失值对于大型数据集该方法并不适用。 使用全局常量填补缺失值use a global constant to fill the value使用该常量填补缺失值可能会误导挖掘过程并不十分安全。 使用属性集中趋势的度量来填补缺失值集中趋势的度量可用于对称数据分布。 使用属性均值或者中位数当给定元组时对于属于同一类的所有样本使用属性均值或者中位数。 使用最可能的值来填补缺失值缺失值可以用回归或者基于推理的工具比如贝叶斯形式或者决策树归纳所确定的数据进行填补。 最流行的方法是最后一种方案它基于当前值以及源于其他属性的值。 1.11.2 垃圾数据、噪声数据或异常值 正如在物理测试或者统计测试中噪声是发生在获取测量数据的测试过程中的一个随机误差。对于数据收集的过程不管你使用什么方法噪声都不可避免地存在。 用于数据平滑的方法如下所述。随着数据挖掘研究的发展新的方法也不断出现。 分箱这是一个局部范围平滑的方法在该方法中使用近邻值计算特定箱子的终值。已排序的数据分布到多个箱子中箱子中的每个值将被基于近邻值来计算出的值所取代。计算可以是箱子的中位数、箱子的边界即箱子的边界数据。 回归回归的目标是找到最佳曲线或者多维空间中某个类似于曲线的东西函数。因此其他值可以用于预测目标属性或者变量的值。在其他方面这是一种比较流行的平滑方法。 分类或者异常检测分类器是发现噪声或者异常的另一种固有方法。在分类过程中除了异常值外大部分源数据将被分组到几个类中。 1.12 数据集成 数据集成将多个数据源中的数据合并形成一个一致的数据存储。其常见的问题如下 异构数据这没有普遍的解决方案。 不同的定义different definition这是内在的即相同的数据具有不同的定义如不同的数据库模式。 时间一致性这可以检查数据是否在相同的时间段收集。 旧数据这指的是从旧系统留下的数据。 社会学因素这限制了数据的收集。 处理上述问题也有一些方法 实体识别问题模式整合和目标匹配是棘手的这称为实体识别问题。 冗余与相关性分析有些冗余可以通关相关性分析来检测。给定两个属性基于可用的数据这样的分析可以测量一个属性影响另一个属性的强度。 元组重复在元组级可以检测重复从而可以检测属性之间的冗余。 数据值冲突的检测和分辨率在不同的抽象级属性可能不同其中一个系统中的一个属性可能在不同的抽象级被记录。 1.13 数据降维 在分析复杂的多变量数据集时降低维度往往是必要的因为这样的数据集总是以高维形式呈现。因此举例来说从大量变量来建模的问题和基于定性数据多维分析的数据挖掘任务。同样有很多方法可以用来对定性数据进行数据降维。 降低维度的目标就是通过两个或者多个比原先矩阵小很多的矩阵来取代大型矩阵但原始矩阵可以被近似重构。通常是选取这些小矩阵的乘积来重构原始的矩阵这一般会损失一些次要信息。 1.13.1 特征值和特征向量 一个矩阵的特征向量是指该矩阵下述方程中的A乘以该特征向量下述方程中的v的结果为一个常数乘以该特征向量。这个常数就是关于该特征向量的特征值。一个矩阵可能有好几个特征向量。 Avλv 一个特征对就是特征向量及其特征值也就是上式中的(v, λ)。 1.13.2 主成分分析 用于降维的主成分分析Principal Component AnalysisPCA技术将多维空间中的点集所构成的数据视为一个矩阵其中行对应于点列对应于维度。 该矩阵与其转置的乘积具有特征向量和特征值其主特征向量可以看作空间中的方向且沿着该方向点排成最佳的直线。第二特征向量表示的方向使得源于主特征向量的偏差在该方向上是最大的。 主成分分析降维是通过最小化表示矩阵中给定列数的均方根误差来近似数据用其少数的特征向量来表示矩阵中的点。 1.13.3 奇异值分解 一个矩阵的奇异值分解Singular Value DecompositionSVD由以下3个矩阵构成 U Σ V U和V是列正交的其列向量是正交的且它们的长度为1。Σ是一个对角矩阵其对角线上的值称为奇异值。原始矩阵等于U、Σ和V的转置的乘积。 当连接原始矩阵的行和列的概念较少时奇异值分解是有用的。 当矩阵U和V通常与原始矩阵一样大时采用奇异值分解降维。为了使用较少列的U和V删除U、V和Σ中与最小奇异值对应的列。这样根据修正后的U、Σ和V重构原始矩阵时就最小化了误差。 1.13.4 CUR分解 CUR分解旨在将一个稀疏矩阵分解成更小的稀疏矩阵这些小矩阵的乘积近似于原始矩阵。 CUR从一个给定的稀疏矩阵中选择一组列构成矩阵C和一组行构成矩阵RC和R的作用就相当于奇异值分解中的U和V?T。行与列是根据一个分布随机选择的该分布取决于元素平方和的平方根。在矩阵C和R之间有一个方阵称为U它是由所选择的行与列的交集的伪逆pseudo-inverse所构造出来的。 根据CUR解决方案3个分量矩阵C、U和R将被检索。这3个矩阵的乘积将近似于原始矩阵M。在R社区中有一个R添加包rCUR用于CUR矩阵分解。 1.14 数据变换与离散化 根据前面的内容我们可以知道总有一些数据格式最适合特定的数据挖掘算法。数据变换是一种将原始数据变换成较好数据格式的方法以便作为数据处理前特定数据挖掘算法的输入。 1.14.1 数据变换 数据变换程序将数据变换成可用于挖掘的恰当形式。它们如下所述 平滑使用分箱、回归和聚类去除数据中的噪声。 属性构造根据给定的属性集构造和添加新的属性。 聚合在汇总或者聚合中对数据执行操作。 标准化这里对属性数据进行缩放以便落入一个较小的范围。 离散化数值属性的原始值被区间标签或者概念标签所取代。 对名义数据进行概念分层这里属性可以被推广到更高层次的概念中。 1.14.2 标准化数据的变换方法 为了避免依赖数据属性的测量单位的选择数据需要标准化。这意味着将数据变换或者映射到一个较小的或者共同的范围内。在这个过程后所有的属性获得相同的权重。有许多标准化的方法我们看看其中的一些办法。 最小-最大标准化该方法保留了原始数据值之间的关系对原始数据进行线性变换。当一个属性的实际最大值和最小值可用时该属性将被标准化。 z分数标准化这里属性值的标准化是基于属性的均值和标准差。当对一个属性进行标准化时如果其实际最大值和最小值是未知的则该方法仍然是有效的。 十进制标准化该方法通过移动属性值的小数点将其标准化。 1.14.3 数据离散化 数据离散化通过值映射将数值数据变换成区间标签或者概念标签。离散化技术包括 通过分箱将数据离散化这是一个根据指定数目的、分段的、自上而下的无监督分割技术。 根据直方图分析将数据离散化在该技术中直方图将属性值分割在不相交的范围内称为桶或者箱同样为无监督的方法。 通过聚类分析将数据离散化在该技术中应用聚类算法离散化数值属性它通过将该属性的值分割到不同的类或者组中。 通过决策树分析将数据离散化这里决策树采用自上而下的分割方法它是一个有监督的方法。为了离散化数值属性该方法选择具有最小熵的属性值作为分割点并递归地划分所得的区间以实现分层离散化。 通过相关分析将数据离散化该技术采用自下而上的方法通过发现最佳近邻区间然后递归地将它们合并成更大的区间这是一个有监督的方法。 1.15 结果可视化 可视化是数据描述的图形表示以便一目了然地揭示复杂的信息包括所有类型的结构化信息表示。它包括图形、图表、图解、地图、故事板以及其他结构化的图示。 好的可视化结果使你有机会通过专家的眼光来查看数据。可视化结果很美不仅因为它们的美学设计而且因为它们有效地生成见解和新理解的优雅的细节层。 数据挖掘的每个结果都可以通过使用算法进行可视化说明。可视化在数据挖掘过程中起着重要的作用。 创建最佳的可视化有4个主要特征 新颖的可视化不能只作为一个信息渠道而且还要提供一些新意以新的风格呈现信息。 信息化的对这些因素和数据本身的注意将形成一个有效的、成功的且漂亮的可视化结果。 有效的好的可视化结果有明确的目标、清晰定义的信息或者用于表达信息的特殊视角。它必须尽可能简单明了但不应该丢失必要的、相关的复杂性。这里无关的数据可以看作噪声。可视化应该反映它们所代表的数据的质量揭示数据源中内在的和隐含的性质与关系以便给最终使用者带来新的知识、见解和乐趣。 美感图形必须为呈现信息的主要目标服务不仅仅是坐标轴、布局、形状、线条和排版而且还要恰当使用这些工具。 可视化与R语言 R语言提供了具有出版质量的图表和图形的制作。R语言中包含图形设备还有一些设备不属于标准R语言安装的一部分可以通过命令行使用R语言中的图形。 R语言图形设置的最重要特征就是在R中存在两种截然不同的图形系统。 传统的图形系统 网格图形系统 将对最合适的设施进行评估并将它们应用于本书列出的所有算法的每一个结果的可视化中。 R图形系统和添加包中的函数可以分为如下几种类型 生成完整图形的高级函数 给现有图形添加进一步输出的低级函数 与图形输出交互运行的函数 可以以多种图形格式产生R的图形输出比如PNG、JPEG、BMP、TIFF、SVG、PDF和PS。 为了加强你对本章知识的理解这里有一些练习用于你检查相关的概念。 1.16 练习 现在让我们来检测到目前为止我们所学习的知识 数据挖掘和机器学习有什么区别 什么是数据预处理什么是数据质量 在你的计算机上下载R并安装R。 比较数据挖掘和机器学习。 1.17 总结 本章讨论了以下主题 数据挖掘和可用的数据源。 R语言的简要概述以及使用R语言的必要性。 统计学和机器学习以及它们与数据挖掘关系的描述。 两个标准的行业数据挖掘过程。 数据属性类型和数据测量方法。 数据预处理的3个重要步骤。 数据挖掘算法的可扩展性和效率以及数据可视化的方法与必要性。 社交网络挖掘、文本挖掘和网络数据挖掘。 关于RHadoop和Map Reduce的简短介绍。 在下面的章节中我们将学习如何使用R语言来处理数据并实现不同的数据挖掘算法。 第2章 频繁模式、关联规则和相关规则挖掘 本章中我们将首先学习如何用R语言挖掘频繁模式、关联规则及相关规则。然后我们将使用基准数据评估所有这些方法以便确定频繁模式和规则的兴趣度。本章内容主要涵盖以下几个主题 关联规则和关联模式概述 购物篮分析 混合关联规则挖掘 序列数据挖掘 高性能算法 关联规则挖掘算法可以从多种数据类型中发现频繁项集包括数值数据和分类数据。根据不同的适用环境关联规则挖掘算法会略有差异但大多算法都基于同一个基础算法即Apriori算法。另一个基础算法称为FP-Growth算法与Apriori算法类似。大多数的与模式相关的挖掘算法都是来自这些基础算法。 将找到的频繁模式作为一个输入许多算法用来发现关联规则或相关规则。每个算法仅仅是基础算法一个变体。 随着不同领域中的数据集大小和数据类型的增长提出了一些新的算法如多阶段算法、多重散列算法及有限扫描算法。 2.1 关联规则和关联模式概述 数据挖掘的一个最受欢迎的任务就是发现源数据集之间的关系它从不同的数据源如购物篮数据、图数据或流数据中发现频繁模式。 为了充分理解关联规则分析的目的本章中所有算法均用R语言编写这些代码使用算法的标准R添加包如arules添加包进行说明。 2.1.1 模式和模式发现 在众多的领域应用中频繁模式挖掘经常用于解决各种问题比如大型购物中心的市场调查可以通过分析购物交易数据来完成。 频繁模式是经常出现在数据集中的模式。频繁模式挖掘的数据类型可以是项集、子序列或子结构。因此频繁模式也可称为 频繁项集 频繁子序列 频繁子结构 接下来的章节将详细介绍这3种频繁模式。 当从给定的数据集中发现重复出现的有意义的规则或关系时这些新发现频繁模式将作为一个重要的平台。 为了提高挖掘数据集的效率提出了不同的模式。本章列举了以下几种模式后面将给出它们详细的定义。 封闭模式 最大模式 近似模式 紧凑模式 判别式频繁模式 2.1.1.1 频繁项集 频繁项集的概念来源于真实的购物篮分析。在诸如亚马逊等商店中存在很多的订单或交易数据。当客户进行交易时亚马逊的购物车中就会包含一些项。商店店主可以通过分析这些大量的购物事务数据发现顾客经常购买的商品组合。据此可以简单地定义零个或多个项的组合为项集。 我们把一项交易称为一个购物篮任何购物篮都有组元素。将变量s设置为支持阈值我们可以将它和一组元素在所有的购物篮中出现的次数做比较如果这组元素在所有购物篮中出现的次数不低于s我们就将这组元素称为一个频繁项集。 若一个项集包含有k个项则该项集称为k项集其中k是非零整数。项集X的支持计数记为support_count(X)表示给定数据集中包含项集X的计数。 给定一个预先定义的最小支持度阈值s如果support_count(X)≥s则称项集X为频繁项集。最小支持度阈值s是一个可以自定义的参数可以根据领域专家或经验进行调整。 频繁项集也经常应用于许多领域如下表所示。 项 篮子 说明 相关概念 词 文档 剽窃 文档 句子 生物标记物 生物标记物和疾病 病人的数据集 如果某个项集是频繁的那么该项集的任何一个子集也一定是频繁的。这称为Apriori原理它是Apriori算法的基础。Apriori原理的直接应用就是用来对大量的频繁项集进行剪枝。 影响频繁项集数目的一个重要因素是最小支持计数最小支持计数越小频繁项集的数目也越多。 为了优化频繁项集生成算法人们提出一些其他概念 闭项集给定数据集S如果Y∈S, X Y则support_count (X) ≠ support_count (Y)那么X称作闭项集。换言之如果X是频繁的则X是频繁闭项集。 最大频繁项集如果Y∈S, X YX是最大频繁项集则Y是非频繁的。换言之Y没有频繁超集。 约束频繁项集若频繁项集X满足用户指定的约束则X称为约束频繁项集。 近似频繁项集若项集X只给出待挖掘数据近似的支持计数则称为近似频繁项集。 top-k频繁项集给定数据集S和用户指定的整数k若X是前k个频繁项集则X称为top-k频繁项集。 下面给出一个事务数据集的例子。所有项集仅包含集合D {Ik |{k∈[1,7]}中的项。假定最小支持度计数为3。 tid交易号 项集或交易中的项列表 T001 I1, I2, I4, I7 T002 I2, I3, I6 T003 I1, I4, I6 T004 I1, I2, I5 T005 I2, I3, I4 T006 I2, I5, I6 T007 I2, I4, I7 T008 I1, I7 T009 I1, I2, I3 T010 I1, I2, I4 那么可以得到频繁项集L1 {Ik | k∈{1, 2, 4, 6, 7}}和L2 {{I1, I2}{I1, I4}{I2, I4}}。 2.1.1.2 频繁子序列 频繁子序列是元素的一个有序列表其中每个元素包含至少一个事件。一个例子是某网站页面访问序列具体而言它是某个用户访问不同网页的顺序。下面给出了频繁子序列的两个例子。 消费者数据某些客户在购物商城连续的购物记录可作为序列购买的每个商品作为事件项用户一次购买的所有项作为元素或事务。 网页使用数据访问WWW历史记录的用户可作为一个序列每个UI/页面作为一个事件或项目元素或事务定义为用户通过一次鼠标的单击访问的页面。 序列中包含的项数定义为序列的长度。长度为k的序列定义为k序列。序列的大小定义为序列中项集的数目。当满足1≤j1≤j2≤…≤jr-1≤jr≤v且a1bj1, a2bj2, …, arbjr则称序列s1a1a2…ar为序列s2b1b…br的子序列或s2为s1的超序列。 2.1.1.3 频繁子结构 在某些领域中研究任务可借助图论来进行建模。因此需要挖掘其中常见的子图子树或子格。例如 网络挖掘网页视为图的顶点网页之间的链接视为图的边用户的页面访问记录用来构造图。 网络计算网络上具有计算能力的任何设备作为顶点这些设备之间的相互连接作为边。由这些设备和设备之间的相互连接组成的整个网络视为图。 语义网络XML元素视为顶点元素之间的父/子关系视为边。所有的XML文件可视为图。 图G表示为G (V, E)其中V表示顶点的集合E表示边的集合。当V′V且E′E图G′ (V′, E′)称为G(V, E)的子图。下图给出一个子图的例子。图中左边是原始图及其包含的顶点和边右边是删除多条边或删除多个顶点后的子图。 2.1.2 关系或规则发现 基于已发现的频繁模式可以挖掘关联规则。根据关系的兴趣度的不同侧重点可以进一步研究以下两种类型的关系关联规则和相关规则。 2.1.2.1 关联规则 关联分析可以从海量数据集中发现有意义的关系这种关系可以表示成关联规则的形式或频繁项集的形式。具体的关联分析算法将在后面一个章节中给出。 关联规则挖掘旨在发现给定数据集事务数据集或其他序列-模式-类型数据集中的结果规则集合。给定预先定义的最小支持度计数s和置信度c给定已发现的规则X→Y support_count (X→Y)≥s且confidence (X→Y)≥c。 当X∩YX、Y不相交则X→Y是关联规则。规则的兴趣度通过支持度support和置信度confidence来测量。支持度表示数据集中规则出现的频率而置信度测量在X出现的前提下Y出现的可能性。 对于关联规则衡量规则可用性的核心度量是规则的支持度和置信度。两者之间的关系是 support_count(X)是数据集中包含X的项集数。 通常在support_count(X)中支持度和置信度的值表示为0100的百分数。 给定最小支持度阈值s和最小置信度阈值c。如果support_count (X→Y) s且confidence (X→Y)≥c则关联规则X→Y称为强规则。 对于关联规则含义的解释应当慎重尤其是当不能确定地判断规则是否意味着因果关系时。它只说明规则的前件和后件同时发生。以下是可能遇到不同种类的规则 布尔关联规则若规则包含项出现的关联关系则称为布尔关联规则。 单维关联规则若规则最多包含一个维度则为单维关联规则。 多维关联规则若规则至少涉及两个维度则为多维关联规则。 相关关联规则若关系或规则是通过统计相关进行测量的满足给定的相关性规则则称为相关关联规则。 定量关联规则若规则中至少一个项或属性是定量的则称为定量关联规则。 2.1.2.2 相关规则 在某些情况下仅仅凭借支持度和置信度不足以过滤掉那些无意义的关联规则。此时需要利用支持计数、置信度和相关性对关联规则进行筛选。 计算关联规则的相关性有很多方法如卡方分析、全置信度分析、余弦分析等。对于k项集X{i1, i2 …, ik}X的全置信度值定义为 2.2 购物篮分析 购物篮分析Market basket analysis是用来挖掘消费者已购买的或保存在购物车中物品组合规律的方法。这个概念适用于不同的应用特别是商店运营。源数据集是一个巨大的数据记录购物篮分析的目的发现源数据集中不同项之间的关联关系。 2.2.1 购物篮模型 购物篮模型是说明购物篮和其关联的商品之间的关系的模型。来自其他研究领域的许多任务与该模型有共同点。总言之购物篮模型可作为研究的一个最典型的例子。 购物篮也称为事务数据集它包含属于同一个项集的项集合。 Apriori算法是逐层挖掘项集的算法。与Apriori算法不同Eclat算法是基于事务标识项集合交集的TID集合交集项集的挖掘算法而FP-Growth算法是基于频繁模式树的算法。TID集合表示交易记录标识号的集合。 2.2.2 Apriori算法 作为常见的算法设计策略Apriori算法挖掘关联规则可以分解为以下两个子问题 频繁项集生成 关联规则生成 该分解策略大大降低了关联规则挖掘算法的搜索空间。 2.2.2.1 输入数据特征和数据结构 作为Apriori算法的输入首先需要将原始输入项集进行二值化也就是说1代表项集中包含有某项0代表不包含某项。默认假设下项集的平均大小是比较小的。流行的处理方法是将输入数据集中的每个唯一的可用项映射为唯一的整数ID。 项集通常存储在数据库或文件中并需要多次扫描。为控制算法的效率需要控制扫描的次数。在此过程中当项集扫描其他项集时需要对感兴趣的每个项集的表示形式计数并存储以便算法后面使用。 在研究中发现项集中有一个单调性特征。这说明每个频繁项集的子集也是频繁的。利用该性质可以对Apriori算法过程中的频繁项集的搜索空间进行剪枝。该性质也可以用于压缩与频繁项集相关的信息。这个性质使频繁项集内的小频繁项集一目了然。例如从频繁3项集中可以轻松地找出包含的3个频繁2项集。 当我们谈论k项集时我们指的是包含k个项的项集。 购物篮模型表采用水平格式它包含一个事务ID和多个项它是Apriori算法的基本输入格式。相反还有另一种格式称为垂直格式它使用项ID和一系列事务ID的集合。垂直格式数据的挖掘算法留作练习。 2.2.2.2 Apriori算法 在Apriori算法频繁项集产生过程中主要包含以下两种操作连接和剪枝。 一个主要的假定是任何项集中的项是按字母序排列的。 连接给定频繁k-1项集Lk-1为发现频繁k项集Lk需要首先产生候选k项集记为Ck。 剪枝候选项集Ck通常包含频繁项集LkCk为减少计算开销。这里利用单调性质对Ck进行剪枝。 以下是频繁项集产生的伪代码 2.2.2.3 R语言实现 这里给出Apriori频繁项生成集算法的R语言代码。记事务数据集为D最小支持计数阈值为MIN_SUP算法的输出为L它是数据集D中的频繁项集。 Apriori函数的输出可以用R添加包arules来验证该包可以实现包含Apriori算法和Eclat算法的模式挖掘和关联规则挖掘。Apriori算法的R代码如下 为了检验上面的R代码可以应用arules添加包对算法输出进行验证。 Arules添加包Hahsler et al.2011提供了挖掘频繁项集、最大频繁项集、封闭频繁项集以及关联规则等功能。可用的算法包含Apriori算法和Eclat算法。此外arulesSequence添加包基于arules添加包中还包含cSPADE算法。 给定项集 首先利用预先定义的排序算法将D中的项组织为有序列表这里简单地根据字母顺序将各项进行排序可得到 假定最小支持计数为5输入数据如下表所示 tid事务id 项集或事务中的项目列表 T001 I1, I2, I4, I7 T002 I2, I3, I6 T003 I1, I4, I6 T004 I1, I2, I5 T005 I2, I3, I4 T006 I2, I5, I6 T007 I2, I4, I7 T008 I1, I7 T009 I1, I2, I3 T010 I1, I2, I4 在对数据集D的第一次扫描中可以得到每个候选1项集C1的支持计数。候选项集及其支持计数为 项集 支持计数 {I1} 6 {I2} 8 {I3} 2 {I4} 5 {I5} 2 {I6} 3 {I7} 3 在将支持计数与最小支持计数比较后可以得到频繁1项集L1 项集 支持计数 {I1} 6 {I2} 8 {I4} 5 通过L1产生候选项集C2C2{{I1, I2}, {I1, I4}, {I2, I4}}。 项集 支持计数 {I1, I2} 4 {I1, I4} 3 {I2, I4} 4 将支持计数与最小支持数比较后可以得到L2?。然后算法终止。 2.2.2.4 Apriori算法的变体 为提升Apriori算法的效率和可扩展性人们提出了Apriori算法的一些变体。下面介绍几种比较代表性的Apriori改进算法。 2.2.3 Eclat算法 Apriori算法循环的次数与模式的最大长度是一样的。EclatEquivalence CLASS Transformation算法是为了减少循环次数而设计的算法。在Eclat算法中数据格式不再是tid, item id set事务编号项ID集合而是item id, tid set项ID事务编号集合。Eclat算法的数据输入格式是样本购物篮文件中的垂直格式或者从事务数据集中发现频繁项集。在该算法中还使用Apriori性质从k项集生成频繁k1项集。 通过求集合的交集来生成候选项集。正如前文所述垂直格式结构称为事务编号集合tidset。如果与某个项目I相关的所有事务编号都存储在一个垂直格式事务集合中那么该项集就是特定项的事务编号集合。 通过求事务编号集合的交集来计算支持计数。给定两个tidset X和YX∩Y交集的支持计数是X∩Y的基数。伪代码是F←, P←{i,t(i)|i∈I, |t(i)|≥MIN_SUP}。 R语言实现 下面给出Eclat算法挖掘频繁模式的R语言代码。在调用该函数前需要将f设为空而p是频繁1项集。 这里给出一个例子的运行结果。其中I{beer,chips,pizza,wine}。与之对应的水平和垂直格式的事务数据集如下表所示。 tid X 1 {beer, chips, wine} 2 {beer, chips} 3 {pizza, wine} 4 {chips, pizza} x tidset beer {1,2} chips {1,2,4} pizza {3,4} wine {1,3} 该信息的二进制格式为 tid beer chips pizza wine 1 1 1 0 1 2 1 1 0 0 3 0 0 1 1 4 0 1 1 0 在调用Eclat算法之前设置最小支持度MIN_SUP2, F{}则有 算法运行过程如下图所示。经过两次迭代后可以得到所有的频繁事物编号集合{beer,1 2,chips,1 2 4,pizza, 3 4,wine, 1 3,{beer, chips}, 1 2}。 可以使用R添加包arules对Eclat函数的结果进行验证。 2.2.4 FP-growth算法 FP-growth算法是在大数据集中挖掘频繁项集的高效算法。FP-growth算法与Apriori算法的最大区别在于该算法不需要生成候选项集而是使用模式增长策略。频繁模式FP树是一种数据结构。 2.2.4.1 输入数据特征和数据结构 算法采用一种垂直和水平数据集混合的数据结构所有的事务项集存储在树结构中。该算法使用的树结构称为频繁模式树。这里给出了该结构生成的一个例子。其中I{A,B,C,D,E,F}事务数据集D如下表所示。FP树的构建过程如下表所示。FP树中的每个节点表示一个项目以及从根节点到该节点的路径即节点列表表示一个项集。这个项集以及项集的支持信息包含在每个节点中。 tid X 1 {A, B, C, D, E} 2 {A, B, C, E} 3 {A, D, E} 4 {B, E, D} 5 {B, E, C} 6 {E, C, D} 7 {E, D} 排序的项目顺序如下表所示。 项目 E D C B A 支持计数 7 5 4 4 3 根据这个新的降序顺序对事务数据集进行重新记录生成新的有序事务数据集如下表所示 tid X 1 {E, D, C, B, A} 2 {E, C, B, A} 3 {E, D, A} 4 {E, D, B} 5 {E, C, B} 6 {E, D, C} 7 {E, D} 随着将每个项集添加到FP树中可生成最终的FP树FP树的生成过程如下图所示。在频繁模式FP树生成过程中同时计算各项的支持信息即随着节点添加到频繁模式树的同时到节点路径上的项目的支持计数也随之增加。 将最频繁项放置在树的顶部这样可以使树尽可能紧凑。为了开始创建频繁模式树首先按照支持计数降序的方式对项进行排序。其次得到项的有序列表并删除不频繁项。然后根据这个顺序对原始事务数据集中的每个项重新排序。 给定最小支持度MIN_SUP3根据这个逻辑可以对下面的项集进行处理。 下面是执行步骤4和步骤7后的结果算法的过程非常简单和直接。 头表通常与频繁模式树结合在一起。头指针表的每个记录存储指向特定节点或项目的链接。 作为FP-growth算法的输入频繁模式树用来发现频繁模式或频繁项集。这里的例子是以逆序或从叶子节点删除FP树的项目因此顺序是A, B, C, D, E。按照这种顺序可以为每个项目创建投影频繁模式树。 2.2.4.2 FP-growth算法 这里是递归定义的伪代码其输入值为R←GenerateFPTree(D), P← , F← 2.2.4.3 R语言实现 FP-growth算法的主要部分的R语言实现代码如下所示。 2.2.5 基于最大频繁项集的GenMax算法 GenMax算法用来挖掘最大频繁项集Maximal Frequent ItemsetMFI。算法应用了最大性特性即增加多步来检查最大频繁项集而不只是频繁项集。这部分基于Eclat算法的事物编号集合交集运算。差集用于快速频繁检验。它是两个对应项目的事物编号集合的差。 可以通过候选最大频繁项集的定义来确定它。假定最大频繁项集记为M若X属于M且X是新得到频繁项集Y的超集则Y被丢弃然而若X是Y的子集则将X从集合M中移除。 下面是调用GenMax算法前的伪代码 M← 且P←{Xi, t(Xi)|Xi∈D, support_count(Xi)≥MIN_SUP} 其中D是输入事务数据集。 R语言实现 GenMax算法的主要部分的R语言代码如下所示 2.2.6 基于频繁闭项集的Charm算法 在挖掘频繁闭项集过程中需要对项集进行封闭检查。通过频繁闭项集可以得到具有相同支持度的最大频繁模式。这样可以对冗余的频繁模式进行剪枝。Charm算法还利用垂直事物编号集合的交集运算来进行快速的封闭检查。 下面是调用Charm算法前的伪代码 C← 且P←{Xi, t(Xi)|Xi∈D, support_count(Xi)≥MIN_SUP} 其中D是输入事务数据集。 R语言实现 Charm算法的主要部分的R语言实现代码如下 2.2.7 关联规则生成算法 在根据Apriori算法生成频繁项集的过程中计算并保存每个频繁项集的支持计数以便用于后面的关联规则挖掘过程即关联规则挖掘。 为生成关联规则X→YlX∪Yl为某个频繁项集需要以下两个步骤 首先得到l的所有非空子集。 然后对于l的子集XYl-X规则X→Y为强关联规则当且仅当confidenceX→Y≥minimumconfidence。一个频繁项集的任何规则的支持计数不能小于最小支持计数。 关联规则生成算法的伪代码如下所示。 R语言实现 生成Apriori关联规则的算法的R语言代码如下所示 为了验证上述R语言代码可以使用Arules和Rattle添加包验证它的输出。 ArulesHahsler et al., 2011和Rattle添加包提供了对关联规则分析的支持。对于输出规则的可视化可利用AruleViz。 2.3 混合关联规则挖掘 关联规则挖掘有两个有意义的应用一是多层次和多维度关联规则挖掘二是基于约束的关联规则挖掘。 2.3.1 多层次和多维度关联规则挖掘 对于给定的事务数据集若数据集的某些维度存在概念层次关系则需要对该数据集进行多层次关联规则挖掘。对事物数据集可用的任何关联规则挖掘算法都可以用于该任务。下表给出亚马逊商店的一个例子。 TID 购买的项 1 Dell Venue 7 16 GB Tablet, HP Pavilion 17-e140us 17.3-Inch Laptop... 2 Samsung Galaxy Tab 3 Lite, Razer Edge Pro 256GB Tablet… 2 Acer C720P-2666 Chromebook, Logitech Wireless Combo MK270 with Keyboard and Mouse... 2 Toshiba CB35-A3120 13.3-Inch Chromebook, Samsung Galaxy Tab 3 (7-Inch, White)... 下面是多层次模式挖掘的流程图。 基于概念层次低层次概念可以投影到高层次概念具有高层次概念的新数据集可以代替原始的低层次概念。 可以在每个概念层次计算支持计数。许多类Apriori算法在计算支持计数时稍微有些不同。下面是几种不同的方法 对所有的层次使用统一的最小支持度阈值。 对较低的层次使用较小的支持度阈值。 基于组的最小支持度阈值。 有时Apriori性质并不总成立。这里有一些例外。 多层次关联规则是从概念层次的多层次中挖掘出来的。 2.3.2 基于约束的频繁模式挖掘 基于约束的频繁模式挖掘是使用用户设定的约束对搜索空间进行剪枝的启发式算法。 常见的约束有但不局限于以下几种情况 知识类型的约束指定我们想要挖掘什么 数据约束对初始数据集的限制 维度层次约束 兴趣度约束 规则约束 2.4 序列数据集挖掘 序列数据集挖掘的一个重要任务是序列模式挖掘。A-Priori-life算法被用来进行序列模式挖掘这里使用的A-Priori-life算法它是采用广度优先策略。然而FP-growth算法采用深度优先策略。出于不同的原因算法有时还需要综合考虑一些约束。 从序列模式中可以发现商店消费者的常见购买模式。在其他方面特别是广告或市场营销序列模式挖掘发挥重要作用。可以从网络日志挖掘、网页推荐系统、生物信息学分析、病历跟踪分析、灾害预防与安全管理等领域中预测个人消费者行为。 本章中的规则都是从序列模式中挖掘出来的它们具有多种。其中一些类型序列模式如下所示 序列规则X→Y其中XY。 标签序列规则Label Sequential RuleLSR形如X→Y其中Y是一个序列X是将序列Y中的若干项用通配符替换后而产生的序列。 类序列规则Class Sequential RuleCSR定义为X若 X→y假设S为序列数据集I是序列数据集S中所有项的集合Y是类标签的集合I∩YX是一个序列且y∈Y。 2.4.1 序列数据集 序列数据集S定义为元组sid, s的集合其中sid为序列IDs为序列。 在序列数据集S中序列X的支持度定义为S中包含X的元组数即 supportS(X){(sid, s)∨(sid, s)∈S←Xs} 这是序列模式的一个内在性质它应用于相关的算法如Apriori算法的Apriori性质。对于序列X及其子序列YsupportX≤support(Y)。 2.4.2 GSP算法 广义序列模式Generalized Sequential PatternGSP算法是一个类似Apriori的算法但它应用于序列模式。该算法是逐层算法采取宽度优先策略。它具有如下的特征 GSP算法是Apriori算法的扩展。它利用Apriori性质向下封闭即给定最小支持计数若不接受某个序列则其超序列也将丢弃。 需要对初始事务数据集进行多次扫描。 采用水平数据格式。 每次扫描中通过将前一次扫描中发现的模式进行自连接来产生候选项集。 在第k次扫描中仅当在第k-1次扫描中接受所有的k-1子模式才接收该序列模式。 GSP算法为 伪代码为 2.5 R语言实现 算法主要部分的R语言实现为 2.5.1 SPADE算法 使用等价类的序列模式发现Sequential Pattern Discovery using Equivalent classSPADE算法是应用于序列模式的垂直序列挖掘算法它采用深度优先策略。算法的特征是 SPADE算法是Apriori算法的扩展。 算法采用Apriori性质。 需要对初始事务数据集进行多次扫描。 采用垂直数据格式。 算法采用简单的连接运算。 所有序列的发现都需要对数据进行3次扫描。 下面是调用SPADE算法之前的伪代码 F←, ∧k←0, P←{s, L(s)s∈∑, support_count(s)≥MIN_SUP} R语言实现 算法主要部分的R语言代码实现是 2.5.2 从序列模式中生成规则 序列规则、标签序列规则和类序列规则都可以从序列模式中生成这些可以从前面的序列模式发现算法中得到。 2.6 高性能算法 伴随着数据集规模的增长对高性能关联/模式挖掘算法的要求也随之增加。 随着Hadoop和其他类MapReduce平台的提出满足这些需求成为可能。相关内容将于后续章节中进行介绍。根据数据集的大小可以对某些算法进行调整以防止算法循环调用导致的栈空间不足问题这也给我们将这些算法转化到MapReduce平台时带来了挑战。 2.7 练习 为加强对本章内容的掌握这里给出一些有助于更好理解相关概念的实践问题。 编写R程序寻找给定的样本购物篮事务文件中包含了多少唯一的项名。将每个项的名字映射为一个整数ID。找出所有的频繁闭项集。找出所有最大频繁项集和它们的支持计数。你自己将支持计数阈值设置为一个变量值。 用R语言编码实现AprioriTid 算法。 2.8 总结 本章主要学习了以下内容 购物篮分析。 作为关联规则挖掘的第一步频繁项集是一个主要因素。除算法设计外定义了闭项集、最大频繁项集。 作为关联规则挖掘的目标通过支持计数、置信度等度量来挖掘关联规则。除支持计数外使用相关公式挖掘相关规则。 频繁项集的单调性即若某个项集是频繁的则其所有子集也是频繁的。 Apriori算法是挖掘频繁模式的第一个高效算法其他诸多算法均为Apriori的变体。 序列中的序列模式。 下一章将介绍基本分类算法包括ID3、C4.5和CART等算法这部分内容也是数据挖掘的重要应用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85945.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!