Alfaro C A, Aydin B, Valencia C E, et al. Dimension reduction in principal component analysis for trees[J]. Computational Statistics & Data Analysis, 2014: 157-179.

Aydin B, Pataki G, Wang H, et al. A principal component analysis for trees[J]. The Annals of Applied Statistics, 2009, 3(4): 1597-1615.

Wang H, Marron J S. Object oriented data analysis: Sets of trees[J]. Annals of Statistics, 2007, 35(5): 1849-1873.

主要看了第一篇文章,第三篇也就是最开始的那篇的文章并没有细看(主要是有好多看不懂).

问题

PCA主要解决的是欧式空间中的问题,虽然kernel可以将其扩展到高维和非线性. 有一些数据,并不位于欧式空间之中,比如这三篇文章所重视的树形结构的数据,如何抓住这些数据的主干(拓扑结构?)是一个十分有趣的问题.

上图即为一种可以表示为树形结构的数据——血管,血管汇集处可以视为是一个树节点,当然树形数据会丢失很多细节,比如血管的粗细,长度等. 但是,因为这里我们只关注血管的拓扑结构(以后用结构代替,因为对拓扑不是很熟悉,用起这个词来总感觉心慌慌的), 所以我树形结构已经足够了.

现在再一次复述一遍我们的问题:

假设我们有数据集\(\mathcal{T}=\{t_i\}\), 每一个\(t_i\)即为一个树形结构的数据,我们希望找到一棵树或者一类树,使得其能抓住\(\mathcal{T}\)的主要结构.

很自然的一个问题是,因为不是在欧式空间中,我们无法利用距离来度量俩棵树之间的差距,所以我们首先需要一些定义.

重要的定义

距离

假设有俩棵树\(t_1,t_2\), 定义其距离为:

\[d(t_1, t_2) = |t_1\setminus t_2| + |t_2 \setminus t_1|
\]

其中\(|\cdot|\)表示集合的基数,即有限集合内元素的个数.

距离需要满足下面三个性质:

\[d(t_1, t_2) = 0 \Leftrightarrow t_1=t_2, \\
d(t_1, t_2) = d(t_2, t_1) \ge 0, \\
d(t_1, t_3) \le d(t_1, t_2) + d(t_2, t_3).
\]

只需证明第三个性质:

\(t_1, t_2, t_3\)都可以拆分成四份,以\(t_1\)为例,\(t_{11}\)只属于\(t_1\), \(t_{12}\)属于\(t_1, t_2\)但不属于\(t_3\), 类似有\(t_{13}\), 最后是\(t_{123}\)属于三者,那么:

\[d(t_1, t_3)= |t_{11}|+|t_{33}| + |t_{12}| + |t_{32}| \\
d(t_2, t_3)=|t_{22}|+|t_{33}| + |t_{21}| + |t_{31}| \\
d(t_1, t_2) = |t_{11}|+|t_{22}| + |t_{13}| + |t_{23}|
\]

比较便得证.

支撑树 交树

\(Supp(\mathcal{T})=\cup_{i=1}^n t_i\), \(Int(\mathcal{T})=\cap_{i=1}^nt_i\).

序,起着相当重要的作用,因为序相当于给\(t\)里面的元素进行了区分,如此我们才能对不同的树进行比较.

这篇文章的序是如此定义的:

  1. 根节点为0
  2. 假设所有节点的子孙数不超过\(k\), 则第\(i\)个节点的第\(j\)个子孙序为\(ki+j\).

容易证明,一棵树不会出现相同的序.

需要说明的子孙的排序,下面是文章中的一个例子:



这里\(k=4\),但是有些时候有点出乎意料:



光看规则,\(t_2\)的5应该为4更加合适,但是因为文章关注的是结构,所以其认为5在右边,所以为5. 事实上这样比较合适,否则支撑树的构造就显得不合理了(因为不同的结构会有相同的序).

这也带来一个问题,如何安排,这些节点的位置,在另外一篇文章中有提及:



虽然觉得如此也并不靠谱,但是似乎也只有如此.

tree-line

下面的例子,接上面的\(t_1, t_2, t_3\):



\(L\)中的\(l_0\)是预先给定的,给定方式有很多种,比如\(Int(\mathcal{T})\)等,注意到后面的添加2为0的后代,8为2的后代,所以相应的\(0-2-7\)等等也是可以的. 不必再往下扩展的原因是支撑树中没有相应的元素了.

\(t_1, t_2, t_3\)到\(L\)的距离为:



如果我们有\(L_1, L_2\)俩条tree_lines, 我们可以定义:

\[L_1 \cup L_2 = \{l_{1,i} \cup l_{2,j} | l_{1, i} \in L_1, l_{2, j} \in L_2\},
\]

我认为这是很有意思的一点,虽然可能不太高明,但是这就和欧式空间中的子空间类似了(虽然我们非常愚蠢地把子空间中的元素都表示了出来).

有了这个,我们利用距离就可以定义投影了:

\[P_{L_1 \cup L_2}(t)=\mathop{\mathrm{argmin}} \limits_{l \in L_1 \cup L_2} \{d(t, l)\}.
\]

我看到这的时候,觉得,有点粗暴,但是不错.

相应的\(L_1, L_2, \ldots\)也可以如此定义.

接下来有一个引理,这个引理有助于后面的分析,在此之前还需要定义path.

path

对于支撑树,从头节点到叶节点的每条路径均为一个path, 我们以\(\mathcal{P}\)来表示所有的path(除\(l_0\)之外), 显然每一条tree-line都可以用\(l_0\cup p, p\in \mathcal{P}\)来表示.

\(L_i^f, L_i^b\)

实际上\(L_k^f\)就是通过前向PCA所求得第k个的"载荷向量", 我认为这个定义是很自然的.

相应的还有后向的:

前向的方法,就是求我们所需要的成分,而后向的方法,就是求我们所舍弃的成分.

重要的性质

我会简单说明证明思路,细节回看论文.

因为\(L=l_0 \cup p_L\), 所以我们只需要考虑\(t\)和\(p_L\)即可,显然\(t \cap p_L\)是最合适的,否则,多一个点,\(|p_L \backslash t|\)会多1, 如果少一个点\(|t \backslash p_L|\)会多1.



这里我是这么思考的,假设\(L_1, \ldots, L_q\)互不相同(如果相同,则退化为不同), 则我们只需要考虑\(p_{L_1}, \ldots, p_{L_q}\), 上面所说的依然成立,只是增加的量为0或者1,但是不改变此时到达最小的事实.

定义权重:



其中\(\delta (v,t)=1, v\in t\).

有前向算法:



和相应的定理:

即按照上面的算法,我们可以求出相应的\(L_k^f\).

这个算法可以这么理解:

我们的目标是找到以个tree_line, 使得树在其上(加上之前的tree-lines)投影的损失最少.

首先节点\(v\in l_0\),其权重为0,这是因为每个tree-line都有,

其次是节点\(v \in p_1^f \cup \ldots \cup p_{k-1}^f\),权重为0,这是因为,即便我们再一次选中的\(L\)中有此节点,新的子空间也不会因为这个节点带来损失的减少(因为已经有了)

最后是其它的节点,可以想象,如果我们选中了这个节点,那么没有一棵树\(t\), \(v \in t\), 就会带来2点的距离减少,所以其权重设置为上面的形式.

算法自然是选择\(p_L\)中的节点权重和最大的.

一个例子:

需要说明的是,这部分的证明我觉得是,就是正统的证明蛮有意思的.

后向的方法:

相应的算法:





这么来理解权重的定义,首先,如果节点\(v \in l_0\), 那么权重自然为0,因为每个\(L\)都有,所以不会剩下的子空间造成影响, 另外,如果v在超过俩条路径上存在,那么显然,我们去掉任意一条都不会导致这个节点消失于剩余的子空间,所以权重为0.

其它的情况,即有影响的情况,那么舍弃\(v\)会直接导致包含\(v\)的树与子空间的距离+2,所以才会有上面的定义.

例子:

还有一部分是为了说明,前向和后向的一致性,这部分的证明我没看.

其它

看其数值实验,很大程度上是利用投影的距离来进行一些分类啊之类的操作. 直观上,这么设计似乎能够抓住树形数据的主干,只是,我总感觉哪里怪怪的. 但是是蛮有趣的,在普通的PCA中,也会遇到类似类别的0, 1, 2的数据,这些数据,虽然硬用也是可以的,但是应该也是有更好的方法去针对. 眼前一亮,但怪怪的...

Dimension reduction in principal component analysis for trees的更多相关文章

  1. Principal Component Analysis(PCA) algorithm summary

    Principal Component Analysis(PCA) algorithm summary mean normalization(ensure every feature has sero ...

  2. Robust Principal Component Analysis?(PCP)

    目录 引 一些微弱的假设: 问题的解决 理论 去随机 Dual Certificates(对偶保证?) Golfing Scheme 数值实验 代码 Candes E J, Li X, Ma Y, e ...

  3. Sparse Principal Component Analysis via Rotation and Truncation

    目录 对以往一些SPCA算法复杂度的总结 Notation 论文概述 原始问题 问题的变种 算法 固定\(X\),计算\(R\) 固定\(R\),求解\(X\) (\(Z =VR^{\mathrm{T ...

  4. 《principal component analysis based cataract grading and classification》学习笔记

    Abstract A cataract is lens opacification caused by protein denaturation which leads to a decrease i ...

  5. PCA(Principal Component Analysis)主成分分析

    PCA的数学原理(非常值得阅读)!!!!   PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可 ...

  6. Principal Component Analysis(PCA)

    Principal Component Analysis(PCA) 概念 去中心化(零均值化): 将输入的特征减去特征的均值, 相当于特征进行了平移, \[x_j - \bar x_j\] 归一化(标 ...

  7. (4)主成分分析Principal Component Analysis——PCA

    主成分分析Principal Component Analysis 降维除了便于计算,另一个作用就是便于可视化. 主成分分析-->降维--> 方差:描述样本整体分布的疏密,方差越大-> ...

  8. Principal Component Analysis ---- PRML读书笔记

    To summarize, principal component analysis involves evaluating the mean x and the covariance matrix ...

  9. 从矩阵(matrix)角度讨论PCA(Principal Component Analysis 主成分分析)、SVD(Singular Value Decomposition 奇异值分解)相关原理

    0. 引言 本文主要的目的在于讨论PAC降维和SVD特征提取原理,围绕这一主题,在文章的开头从涉及的相关矩阵原理切入,逐步深入讨论,希望能够学习这一领域问题的读者朋友有帮助. 这里推荐Mit的Gilb ...

随机推荐

  1. 学习java 7.13

    学习内容: 一个汉字存储:如果是GBK编码,占用2个字节:如果是UTF-8编码,占用3个字节 汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数 字符流=字节流+编码表 采用何种规则编码,就要 ...

  2. Spring Boot中使用Mybatis

    一.步骤 导入依赖:MySQL驱动.Druid依赖.MyBatis与Spring Boot整合依赖.Lombok依赖 在Service接口实现类上添加@Service注解 在Dao接口上添加@Mapp ...

  3. 3.使用Spring Data ElasticSearch操作ElasticSearch(5.6.8版本)

    1.引入maven坐标 <!--spring-data-elasticsearch--><dependency> <groupId>org.springframew ...

  4. 【C/C++】vector 动态二维数组

    声明 vector<vector<int> vec; //赋值思路可以从这个很基础的操作里看出来 vector<int> a; a.push_back(1); a.pus ...

  5. gitlab官方api使用

    目录 一.简介 二.技术要点 三.案例 一.简介 Gitlab作为一个开源.强大的分布式版本控制系统,已经成为互联网公司.软件开发公司的主流版本管理工具.使用过Gitlab的都知道,想要提交一段代码, ...

  6. mysql索引最左匹配的理解(转载于知乎回答)

    作者:沈杰链接:https://www.zhihu.com/question/36996520/answer/93256153来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  7. HMAC在“挑战/响应”(Challenge/Response)身份认证的应用

    HMAC的一个典型应用是用在"挑战/响应"(Challenge/Response)身份认证中. 认证流程 (1) 先由客户端向服务器发出一个验证请求. (2) 服务器接到此请求后生 ...

  8. 攻防世界 pwn welpwn

    感觉好久没有水博客了,今天借助这道题来告诉自己做pwn题要多调试!!! 先检查了保护只开启了堆栈不可执行,接下来ida看一下伪代码: 这里可以往buf进行写入,接下来看一下echo函数: 大概意思就是 ...

  9. 联盛德 HLK-W806 (九): 软件SPI和硬件SPI驱动ST7789V液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  10. Table.AlternateRows删除间隔….Alternate…(Power Query 之 M 语言)

    数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...