《大数据分析》复习
宝图镇楼
数据挖掘是什么
给定大量数据情况下,发现具有以下特征的模式(模型):有效性、可用性、出乎意料、可理解性。
Hadoop生态圈
Oozie是一个用于管理Hadoop作业的工作流调度程序系统。
Zookeeper是一个分布式的、开源的分布式应用协调服务。
Pig是一种数据流语言,用来快速轻松的处理巨大的数据。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(MySQL、PostgreSQL...)间进行数据的传递,可以将一个关系型数据库中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
HBase是一个分布式的、面向列的开源数据库 。
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统 。
Hadoop相关Apache项目
- Ambari: Hadoop集群的供应、管理和监控
- Avro: 数据序列化的系统
- Cassandra: Cassandra是一套开源分布式NoSQL数据库系统
- Chukwa: 一个分布式存储和计算系统
- Hbase
- Hive
- Mahout: 提供一些可扩展的机器学习领域经典算法的实现
- Pig
- Spark: 专为大规模数据处理而设计的快速通用的计算引擎
- Tez: Tez是Apache开源的支持DAG作业的计算框架,它直接源于MapReduce框架,
- ZooKeeper
三种模式的Hadoop集群
- 独立式
- 伪分布式
- 全分布式
HDFS架构
Hbase介绍
- 数据库
- 分布式的、非结构化的、稀疏的、面向列的
- 基于HDFS,山寨版的BigTable,继承了可靠性、高性能、可伸缩性
Hive简介
Hive是基于Hadoop的数据仓库工具
特点:
- 学习成本低
- 提供完整的sql查询功能
- 可以将结构化的数据文件映射为一张数据库表
- 可以将sql语句转换为MapReduce任务进行运行
- 可以通过类SQL语句快速实现简单的MapReduce统计
PageRank
PageRank是一种由搜索引擎根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一
。
2个问题
- dead ends: cause importance to “leak out”
- spider traps: absorb all importance
SVD奇异值分解
将矩阵A分解成上述形式
A: Input data matrix
U: Left singular vectors
$\sum$: Singular values
V: Right singular vectors
$AA^T=U\Sigma V^TV\Sigma^TU^T=U\Sigma \Sigma^TU^T \tag {2-2}$
$A^TA=V\Sigma^TU^TU\Sigma V^T=V\Sigma^T\Sigma V^T \tag{2-3}$
$\Sigma\Sigma^T = \left[\begin \end\sigma_1^2 & 0 & 0 & 0\0 & \sigma_2^2 & 0 & 0\0 & 0 & \ddots & 0 \0 & 0 & 0 & \ddots \\right]_{m\times m}\quad $
开方得奇异值
矩阵的特征值分解
设A为n阶矩阵,若存在常数λ及n维非零向量x,使得Ax=λx,则称λ是矩阵A的特征值,x是A属于特征值λ的特征向量。
假设矩阵A有n个线性无关的特征向量$%5Cleft%20%5C%7B%20v%5E%7B%5Cleft%20%28%201%20%5Cright%20%29%7D%2C...%2C%20v%5E%7B%5Cleft%20%28%20n%20%5Cright%20%29%7D%5Cright%20%5C%7D$,对应着特征值。我们将特征向量连成一个矩阵,使得每一列是一个特征向量:$V%3D%5Cleft%20%5B%20v%5E%7B%5Cleft%20%28%201%20%5Cright%20%29%7D%2C...%2Cv%5E%7B%5Cleft%20%28%20n%20%5Cright%20%29%7D%5Cright%20%5D$。类似的,我们也可以将特征值连接成一个向量。因此,A的特征分解可以记作:
步骤:
- 计算A的特征多项式| λ E - A| = 0
- 求出特征值
- 求出A的全部特征向量
贝叶斯定理
假设某种疾病的发病率为0.001(1000 个⼈中会有⼀个⼈得病),现有⼀种 试剂在患者确实得病的情况下,有 99%的⼏率呈现为阳性,⽽在患者没 有得病的情况下,它有5%的⼏率呈现 为阳性(也就是假阳性),如有⼀位 病⼈的检验成果为阳性,那么他的得 病概率是多少呢?
$ \begin\begin P(A|B)&=\frac{P(B|A)P(A)}{P(B)}\ &= \frac{P(B|A)P(A)}{P(B|A)P(A) + P(B|C)P(C)}\ &= \frac{0.99 \times 0.001}{0.99 \times 0.001 + 0.05 \times 0.999}\approx 0.019 \end\end $
ID3算法
ID3算法是一种贪心算法,用来构造决策树。
- 使用所有没有使用的属性并计算与之相关的样本熵值
- 选取其中熵值最小的属性
- 生成包含该属性的节点
C4.5算法
C4.5算法是对ID3算法的改进,C4.5克服了ID3的2个缺点:
- 用信息增益选择属性时偏向于选择分歧比较多的属性值,即取值多的属性
- 不能处理连续属性
kNN算法k
kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合
计算过程:
- 令k是最近邻数目,D是训练样例的集合
- 对于每个测试样本z=(x', y'),计算z和D中每个训练样例(x, y)的距离d(x', x)
- 选择离z最近的K个训练样例的集合Dz
- 样例z的类别为Dz中出现次数最多的样本
硬聚类和软聚类
硬聚类
每个文档只属于一个群集
软聚类
每个文档可以属于至少一个群集
K-Means优缺点
k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
优点
- 相对有效
- 通常终止于局部最优
缺点
- 仅当定义了平均值时才适用
- 需要指定k
- 噪声数据和异常值
- 不适合发现具有非凸形状的簇
层次方法
使用距离矩阵作为聚类准则。此方法不需要输入簇的数目k,但需要终止条件
聚类方法总览
Hierarchical(层次结构):
- Agglomerative:自底向上,combine最近的两个簇为一个
- Divisive:自顶向下,递归地划分
Point assignment(点分配):
- maintain一组簇
- 点属于最近的簇
层次聚类
关键操作
重复组合最近的两个簇
三个重要问题
- 如何表示多个点的簇?
- 合并簇时,如何表示每个簇的“位置”,以判断哪对簇最接近?
- 欧几里得情形:每个簇都有一个质心=其(数据)点的平均值
- 解决: 质心 =距离其他点“最近”的点
- 如何确定簇的“接近度”?
- 当计算簇间距离时,将簇视为质心;用质心距离测量簇距离
- 簇间距离=任意两点之间距离的最小值,每个簇一个
- 选择簇的“凝聚”概念,例如从质心的最大距离
- 何时停止组合簇?
定义最近簇对的变量
- Single-link:最相似余弦的相似性
- Complete-link:最远点的相似性,最小余弦相似性
- Centroid:其质心(重心)最相似的星团
- Average-link:元素对之间的平均余弦
非欧几里得情形
我们唯一能谈论的“地点”就是这些点本身,所以没有两点之间的“平均”
“最近”的点
几种“最近”可能的理解:
- 最小点到其他点的最大距离
- 到其他点的最小平均距离
- 到其他点距离的最小平方和
质心是群集中所有(数据)点的平均值。这意味着质心是一个“人造”点。
质心是一个现存的(数据)点,它与集群中的所有其他点“最接近”。
Cohesion凝聚
使用合并簇的直径=簇中的点之间的最大距离
基于平均距离:使用群集中点之间的平均距离
基于密度:取直径或平均距离,例如,除以群集中的点数
执行时
直接层次聚类
在每个步骤中,计算所有簇对之间的成对距离,然后合并
复杂度$O(n^3)$
使用优先级队列
仔细实现可以将时间减少到 $O(N^2 logN)$
(对于不适合内存的大型数据集来说仍然太贵)
其他层次聚类方法
- 聚集聚类方法的主要缺点(agglomerative clustering methods )
- Do not scale well: 时间复杂度至少 $O(n^2)$
- 无法撤消以前所做的
- 层次聚类与基于距离聚类的集成
- BIRCH: 使用cf树并逐步调整子簇的质量
- CURE: 从簇中选择散射良好的点,然后将它们缩小到簇中心指定的分数
启发式
启发式方法被用来快速得到一个希望接近最佳答案的解决方案,或“最优解决方案”。启发式是一种“经验法则”,一种有根据的猜测、直觉判断或简单的常识。
启发式是解决问题的一般方法。 Heuristics 作为名词是heuristic methods的另一个名称。
启发式算法
- 仿动物类算法
- 粒子群优化
- 蚂蚁优化
- 鱼群算法
- 蜂群算法等
- 仿植物类算法
- 向光性算法
- 杂草优化算法
- 仿人类算法
- 和声搜索算法
基于内容的推荐
Main idea: Recommend items to customer x similar to previous items rated highly by x
基本思想:向客户X推荐与 X评分高的以前项目 类似的项目
例如:同样的演员、相似的内容
赞成理由
- 不需要其他用户的数据(无冷启动或稀疏性问题)
- 能够向有独特品味的用户推荐
- 能够推荐不流行的、新的产品
- 可解释
反对理由
- 很难找到合适的特性
- 对新用户的建议(如何建立用户画像)
- Overspecialization
- 无法利用其他用户的质量判断
- 人们可能有多种兴趣
- 从不推荐用户内容画像以外的项目
协同过滤
对于用户x,查找与x的评级“相似”的其他用户集n
根据n中用户的ratings估计x的ratings
用户-用户协同过滤
物品-物品协同过滤
相同的相似性度量和预测功能
赞成理由
适用于任何类型的item(无特征选择需要)
反对理由
- 冷启动(cold start):系统中需要足够的用户来查找匹配项
- 稀疏性(Sparsity):用户/评分矩阵是稀疏的;很难找到评分相同的用户
- 第一个评分者( First rater):无法推荐以前未评级的item
- 流行偏见(Popularity bias):无法给有独特品味的人推荐item;趋向于推荐流行item
评估预测
将预测与已知评级进行比较
- 均方根误差(RMSE)
- 前10名的精准度
- 秩相关:斯皮尔曼 系统与用户完全排名的相关性
另一种方法:0/1模型
- 覆盖范围 (coverage):系统可以预测的项目/用户数量
- 精密度(Precision):预测的正确率
- 接收机工作特性(Receiver operating characteristic, ROC):假阳性与假阴性的折衷曲线
Spark
Apache Spark是一个开源的集群计算框架,最初是在加州大学伯克利分校的 AMPLab 中开发的,但后来捐赠给了Apache软件基金会。与Hadoop基于磁盘的分析范式不同,spark具有多阶段内存分析。
为什么Spark
- Speed:基于内存比Hadoop快100倍,基于磁盘快10倍
- Ease of Use:可以使用Java、Scala、Python、R快速开发应用
- Generality:结合SQL、流式处理和复杂分析
Spark生态系统
Spark功能简介
Spark SQL
-
前身是Shark
-
交互式查询、标准访问接口、兼容Hive
-
专门用于处理结构化数据:分布式SQL引擎;在Spark程序中调用API
Spark Streaming
实时对大量数据进行快速处理,处理周期短
Spark GraphX
以图为基础数据结构的算法实现和相关应用
Spark MLlib
为解决机器学习开发的库,包括分类、回归、聚类和协同过滤等
集群管理框架
Standalone mode
原生集群管理功能:任务调度、资源分配等
Apache Mesos
从分布式计算节点上抽象CPU、Memory、Storage and other compute resources给其他框架使用,实现了静态资源分配功能
Hadoop Yarn
Hadoop MapReduce的第二个版本架构,把资源管理和任务管理剥离开;实现了静态资源分配和动态资源分配功能
EC2
Amazon EC2云平台, 提供⼀个安装了Spark、Shark 和HDFS的集群,可直接登录到集群,把它当作你实 验室的集群使用
Spark Streaming
实时对大量数据进行快速处理:处理周期短;连续不断地计算
计算基本过程
数据分批
NoSQL数据库类型
Graph stores
图数据库用于存储有关数据网络(如社会连接)的信息。如Neo4J
Document databases
文档数据库将每个密钥与称为文档的复杂数据结构配对。
Key-value stores
“键值存储是最简单的NoSQL数据库。数据库中的每个项都存储为属性名(或“key”)及其值。键值存储的示例有Riak和Berkeley DB。
Wide-column stores
宽列存储(如cassandra和HBase)针对大型数据集上的查询进行了优化,并将数据列(而不是行)存储在一起。
Neo4j数据库
-
面向图
-
用Java实现,可通过使用Cypher查询语言通过事务性HTTP端点从用其他语言编写的软件访问
-
具有本机图存储和处理的acid兼容事务数据库
-
最流行的图数据库
-
所有内容都存储为边、节点或属性
-
每个节点和边可以具有任意数量的属性
-
节点和边都可以标记
-
标签可用于缩小搜索范围
Neo4j逻辑架构
Cypher
- Neo4j查询语言
- 基于关系的简单查询
- 许多特性源于改进sql的难点,比如连接表
社交媒体特点
- 每个人都可以成为媒体
- 通信障碍消失
- 丰富的用户交互
- 用户生成的内容
- 用户丰富的内容
- 用户开发的小部件
- 协作环境
- 集体智慧
- 长尾
社交网络
由节点(个人或组织)组成的一种社会结构,这些节点通过各种相互依存关系(如友谊、亲属关系等)相互关联。
图表示
- 节点:成员
- 边:关系
各种实现
- 社会化书签
- 朋友关系网络
- 博客圈
- 媒体分享
- 经济体
社交计算与数据挖掘
社交计算是在计算系统的基础上研究社交行为和社交情境的一门学科
与数据挖掘相关的任务
中心性分析 Centrality Analysis
目标:确定社交网络中最重要的参与者
输入:一个社交网络
输出:顶级节点列表
可视化结果
社区检测 Community Detection
社区是一组节点,这些节点之间的交互(相对)频繁
输入:一个社交网络
输出:(某些)行为体的社区成员
应用
- 理解人与人之间地互动
- 可视化和导航大型网络
- 为数据挖掘等其他任务奠定基础
可视化结果
分类 Classification
用户偏好或行为可以表示为类标签
输入:一个社交网络、网络中某些参与者的标签
输出:网络中剩余参与者的标签
可视化结果
链路预测 Link Prediction
给定一个社交网络,预测哪些节点可能连接
输出节点对的列表(排序)
例如:Facebook的朋友推荐
可视化结果
病毒式营销 Viral Marketing
用户在一个社交网络中拥有不同的社会资本(或网络价值),因此,如何才能充分利用这些信息?
病毒式营销:找出一组用户提供优惠券和促销活动来影响网络中的其他人,从而使我的利益最大化。
爆发检测:监控一组节点,这些节点可以帮助检测爆发或中断感染传播(例如,h1n1流感)
目标:给定一个有限的预算,如何最大化整体效益?
一个病毒式营销的实例
以最小节点数求整个网络的覆盖率
基本贪心选择:选择效用最大化的节点,删除节点,然后重复
网络建模 Network Modeling
大型网络展示了统计模式
- 小世界效应(例如,6度分离)
- 幂律分布(又称无标度分布)
- 群落结构(高聚类系数)
建立网络动力学模型
- 找到一种机制,使在大尺度网络中观察到的统计模式能够再现
- 示例:随机图,优先连接过程
用于模拟以了解网络属性
- 托马斯·谢林著名的模拟:是什么导致了白人和黑人的隔离
- 攻击下的网络鲁棒性
社交计算应用
-
社交网络广告
-
行为建模与预测
-
流行病研究
-
协同过滤
-
人群情绪阅读器
-
文化趋势监测
-
可视化
-
健康2.0
社区检测原则
社区
社区:“参与者的子集,其中有相对强的、直接的、强烈的、频繁的或积极的联系。”
社区是一组经常相互作用的参与者
一组没有互动的人不是一个社区
人们在社交媒体中形成社区
为什么社交媒体中的社区?why communities in social media
人是社会交往的一部分社交媒体是对物质世界的一瞥
人们与现实世界中的朋友、亲戚和同事以及网络都有联系
易于使用的社交媒体让人们以前所未有的方式延长社交生活
在现实世界中很难结识朋友,但在网上很容易找到志趣相投的朋友
社区检测
基于社会网络属性的强社会群体形式化
一些社交媒体网站允许人们加入群组,是否有必要基于网络拓扑结构提取群组?
并非所有网站都提供社区平台
并非所有人都加入团体
网络交互提供了关于用户之间关系的丰富信息
- 组是隐式形成的
- 可以补充其他类型的信息
- 帮助网络可视化和导航
- 为其他任务提供基本信息
社区定义的主体性
定义社区是主观的
群落标准分类
标准因任务而异
大致上,社区检测方法可分为4类(不排除)
- 以节点为中心的社区:组中的每个节点都满足某些属性
- 以群组为中心的社区:从整体上考虑群体内的关系。组必须满足某些属性而不放大到节点级别
- 以网络为中心的社区:将整个网络划分为几个不相交集
- 以等级为中心的社区:构建社区层级结构