Dimension reduction in principal component analysis for trees

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

在这里插入图片描述

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

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

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

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

重要的定义

距离

假设有俩棵树 t 1 , t 2 t_1,t_2 t1,t2, 定义其距离为:
d ( t 1 , t 2 ) = ∣ t 1 ∖ t 2 ∣ + ∣ t 2 ∖ t 1 ∣ d(t_1, t_2) = |t_1\setminus t_2| + |t_2 \setminus t_1| d(t1,t2)=t1t2+t2t1
其中 ∣ ⋅ ∣ |\cdot| 表示集合的基数,即有限集合内元素的个数.
距离需要满足下面三个性质:
d ( t 1 , t 2 ) = 0 ⇔ t 1 = t 2 , d ( t 1 , t 2 ) = d ( t 2 , t 1 ) ≥ 0 , d ( t 1 , t 3 ) ≤ d ( t 1 , t 2 ) + d ( t 2 , t 3 ) . 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). d(t1,t2)=0t1=t2,d(t1,t2)=d(t2,t1)0,d(t1,t3)d(t1,t2)+d(t2,t3).

只需证明第三个性质:
t 1 , t 2 , t 3 t_1, t_2, t_3 t1,t2,t3都可以拆分成四份,以 t 1 t_1 t1为例, t 11 t_{11} t11只属于 t 1 t_1 t1, t 12 t_{12} t12属于 t 1 , t 2 t_1, t_2 t1,t2但不属于 t 3 t_3 t3, 类似有 t 13 t_{13} t13, 最后是 t 123 t_{123} t123属于三者,那么:
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 ∣ 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}| d(t1,t3)=t11+t33+t12+t32d(t2,t3)=t22+t33+t21+t31d(t1,t2)=t11+t22+t13+t23
比较便得证.

支撑树 交树

S u p p ( T ) = ∪ i = 1 n t i Supp(\mathcal{T})=\cup_{i=1}^n t_i Supp(T)=i=1nti, I n t ( T ) = ∩ i = 1 n t i Int(\mathcal{T})=\cap_{i=1}^nt_i Int(T)=i=1nti.

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

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

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

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

需要说明的子孙的排序,下面是文章中的一个例子:
在这里插入图片描述
这里 k = 4 k=4 k=4,但是有些时候有点出乎意料:

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

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

在这里插入图片描述
虽然觉得如此也并不靠谱,但是似乎也只有如此.

tree-line

在这里插入图片描述

下面的例子,接上面的 t 1 , t 2 , t 3 t_1, t_2, t_3 t1,t2,t3:
在这里插入图片描述
L L L中的 l 0 l_0 l0是预先给定的,给定方式有很多种,比如 I n t ( T ) Int(\mathcal{T}) Int(T)等,注意到后面的添加2为0的后代,8为2的后代,所以相应的 0 − 2 − 7 0-2-7 027等等也是可以的. 不必再往下扩展的原因是支撑树中没有相应的元素了.

t 1 , t 2 , t 3 t_1, t_2, t_3 t1,t2,t3 L L L的距离为:
在这里插入图片描述
如果我们有 L 1 , L 2 L_1, L_2 L1,L2俩条tree_lines, 我们可以定义:
L 1 ∪ L 2 = { l 1 , i ∪ l 2 , j ∣ l 1 , i ∈ L 1 , l 2 , j ∈ L 2 } , L_1 \cup L_2 = \{l_{1,i} \cup l_{2,j} | l_{1, i} \in L_1, l_{2, j} \in L_2\}, L1L2={l1,il2,jl1,iL1,l2,jL2},
我认为这是很有意思的一点,虽然可能不太高明,但是这就和欧式空间中的子空间类似了(虽然我们非常愚蠢地把子空间中的元素都表示了出来).

有了这个,我们利用距离就可以定义投影了:
P L 1 ∪ L 2 ( t ) = a r g m i n l ∈ L 1 ∪ L 2 { d ( t , l ) } . P_{L_1 \cup L_2}(t)=\mathop{\mathrm{argmin}} \limits_{l \in L_1 \cup L_2} \{d(t, l)\}. PL1L2(t)=lL1L2argmin{d(t,l)}.
我看到这的时候,觉得,有点粗暴,但是不错.

相应的 L 1 , L 2 , … L_1, L_2, \ldots L1,L2,也可以如此定义.

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

path

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

L i f , L i b L_i^f, L_i^b Lif,Lib

在这里插入图片描述

在这里插入图片描述

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

相应的还有后向的:

在这里插入图片描述

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

重要的性质

我会简单说明证明思路,细节回看论文.
在这里插入图片描述

因为 L = l 0 ∪ p L L=l_0 \cup p_L L=l0pL, 所以我们只需要考虑 t t t p L p_L pL即可,显然 t ∩ p L t \cap p_L tpL是最合适的,否则,多一个点, ∣ p L \ t ∣ |p_L \backslash t| pL\t会多1, 如果少一个点 ∣ t \ p L ∣ |t \backslash p_L| t\pL会多1.

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

定义权重:
在这里插入图片描述
其中 δ ( v , t ) = 1 , v ∈ t \delta (v,t)=1, v\in t δ(v,t)=1,vt.
有前向算法:
在这里插入图片描述
和相应的定理:
在这里插入图片描述

即按照上面的算法,我们可以求出相应的 L k f L_k^f Lkf.
这个算法可以这么理解:
我们的目标是找到以个tree_line, 使得树在其上(加上之前的tree-lines)投影的损失最少.
首先节点 v ∈ l 0 v\in l_0 vl0,其权重为0,这是因为每个tree-line都有,
其次是节点 v ∈ p 1 f ∪ … ∪ p k − 1 f v \in p_1^f \cup \ldots \cup p_{k-1}^f vp1fpk1f,权重为0,这是因为,即便我们再一次选中的 L L L中有此节点,新的子空间也不会因为这个节点带来损失的减少(因为已经有了)
最后是其它的节点,可以想象,如果我们选中了这个节点,那么没有一棵树 t t t, v ∈ t v \in t vt, 就会带来2点的距离减少,所以其权重设置为上面的形式.

算法自然是选择 p L p_L pL中的节点权重和最大的.

一个例子:
在这里插入图片描述

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

后向的方法:
在这里插入图片描述

相应的算法:
在这里插入图片描述
在这里插入图片描述
这么来理解权重的定义,首先,如果节点 v ∈ l 0 v \in l_0 vl0, 那么权重自然为0,因为每个 L L L都有,所以不会剩下的子空间造成影响, 另外,如果v在超过俩条路径上存在,那么显然,我们去掉任意一条都不会导致这个节点消失于剩余的子空间,所以权重为0.
其它的情况,即有影响的情况,那么舍弃 v v v会直接导致包含 v v v的树与子空间的距离+2,所以才会有上面的定义.
例子:

在这里插入图片描述

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

在这里插入图片描述

其它

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值