21/6/30 读书笔记 多维数据分析 决策树归纳

21/6/30 读书笔记

安全多方计算 Beaver的三元组乘法优化

我们可以将MPC的协议过程分为预处理运行时两个部分。考量BGW协议,我们在预处理阶段,建立随机的输入值,使得电路中每个算法门(特别是乘法门)具有两个随机输入\(a_r\)\(b_r\),以及一个输出\(c_r=a_r*b_r\)。这几个值都是随机的,因为整个电路的输入是随机的。随后 这些随机值被广播给所有参与者,每个门需要广播三个值,每个参与者对每个门都持有这三个值的share。

Beaver的乘法优化基于加法同态性的前提:已知一个具体值a和两个share [b]和[c],a[b]维持同态性,[b+c]维持同态性。

用[s]表示s的一个share。

在运行时,当算术门\(G_i\)获得了来自P1的输入\(a_i\)和来自P2的输入\(b_i\),每个参与者需要计算\([a_i-a_r]\)\([b_i-a_r]\),并公布出来其计算结果,由于:

\[a_i*b_i=(a_i-a_r+a_r)*(b_i-b_r+b_r) \\ =(a_i-a_r)(b_i-b_r)+(a_i-a_r)b_i+a_i(b_i-b_r)+a_rb_r \]

由于每个参与者持有\([a_r]\)\([b_i]\)使得每个参与者能够在本地计算出​[\(a_i*b_i\)],在公布后组合起来即为最终答案。

注意乘法是没有同态性的,我们并没有计算\([a_r]*[b_r]\),而是直接使用得到的\([c_r]\)来替换之。避免了乘法下同态性被破坏的问题

安全多方计算 Beaver-Micali-Rogaway(BMR)常数轮协议

之前我们介绍的协议在电路上与电路的复杂度线性相关,而BMR是一个具有常数级复杂度的具有对抗任何t < n的semi-secure adversary时的安全性的协议。

BMR是基于GC而提出的。在GC中,作为发送者的P1构建混淆表并发送给作为接受者的P2,而当P1和P2串通时,理论上他们可以共同确定整个电路中所有的中间值。这导致的一个问题在于,GC在从2PC向MPC拓展的过程中,只要一个发送者和一个接收者串通,那么整个电路的信息就都会被泄露。

从宏观上看,BMR使得每个混淆表(就是发送者发送的那张表)本身变为多方共同持有的的,从而避免了串通问题。而最后的输出由一个指定的参与者根据GC的方式进行公布。BMR的初衷在于让所有参与方不会获得最终输出以外的任何信息。

BMR下的混淆电路的具体生成行为见图(看了半天没看懂,先贴上图等上过指导课后再来复习):

image


数据挖掘导论 OLAP(联机分析处理)和多维数据分析

联机分析处理(On-Line Analyical Processing,OLAP)系统,是对数据的价值进行发掘的系统。OLAP主要通过多维的方式来对数据进行分析、查询和生成报表,它不同于传统的联机事务处理(On-Line Transaction Processing,OLTP)处理应用。OLTP应用主要是用来完成用户的事务处理,如民航订票系统和银行的储蓄系统等,通常要进行大量的更新操作,同时对响应的时间要求比较高。而OLAP系统的应用主要是对用户当前的及历史数据进行分析,扶助领导决策,其典型的应拥有对银行信用卡风险的分析与预测和公司市场营销策略的制定等,主要是进行大量的查询操作,对时间的要求严格程度低于OLTP,但是计算复杂度明显更高。在这里不展开讲了。

考虑多维数据,一个对象具有多个属性,每个特定对象的某个特定属性的属性值的确定的,称之为一个目标量,而所有目标量构成了一张事实表,记录了所有的数据。

多维数据情况下我们考虑的一个重要问题在于聚集。聚集的本意在于使用多种方式聚集数据从而使得多维数据更加简洁。在通常意义上来说,我们考虑“求和”就是一个典型的聚集操作:对于某人一年中每不同月份的工资,考虑聚集为一年的总收入,实现了从13维到2维的归约。

基于聚集的维归约和之前数据预处理时提到的PCA(主成分分析)和SVD(奇异值分解)的维归约方法的区别在于后者是基于数学分析给出的对于适当忽略某些信息的指导,前者是将一个维的数据转变为一个数据而不考虑丢弃任何信息。

基于聚集的维归约可以通过:

  • 转轴:除指定两个维度外,其他维度聚集
  • 切片、切块:指定原数据的维度空间的低维子集的一个特定值/一个区间,取出相关数据
  • 上卷:将低层次数据汇总到高维,从而使更多的对象具有相似性。比如我们上面提到的将具体日期汇总到仅考虑月份的层次。
  • 下钻:将高层次数据细化到低维,常用于有关联的属性之间。比如“月”和“日”属性,两个具体值分别为{7月,3日}合并为一个具体值{7月3日},成为新属性“日期”。

数据挖掘导论 决策树归纳

决策树分类法是一个非常简单而广泛的面向分类问题的分类技术。对于每个决策树:

  • 叶结点:每个叶结点都附一个类标号
  • 非叶结点(出度不为0,包括根节点):每个内部节点对应一个测试条件,其出边对应不同的测试结果

构建决策树有着不同的算法,而Hunt算法是许多决策树算法的基础:其将训练记录(训练集)通过递归的方式逐步划分为较纯的子集。

对于决策树中的结点t,假设输入的训练集为\(D_t\)

  1. 如果\(D_t\)属于同一个类标号,那么t变为叶结点,终止递归
  2. 如果\(D_t\)包含属于不同类的对象,那么为结点t设置一个测试条件,在该条件下,按照测试结果将\(D_t\)分为不同的子集(假设一个子集为\(D_n\)),该子集又能作为该条件下测试结果对应的出边指向的下一个结点的输入训练集

在初步构建了决策树的数据结构后,我们仍然面临两个问题:

  • 如何确定我们设置的测试条件的优劣性?即划分的度量标准
  • 如何取得最佳或较佳决策树模型?

对于第一个问题,我们引入不纯性的概念(莫名想到刃牙),其描述了一个集合里类的混杂程度。考察一个结点t,假设输入集合\(D_t\)中元素一共属于\(c\)个不同的类型\(\{c_1,c_2,...\}\),利用\(p(c_i|t)\)表示\(D_t\)\(c_i\)所占的比例,介绍三种反映不纯度的计算公式:

  1. 熵:\(Entropy(t)=-\sum_{i=0}^{c-1}p(i|t)log_2p(i|t)\)
  2. Grini指标:\(Grini(t)=1-\sum_{i=0}^{c-1}[p(i|t)]^2\)
  3. 分类误差:\(Classification error(t)=1-max_i[p(i|t)]\)

对于第二个问题,理论上我们无法在兼顾效率的情况下得到最佳划分,但是可以使用贪心的算法来获得较好的效果。其核心要点在于,决策树的每个结点所产生的分类后的子集的不纯度之和要低于其输入集合,同时确保该划分方式应该是所有可能的划分方式中对降低不纯度效果最好的。我们将子结点相对于父结点的提升称为增益,当我们选用的度量标准是熵时,该增益又被称为信息增益∆\(_{info}\)

这里要指出一个问题,就是熵和Grini指标更容易将某些具有大量不同值的属性作为划分的重点(比如用户ID),因为如果按照用户ID进行分类,将可以把输入集合分为很多个集合,而每个集合只有一个人,此时纯度极高(抱歉,又想到刃牙了)。我们必须对分类数量进行惩罚以避免这种情况。我们引入划分信息Split info和增益率 gain ratio

\[Split\space info = -\sum_{i=1}^{k}P(v_i)log_2P(v_i)\\ Gain\space ratio=\frac{∆_{info}}{Split\space info} \]

k是划分的数量,当k很大时,会使得增益率下降。我们使用增益率作为度量划分好坏的标准。

posted @ 2021-06-30 15:16  neumy  阅读(526)  评论(0)    收藏  举报