首页 > 编程语言 >大数据应用算法复习笔记

大数据应用算法复习笔记

时间:2023-11-19 16:12:57浏览次数:41  
标签:采样 ADS Closeness 笔记 算法 距离 哈希 节点 复习

许我人间一两风,吹散十万八千梦

"余幼时即嗜code,家贫,无computer以观,每假借于电脑之家,拆板以刻,计日以还。既加冠,益慕算法之道,又患无cpp,java以游,遂至北理工,观此ppt。
当余之读ppt也,负箧曳屣,行无暖气之中教中,穷冬烈风,银杏叶深数尺,面庞皲裂而不知。至舍,四支僵劲不能动,吾自持汤沃灌,以衾拥覆,久而乃和。寓逆旅,北理日再食,无鲜肥滋味之享。同学长皆被绮绣,戴朱缨宝饰之帽,腰白玉之环,左佩雅思,右备答案,烨然若神人;余则六级未过处其间,略无慕艳意。Sktech中有足乐者,不知英语之奉不若人也。盖余之勤且艰若此。"

——关太师

Lecture 1

你说人生艳丽我没有异议
你说人生忧郁我不言语
只有默默地承受这一切
承受数不尽的

1 Frequent keys: The Misra Gries structure

1.1 引入及概念

Lemma:对于单个的MG sketch,每个key的误差上界为(m'-m)/(k+1)。

1.2 合并

Claim:对于合并后得到的MG sketch,每个key的误差上界依旧为(m'-m)/(k+1)。

合并的减少值的证明以及构建sketch减少值的证明

2 Set membership: Bloom Filters



3 Counting: Morris counters




改进1

步进时V==1,合并时V>1

改进2



证明方差

一刻也没有为计数器们悲伤,立刻赶到战场的是

Lecture 2

0 随机变量的边界 Quality of Estimates


1 蓄水池均匀采样



有关蓄水池算法的解释https://www.cnblogs.com/doublexi/p/15665695.html

2 基于bottom-k均匀采样的不同值采样

3 K-mins Minhash Sketch

最小哈希在[0,1]为什么期望是1/(n+1)?
因为这里的哈希函数满足h(x)~U[0,1]。易知,k个独立同分布的随机变量当中的最小值的期望为:E(Y)=
其中Y=min{X1,...,Xk}。故当X1,...,Xk~U[0,1],则前式中F_X(x)=x,f_X(x)=1,代入得E(Y)=1/(k+1)。



4 克拉莫劳下界

5 充分统计量


逆概率估计方法

梦为努力浇了水
爱在背后往前推
当我抬起头才发觉
我是不是忘了谁

是的,逆概率估计一直 是我的好兄弟,PPS是我一直想来到的团队……

Lecture 3

加权采样(估计部分满足条件的和)

目标:权值越高越容易采样

泊松采样

期望的样本大小为k=\(E\left[ |S| \right] =\sum_i{p_i}\)
逆概率估计:
对于每个样本,如果被采样,则赋予一个\(a_i=\frac{w_i}{p_i}\),否则为0。(为了最终是无偏估计)
\(a_i\)的方差为\(Var[a_i]=w_i^2(\frac{1}{p_i}-1)\),对于最终采样的结果的方差,则为\(Var\left[ \hat{w}\left( X \right) \right] =\sum_i{Var\left[ a_i \right]}\)
因为pi为我们自己设计,我们肯定希望方差越小越好,但是采样量还要保证是k,则最终的优化问题就是:

在\(\sum_i{p_i}=k\)的情况下,最小化\(\sum_i{w_i^2(\frac{1}{p_i}-1)}\)

最终pi和wi成正比,可以保证最小化,即\(\alpha _ip_i\gets \min \left\{ 1,\alpha w_i \right\}\)
证明(PPS):

得到方差上界:

CV值(误差)为:

我们期待一个可合并的固定大小的采样。

Bottom-k:

赋予每个样本一个标签,进行排序,取最后的k个样本即为最终采样结果。

过程:

输入一个样本权值对(x,w),随机出一个h(x)(属于0到1之间),赋予该样本对一个标签h(x)/w
有放回PPS:
无放回PPS:
伪代码如下:

简单解释:维护一个第k小的哈希值,如果新进来一个元素进行比较,若小于原来维护的哈希值,则进行替换,并重新排序。合并就是将两个合并之后重新选k个。

对有放回PPS进行证明:

依旧构建一个Inverse概率,当一个样本被采样它的ae=w/pe,否则为0

被采样就是哈希值h(x)<w\tau

和与之前的PPS一样:

对无放回PPS进行证明:

无放回采样过程:

证明上述过程和等价

\(\underline{\mathsf{Lemma}}:\text{ Equivalent to bottom-}k\mathrm{~with~}r(x,w)=\frac{-\ln h(x)}w\left(\sim Exp[w]\right)\)
证明如下:

有重复元素(进行聚合)

一个x可能出现好多次,我们要进行估计

相比之前就多了一步重复元素保留最小的rank

聚合类似

局部敏感哈希是一种最小哈希的应用

近似查询:


做一个嵌入之后,做相似性查询。一种方法就是做minhash(同一个hash函数),对minhash结果进行分析。
相似性度量:


加权杰卡德相似性:

简单解释:分子加两个中的最小值,分母加两个中的最大值

文档相似度:
1.定义特征:

2.杰卡德相似度:

3.利用最小哈希去估计杰卡德相似度:

简单解释:N1并N2直接聚合就可以(取同一个特征的最小值),N1交N2需要再做一次判断,是否同时存在于N1和N2

总体来说Bottom-k类似
alpha可以有三种情况



n是两个集合不同元素的个数
方差的证明:
http://www.cohenwang.com/edith/bigdataclass2013/lectures/lecture3.pdf

左思想,右思量
出路在何方
天茫茫,地茫茫
无亲无戚靠台郎
月光光,心慌慌
故乡在远方

那一天,人们回想起了被图支配的恐惧

Lecture4

想要在非常大的图计算上做到的:
1.保持总计算/通信/存储在这些数据的大小上实现线性(或者亚线性)
2.权衡计算和近似质量
3.并行化(最小化依赖链)
4.局部化依赖(共享边的节点彼此存储得更近)
描述一个图中节点的特征:
度中心性:与节点的出入度相关,最好计算
特征向量:我是否重要取决于我的相邻的结点
Betweenness:我是否在必经之路上
Closeness:我是否可以快速到达很多节点

节点的度(重要度特征,结构特征)

对邻接矩阵的每行进行一个加和。只看数量不看质量

节点的中心性(重要度特征)

特征向量重要度:
一个节点是否重要取决于它的邻居是否重要。计算方法为:

可以等价为求一个矩阵的特征向量问题:

Betweenness centrality:
计算一个节点处于多少个一对节点的最短路径之上,计算方法如下:

Closeness centrality:
该节点到其他节点的最短路径之和的倒数,计算方法如下:

对于Closeness中心性,有另一个名称,那就是可达中心性(近邻中心性),即为节点u关于所有u可达的结点的一个距离的函数和,分为三种类型,分别是Harmonic centrality;Gaussian(高斯)中心性与指数中心性:

这规避了之前的Closeness中心性距离为0的情况。

基于距离/可达性度量的节点sketch:

1.可达性集的Minhash摘要
可达集就是一个数数问题

由于对于大图来说单独计算每个节点的可达集消耗资源太多。因此我们利用Minhash来对某个点可达集进行一个摘要,我们记录节点v的摘要为s_v
1).sv的模就是节点v的可达点数
2).获取可达节点的随机样本
3).计算两个节点可达集之间的关系
4).所查询的种子节点的联合到达(到达影响)

接下来,我们对k=1的最小哈希的情况,做一个说明:

k=1的最小哈希摘要很简单,选出自己这个节点的可达集中最小的哈希值,是一个迭代更新的过程。

k=2的情况也类似,维护可达集中第二小的哈希值:

接下来,我们需要思考如何高效的计算这个摘要,有两个方法:

a.图搜索(BFS)

k=1:

在O(m)复杂度内,每条边恰好遍历一次。每个图搜索都依赖于所有先前的:似乎我们需要按顺序执行 n 次搜索。

并行化基于BFS的MinHash计算:
(1)为哈希值是较低一半的n/2个节点创造一个超级节点
(2)从超级节点执行(反向)搜索,并标记访问的所有节点
emmm,下面的操作以我浅薄的知识,我觉得它是进行了一个迭代剪枝搜索,将时间复杂度降到了log2(n),但是具体的我说不明白

最终的抽象化过程为:

边遍历的总数可以增加log2n倍
我们再接下来考虑:k>1的情况:

这个图就可以被简单的抽象为三个超级节点相连

b.动态规划/分布式

对于动态规划/分布式方法,有一个点和bfs不同的是,这是一个信息收发的过程:

结论:每个边被经过的次数小于lnn次
证明:
简单解释:看不太懂,感觉是类似一个加权算法,但是它的第一句话太难懂了,最后的期望加和是1+……+1/n可以理解成积分,不过我认为应该是等于lnn,可能是考虑到整数问题吧

图图,这是我最后的Sketch了

Lecture 5

基于距离的图数据挖掘:

一.基础前置:
1.距离分布(单源、种子集、全对)
2.邻域的基数,Closeness中心性
3.邻域的相似度,Closeness相似度
4.基于距离的影响
5.距离查询(距离预言)
6.按距离抽样(与d邻域一致或概率随距离减小),按相似性抽样
7.以特征为中心的Closeness中心性
8.基于距离的SSL(标签完成/预测)
二.具体方法:
1.生成最短距离矩阵:


与距离相关:重要性/相关性随距离衰减,可以理解是Closeness中心性:

接下来,我们说明基于衰减距离的查询:
r-近邻:

距离衰减Closeness中心性:


基于距离的影响(想说点什么,但是我有点说不出来)(这到底表达什么)
(看明白了,就是加两个节点中最大的):


基于距离的相似性:

节点特征/属性:

一些节点(实体)具有相关的特征/标签:主题、兴趣、社区、类型...
中心性/影响集中在这一特征上
标签补全(半监督学习):基于图结构和少数标记节点预测未标记节点的标签
首先是有详细标签的情况:

接下来,我们测试只关注是否存在标签:

需要探究14%和26%的作用

相似度计算(局部相似度,仅取决于直接邻居(不过我觉得第三个算错了应该是2/log5)):


后面两个AA都算错了,应该是:

距离相似度(全局):

下面的我觉得是(距离衰减+主题)?

上面的:

要么把beta去掉要么把c改成alpha

距离摘要:

老生常谈:对于距离的精确计算开销太大,所以我们要做距离摘要

All-Distance摘要(ADS):




在集合中的点是要满足什么条件:
不在集合中的点的距离要比集合中哈希值第k小的点的距离大

1.每个节点的距离向量的摘要
2.允许我们近似基于衰减距离的查询

Bottom-k ADS(v):

一个列表其中包含(节点id,与v节点最短距离)对
是MInhash摘要d>0的并集
证明如下:
如果节点i属于ADS(v),那么h(i)一定是其中一个第k小的哈希值在\(N_{d_{vi}}(v)\)
如果i属于
因为dvi<d,所以它一定是\(N_{d_{vi}}(v)\)中的一个第k小哈希。
如何计算ADS呢?详见下图:

计算K=1的情况,我们要算的是ADS(黑武士),那么先按距离排序从近及远考虑:
黑武士自己一定在ADS中,先考虑白机器人,它的h(x)=0.42,只有黑武士自己比它离得近,所以N(v,u)中只有黑武士,K=1,N(v,u)中最小的哈希值是0.63>0.42,所以白机器人在ADS中,后面的都是以此类推。

定理:ADS的期望大小小于klnn
证明:
距离节点v第i近的节点被包括在ADS中的概率是\(min(1,\frac{k}{i})\),那么期望大小小于等于n个节点之和,即为:
当k>n的时候就相等。

bottom-k ADS

使用修剪后的Dijkstra搜索算法。

具体步骤如下:

  1. 按照 ℎ(u) 递增的顺序遍历所有节点 u。
  2. 对于每个节点 u,使用 Dijkstra 算法在反向图上执行搜索。在访问节点 v 时,执行以下操作:
    • 如果 u 不在节点 v 的ADS中(ADS(v)),并且满足条件 |{i∈ADS(v)∧d_vi<d_vu}|<k(即与节点 v 的距离小于与节点 u 的距离的节点数小于 k),则将 (u, d_vu) 添加到节点 v 的ADS中(ADS(v)←ADS(v)∪{(u,d_vu)})。
    • 继续遍历节点 v 的入度邻居(inNeighbors(v))。
    • 否则,如果条件不满足,可以在节点 v 处修剪搜索,即不再继续向后搜索。

这个方法通过遍历节点并在每个节点上运行Dijkstra搜索来构建bottom-k ADS。在搜索的过程中,根据条件判断是否将节点 u 添加到节点 v 的ADS中。这个过程会得到每个节点的bottom-k ADS,以便后续的数据分析和查询。这种方法可以高效地计算ADS,并应用于许多基于距离的查询和分析任务。

当通过递增哈希来构建时的正确性:
1.每个ADS(i)是通过按h(u)递增顺序考虑节点u来构造的
2.如果哈希值小于 h(u) 的 k 个更接近节点到 i,则将节点插入到 ADS(i) 中
3.尚未考虑的所有节点 j 的散列都高于 h(u),因此条件
剪枝搜索的正确性:
1.搜索在节点 i 处修剪,没有更新(有 k 个更近的节点,哈希更小)。
2.从 j thru 到达的所有节点,反向 SP 搜索也将具有比 u 更接近的节点。

动态规划计算ADS:


简单解释:传递的信息从哈希值变成了(哈希值,距离)对,其他思想没有变化,和之前的距离摘要类似。
对ADS计算的分析与简评:
剪枝Dijkstra是基于递增的哈希值,和距离摘要的BFS类似;DP是基于递增的距离,我们只需要为每个节点保留内存 k 个条目(到目前为止 k 个最小哈希)。DP适用于节点与邻居通信的分布式消息传递计算。

从摘要回答查询:

1.通过提取MinHash草图,d邻域的基数/相似度
从ADS(v)中提取v的d邻域Nd(v)的MinHash草图:

从Minhash中可以知道:

2.Closeness中心性:HIP估计器
计算公式如下:

我们通过对每个项的无偏估计求和来估计总和:
依旧使用熟悉的逆概率估计和PPS:

如果我们有无偏存在估计量,我们可以无偏地估计中心性


关于对的估计:
1.如果i不属于ADS(v),那么其就等于0
2.如果i属于ADS(v),那么我们计算它被包含的概率p,条件是所有节点的固定哈希值比i更接近v。然后我们使用逆概率估计:

简单解释:p就是节点当时进ADS时比较的那个哈希值,逆推一下就可以


定理:

3.Closeness相似性
前置知识:

后面的都不给证明!!!!!!!!!!!!:

我们可以从ADS(i), ADS(j)中估计加权jaccard系数或两个节点i, j的接近向量的余弦相似度,均方根误差为\(O(\frac{1}{\sqrt{k}})\)

最后三页看不懂!!!!:




4.距离预测
5.从ADS可知:基数/相似性/影响/ d邻域样本

我走在每天必須面對的分岔路
我懷念過去單純美好的小幸福

共看明月应垂泪
一夜乡心五处同


—END—

标签:采样,ADS,Closeness,笔记,算法,距离,哈希,节点,复习
From: https://www.cnblogs.com/JinyuLi/p/17842160.html

相关文章

  • java反序列化----CC5利用链学习笔记
    java反序列化----CC5利用链学习笔记目录java反序列化----CC5利用链学习笔记环境配置利用链TiedMapEntryBadAttributeValueExpException参考文章环境配置jdk8u(无java版本要求)pom.xml中写入<dependency><groupId>commons-collections</groupId>......
  • 学习笔记10
    块设备I/O和缓冲区管理块设备I/O缓冲区I/O缓冲的基本原理非常简单。文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk)标识的磁盘块时,它首先在缓冲区缓存中搜索分配给磁盘块的缓冲区。如果该缓冲区存在并且包含有效数据,那么它只需从缓冲区中读取数据,而无......
  • (段设期中复习) Great Ideas in Algorithm Analysis: Midterm Review
    DistanceAlgorithmsBasicsamplinglemma:Let\(S_1,\dots,S_n\subset[n]\)besetsofsizeatleast\(D\),thenrandomlychoose\(c(n/D)\logn\)elementswillmakeeach\(S_i\)containatleastoneelement.2-AdditiveApproximationofAPSPS......
  • 2022年大数据应用算法期末考试
    1.请简要回答为什么需要设计可合并的Sketch算法?可合并的Sketch算法主要是用于什么场景?OnlysketchstructuremovesbetweenlocationsSufficestospecifymergingtwosketchesDistributeddata/parallelizecomputation可合并的Sketch算法是为了解决大规模数据流处......
  • 学习笔记10
    第12章块设备I/O和缓冲区管理1.块设备I/O缓冲区1.缓冲区的作用:缓冲区在内存中缓存数据,减少了直接磁盘操作的次数,从而提高了系统的吞吐量。2.缓冲区的类型:在Unix/Linux中,有多种类型的缓冲区,例如:全缓冲:在这种缓冲区中,所有的I/O操作都在内存中完成,直到写入或读取一个......
  • 第十一周Linux教材第十二章学习笔记——块设备I/O和缓冲区管理
    块设备I/O和缓冲区管理本章讨论了块设备1/O和缓冲区管理;解释了块设备1/O的原理和T/O缓冲的优点;论述了Unix的缓冲区管理算法,并指出了其不足之处;还利用信号量设计了新的缓冲区管理算法,以提高1/O缓冲区的缓存效率和性能;表明了简单的PV算法易于实现,缓存效果好,不存在死锁和饥饿问题;还......
  • 微信小程序开发笔记
    目录跳转视频号跳转视频号前提:小程序与视频号的为相同主体或为关联主体获取视频ID......
  • 信息安全系统设计与实现 学习笔记10
    《UnixLinux系统编程》10章学习笔记sh脚本一个包含sh语句的文本文件,命令解释程序sh要执行该语句。#!/bin/bash#commentlineechohello使用chmod+xmysh使其可执行以#!组合开始sh脚本与C程序sh:解释程序,逐行读取sh脚本文件并直接执行这些行.如果行是可执行命令且为......
  • java反序列化----CC4利用链学习笔记
    java反序列化----CC4利用链学习笔记目录java反序列化----CC4利用链学习笔记环境配置利用链环境配置jdk8upom.xml中写入<dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><ve......
  • 算法竞赛进阶指南学习笔记(一)
    前言一共八章基本算法基本数据结构搜索数学知识数据结构进阶动态规划图论综合技巧与实践前置要求:简单熟悉C++这门语言。学习算法,算法的门槛不像AI门槛那么高,每个人皆可学习。正如谚语所说:熟读唐诗三百首,不会作诗也会吟。练习达到3000左右的题量,那你便可轻易Accepted......