CS246: Mining Massive Data Sets
CS246: Mining Massive Data Sets
课程教材: MMDs
前序知识: 编程语言 Python 或者 Java;数据结构和算法;概率论;线性代数;多变量积分;数据库系统
#介绍
#什么是数据挖掘
数据分析和挖掘的应用场景
- 推荐系统
- 网络检索
- AlphaGo
- 机器人控制
数据分析和挖掘的基本任务
- 数据分析
- 对数据进行 inspecting, cleaning, transforming 和 modeling,以发现有用的信息,提出建议,支持决策
- 数据挖掘
- 数据分析技术之一,更加关注于利用 modeling 和 knowledge discovery 来做预测,而不是仅仅做数据的描述
不同类型的数据
- 高维数据
- 图数据
- 无限流数据
- 多模态数据
数据挖掘与其他学科的关系
- 与数据库: 都有大规模数据,简单查询
- 数据库视角: 大规模数据的查询分析
- 与机器学习: 都有小量数据,复杂模型
- 机器学习视角: 模型推理
- 与 AI
- 与计算机理论: 都有随机化算法
数据挖掘的清单
- 按照场景划分
- 监督学习
- 无监督学习
- 强化学习
- 半监督学习
- 迁移学习
- 结构化学习
- 按照任务划分
- 回归
- 分类
- 聚类
- 按照方法
- 线性模型
- 深度学习
- SVM
- 决策树
- KNN
#MapReduce & Spark
大规模计算的挑战
如何分发计算
如何让写分布式程序更简单
机器故障: 每台机器的平均寿命是 3 年
通过网络传输数据很慢
- 近数据计算
- Spark/Hadoop
节点故障如何保证数据安全
- 分布式存储
经典 MapReduce 模型
- 三个阶段:Map, Shuffle, Reduce
- 实现:原始 Google 实现,Hadoop,Spark,Flink
- 优点:
- 模型简单
- 隐藏了底层细节
- 缺点:
- 巨大的性能折损:Map 的中间结果需要先写入磁盘,进行排序,然后再被 Reducer 读取
- 表达力弱:很多问题不容易表示成 MapReduce 过程
MapReduce 的改进 – Data-Flow 系统
- MapReduce 的问题在于,Map 和 Reduce 之间的数据流动是固定的,不够灵活。
- Data-Flow 系统的改进包括
- 允许任意数量的任务
- 允许 Map 和 Reduce 以外的函数
- 如果数据流是无环的,可以实现局部错误恢复
Spark 引擎
- 表达力更强的计算系统
- 快速数据共享
- 中间结果可以在内存中共享
- 需要大量内存
- 重复计算可以缓存
- 中间结果可以在内存中共享
- 一般化的执行图:DAG 模型
- 更丰富的函数库:不止 Map 和 Reduce
- 容易编程
Spark 的关键设计
- RDD: Resilient Distributed Dataset
- KV 集合的分片
- Transformations: 对 RDD 进行数据操作
- 例如: map, filter, join, union, intersection, distinct
- Lazy Evaluation
- Actions: 返回结果
- collect, count, reduce, take
- DataFrame: 类似于 SQL 的表格
- DataSet: 类似于 DataFrame,但是类型安全
Spark 的库
- Spark SQL
- Spark Streaming
- MLlib
- GraphX
适合于 MR 的问题
- 统计每个 Host 下所有网页的总大小
- 统计机器翻译:5-gram 的频率
- 计算两个表的自然连接
不适合于 MR 的问题
- 图
- 相互依赖的数据
- 机器学习
- 很多 pair 数据的对比
MR 的开销估算
- 通信开销
- 已用的通信开销
- 计算开销
#关联规则挖掘
动机:识别超市中哪些商品经常被一起购买
问题定义:
给定 次交易记录,每次交易记录包含若干个物品。找到频繁项集。
#应用场景
- 搜索引擎对重复内容的网页去重
- 新闻网站对一系列相关的新闻聚类
- 寻找基因组中相似的序列
- 从用户行为中找到相似的用户
- 文本抄袭检测
- 组合药物的相互作用
#定义
- 支持度
- 项集 的支持度,支持度越高,说明 共同出现得越频繁。
- 频繁项集(Frequent Itemset)
- 如果一个项集 的支持度大于,则称 是频繁的。
- 关联规则(Association Rules)
- 使用 表示:如果一笔交易包含物品,则该交易很可能包含物品。
- 置信度
- 关联规则 的置信度。
#Min-Hashing 算法
#动机
从大规模数据中快速找到相似的数据对。例如,从网页中找到相似的网页,从用户中找到相似的用户。严谨定义:从数据集 中找到所有相似的数据对,并且。
朴素方法需要计算所有数据对的相似度,复杂度为,不适用于大规模数据。
#方法
- Shingling: 把原始文档转换成离散的集合
- Min-Hashing: 用小的签名表示大的集合
- Locality-Sensitive Hashing: 用小的签名找到相似的数据对