Frequent Directions

news/2024/11/6 15:53:00/文章来源:https://www.cnblogs.com/MTandHJ/p/18530353

目录
  • Frequent Directions
  • Frequent Directions over Slidding Windows
  • 代码

Ghashami M., Liberty E., Phillips J. M. and Woodruff D. P. Frequent directions : Simple and deterministic matrix sketching. 2015.

Yin H., Wen D., Li J., Wei Z., Zhang X., Huang Z. and Li F. Optimal matrix sketching over sliding windows. VLDB, 2024.

通过魏老师的分享找了这些论文看了一下, 感觉之后可能会用到.

Frequent Directions

  • FD 的任务是, 希望维护一个 sketch matrix \(B \in \mathbb{R}^{\ell \times d}\) 使得 (\(A \in \mathbb{R}^{n \times d}\)),

    \[\|A^T A - B^T B \|_2, \quad \|A - \pi_{B_k}(A) \|_F^2, \forall k < \ell \]

    这几个误差都尽可能小, 其中

    \[\pi_{B_k}(A) = A V_kV_k^T, \]

    \(V_k\)\(B = U\Lambda V^T\) 的 top-\(k\) 奇异值所对应的右奇异向量. 换言之, 我们通过维护 \(\ell \ll n\) 便保存了 \(A\) 中的大部分信息.

  • 这个问题比较有意思的点在于, 如何处理, \(A\) 通过一行一行的形式得到, 然后我们动态地维护 \(B\) (否则这个问题就有一般方法了).

  • FD 启发自一个非常经典的问题: 频率估计问题.

    • 假设, 我们有 \(A = \{a_1, \cdots, a_n\}\), 其中 \(a _i \in \{1, \ldots, d\}\). 我们会一个一个地接收到其中的元素, 问题是如何动态估计每个元素出现的频率:

    \[\hat{f}_j \rightarrow f_j = |\{a_i \in A | a_i = j\}|. \]

    • Misra-Gries 算法是频率估计的一个最优算法:

      1. 维护一个长度为 \(\ell\) 的 counters;
      2. 新来一个元素 \(a\): I) 若已经有 counter 在计数 \(a\) 则, 该 counter 加一; II) 倘若任有 counter 剩余 (即 counter 计数为 0), 则选择其一用于计数 \(a\); III) 倘若没有 counter 剩余, 则所有 counter 递减直到有其中一个 counter 为 0, 将此 counter 用于计数 \(a\).
    • 容易发现, 由于每次'递减'操作减去的频率为'\(\ell\)', 所以最多有 \(n / \ell\) 次这种递减操作. 换言之:

      \[0 \le f_j - \hat{f}_j \le n / \ell, \forall j. \]

      于是我们就得到了一个还算可以的频率估计, 实际上, 这个估计是最优的.

  • 我们可以把这个推广到矩阵的形式. 假设 \(A \in \mathbb{R}^{n \times d}\) 的每一行为 \(\{e_j: j=1,2,\ldots, d\}\), 其中 \(e_j\) 表示第 \(j\) 个元素为 1, 其余元素为 0 的向量. 此时, 我们有:

    \[f_j = \|A e_j\|^2. \]

    我们可以令 \(B\) 的第 \(j\) 行为: \(\hat{f}_j^{1/2} e_j\), 则有

    \[\|Be_j\|^2 = \hat{f}_j, \]

    进一步地:

    \[\|A^T A - B^TB \|_2 = \max_j |f_j - \hat{f}_j| \le \|A\|_F^2 / (\ell - k). \]

  • FD 的最终算法就是有这样的一个'减'的操作:

  • 具体操作就是, 新来一行 \(a\) 后, 拼接在最后, 然后进行奇异值分解, 然后所有的奇异值减去最小的奇异值, 此时

    \[\sqrt{\Sigma^2 - \delta I_{\ell}} V^T \]

    的最后一行一定为 0. 这相当于我们空出来了一个 'counter'.

  • FD 可以进一步加速:

  • 此时, 减去的是排中间的奇异值, 相当于我们会空出一半的 'counters'.

  • 最后的 bound 请参考原文.

Frequent Directions over Slidding Windows

  • 有些时候, 我们并不希望 \(B\) 去保存过去所有的信息, 而是最近的 N 行, 即逼近 \(A_W = A_{T-N, T} \in \mathbb{R}^{N \times d}\) 的信息 (\(T\) 表示当前的时刻).

  • 其实, 这个算法也是启发自基于滑动窗口的频率估计问题:

    1. 给定阈值 \(\theta = N / \ell\);
    2. 按照普通的方式统计每个元素的频率, 此时时刻 \(T\) 来了一个新的元素 \(a\), 按照之前的 MG 的方式统计.
    3. 之后, 如果 \(a\) 的计数 \(\ge \theta\), 则将其归零, 并将 \((a, T)\) 加入一个列表 \(S\) 中.
    4. 检查 \(S\) 中的时间, 如果时间不在窗口内, 则舍弃.
  • 最后, 我们可以以 \(S\) 中的记录以及 counters 中的记录作为频率, 其余不在其中的频率记为 \(0\). 容易发现,

    • 对于 \(\hat{f}_j = 0\) 的:

      \[0 \le f_j - \hat{f}_j \le N / \ell. \]

    • 对于 \(\hat{f}_j \not = 0\) 的, 由于舍弃的部分 (就是还在 counters 中的) 不会超过 \(N / \ell\), 所以也有

      \[0 \le f_j - \hat{f}_j \le N / \ell. \]

注: 我不太了解这个算法, 感觉应该是这样的.

  • 所以 FD over lisding windows 的算法也是类似的:

  • 和普通的 FD 主要有两点不同:

    1. 需要维护两个额外的列表 \(S, S'\), 用于维护超出阈值 \(\theta\) 的奇异向量;
    2. 每次经过普通的 FD 操作后, 如果首奇异值超过 \(\theta\), 对应的频谱就被剔除了.
  • 此外, 每次更新还需要检查, 保存在 \(S, S'\) 中的奇异向量是否超过了窗口时间.

代码

[official-code]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/827702.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nuxt.js 应用中的 prerender:routes 事件钩子详解

title: Nuxt.js 应用中的 prerender:routes 事件钩子详解 date: 2024/11/6 updated: 2024/11/6 author: cmdragon excerpt: prerender:routes 是 Nuxt.js 中的一个钩子,允许开发者在预渲染过程中扩展要预渲染的路由列表。这对于静态站点生成(SSG)尤为重要,开发者可以根据…

Springboot 容器启动之后初始化操作

在项目开发中,有时候会在 Spring 应用启动后做一些初始化的操作,比如数据字典缓存,状态通知,配置读取等操作。 SpringBoot 提供了多种方式可以让开发者在容器启动后来执行一个任务:使用 @PostConstruct 注解 通过 ApplicationListener 监听SpringBoot 启动过程中的发布的 …

RAID

1.RAIDRAID0:最少1块硬盘、总容量=硬盘数x硬盘容量、没有数据冗余备份。坏1块则全部数据坏。但是读写性能很高RAID1:2块硬盘、总容量 = 总硬盘容量的一半、数据镜像备份。坏1块硬盘不影响全盘存储。读取性能提升,但写入性能略有降低RAID5:至少需要3块硬盘组成、总容量 = n-…

Mac系统安装node.js及环境配置

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18530322➤如果链接不是为敢技术的博客…

CF1909题解

CF1909A 一眼秒之题,我们发现就是四个方向选三个方向,若是存在一个点它的方向恰好在(0,0)点的另外一个方向,则一定不成立 枚举4个方向,发现有点在这个方向,显然选除这个点之外的三个方向的方案就不可行点击查看代码 #include<bits/stdc++.h> using namespace std…

AUTOSAR解决方案 — INTEWORK-EAS-AP

经纬恒润自主研发的Adaptive AUTOSAR平台产品, 遵循AUTOSAR Adaptive R19-11和R22-11规范, 使用C++11、C++17语言开发。可通过极易上手的自研工具配置,实现AUTOSAR AP协议栈代码快速生成。 随着汽车智能化、网联化以及汽车电子电气架构发展,汽车功能需求越发复杂,越…

Js Bom定时器、事件循环

BOM:浏览器对象模型BOM为我们提供了一组对象,通过这组对象可以完成对浏览器的各种操作BOM对象:Window —— 代表浏览器窗口(全局对象) Navigator —— 浏览器的对象(可以用来识别浏览器) Location —— 浏览器的地址栏信息 History —— 浏览器的历史记录(控制浏览器前进…

一步一步在 Blazor 里使用 npm

Blazor 目前不支持 node 语法,所以无法直接使用 node 包;所以需要再用 js 封装一层。1,先给 npm 建个目录 “NpmJS” ,因为 node 无法直接当作 js 使用,所以这个目录不需要建在 wwwroot 下,反而方便 csproj 管理 2,创建 node 项目,建议直接用 npm init 命令创建, vs 自…

合宙低功耗4G模组HTTP网络协议应用

​一、HTTP概述 1.1 简介 HTTP是HyperTextTransferProtocol(超文本传输协议)的缩写。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说…

基于ESP32的桌面小屏幕实战[2]:硬件设计之充电管理

1. 硬件基础知识 1.1 原理图设计、PCB设计、PCB(电路板)、PCBA(电路板+元器件)分别长什么样?1.2 高低电平 一般可以理解为输出电压=VCC就是高电平,输出电压=GND(一般是0V)就是低电平,分别用1和0来表示,这个是理想值。 但实际上它也有一个范围,比如你的单片机供电压(…

jmeter 固定吞吐量定时器

使用:模拟18000 QPS查询 Hits Per SecondTPS :聚合报告: Target throughput(in samples per minute):目标吞吐量(单位分钟),即每分钟执行多少次(TPM)Calculate Throughput based on(计算吞吐量策略):1、This thread only:仅对当前线程,也就是每个线程相互是不干扰的,都…

VS引用本地的NuGet包

Step1.打包 先选择项目/类库,进行打包。在输出中,找到打包的目录和文件。 Step2.本地创建一个文件夹用于放打包文件。Step3.添加包源 打开 VS --> 工具 --> NuGet包管理器 --> 管理解决方案的NuGet程序包 选择右上方:程序包源右侧的齿轮按钮 在程序包源中,新增一…