Dimension reduction in principal component analysis for trees
主要看了第一篇文章,第三篇也就是最开始的那篇的文章并没有细看(主要是有好多看不懂).
问题
PCA主要解决的是欧式空间中的问题,虽然kernel可以将其扩展到高维和非线性. 有一些数据,并不位于欧式空间之中,比如这三篇文章所重视的树形结构的数据,如何抓住这些数据的主干(拓扑结构?)是一个十分有趣的问题.
上图即为一种可以表示为树形结构的数据——血管,血管汇集处可以视为是一个树节点,当然树形数据会丢失很多细节,比如血管的粗细,长度等. 但是,因为这里我们只关注血管的拓扑结构(以后用结构代替,因为对拓扑不是很熟悉,用起这个词来总感觉心慌慌的), 所以我树形结构已经足够了.
现在再一次复述一遍我们的问题:
假设我们有数据集T={ti}, 每一个ti即为一个树形结构的数据,我们希望找到一棵树或者一类树,使得其能抓住T的主要结构.
很自然的一个问题是,因为不是在欧式空间中,我们无法利用距离来度量俩棵树之间的差距,所以我们首先需要一些定义.
重要的定义
距离
假设有俩棵树t1,t2, 定义其距离为:
其中|⋅|表示集合的基数,即有限集合内元素的个数.
距离需要满足下面三个性质:
只需证明第三个性质:
t1,t2,t3都可以拆分成四份,以t1为例,t11只属于t1, t12属于t1,t2但不属于t3, 类似有t13, 最后是t123属于三者,那么:
比较便得证.
支撑树 交树
Supp(T)=∪ni=1ti, Int(T)=∩ni=1ti.
序
序,起着相当重要的作用,因为序相当于给t里面的元素进行了区分,如此我们才能对不同的树进行比较.
这篇文章的序是如此定义的:
- 根节点为0
- 假设所有节点的子孙数不超过k, 则第i个节点的第j个子孙序为ki+j.
容易证明,一棵树不会出现相同的序.
需要说明的子孙的排序,下面是文章中的一个例子:
这里k=4,但是有些时候有点出乎意料:
光看规则,t2的5应该为4更加合适,但是因为文章关注的是结构,所以其认为5在右边,所以为5. 事实上这样比较合适,否则支撑树的构造就显得不合理了(因为不同的结构会有相同的序).
这也带来一个问题,如何安排,这些节点的位置,在另外一篇文章中有提及:
虽然觉得如此也并不靠谱,但是似乎也只有如此.
tree-line
下面的例子,接上面的t1,t2,t3:
L中的l0是预先给定的,给定方式有很多种,比如Int(T)等,注意到后面的添加2为0的后代,8为2的后代,所以相应的0−2−7等等也是可以的. 不必再往下扩展的原因是支撑树中没有相应的元素了.
t1,t2,t3到L的距离为:
如果我们有L1,L2俩条tree_lines, 我们可以定义:
我认为这是很有意思的一点,虽然可能不太高明,但是这就和欧式空间中的子空间类似了(虽然我们非常愚蠢地把子空间中的元素都表示了出来).
有了这个,我们利用距离就可以定义投影了:
我看到这的时候,觉得,有点粗暴,但是不错.
相应的L1,L2,…也可以如此定义.
接下来有一个引理,这个引理有助于后面的分析,在此之前还需要定义path.
path
对于支撑树,从头节点到叶节点的每条路径均为一个path, 我们以P来表示所有的path(除l0之外), 显然每一条tree-line都可以用l0∪p,p∈P来表示.
Lfi,Lbi
实际上Lfk就是通过前向PCA所求得第k个的"载荷向量", 我认为这个定义是很自然的.
相应的还有后向的:
前向的方法,就是求我们所需要的成分,而后向的方法,就是求我们所舍弃的成分.
重要的性质
我会简单说明证明思路,细节回看论文.
因为L=l0∪pL, 所以我们只需要考虑t和pL即可,显然t∩pL是最合适的,否则,多一个点,|pL∖t|会多1, 如果少一个点|t∖pL|会多1.
这里我是这么思考的,假设L1,…,Lq互不相同(如果相同,则退化为不同), 则我们只需要考虑pL1,…,pLq, 上面所说的依然成立,只是增加的量为0或者1,但是不改变此时到达最小的事实.
定义权重:
其中δ(v,t)=1,v∈t.
有前向算法:
和相应的定理:
即按照上面的算法,我们可以求出相应的Lfk.
这个算法可以这么理解:
我们的目标是找到以个tree_line, 使得树在其上(加上之前的tree-lines)投影的损失最少.
首先节点v∈l0,其权重为0,这是因为每个tree-line都有,
其次是节点v∈pf1∪…∪pfk−1,权重为0,这是因为,即便我们再一次选中的L中有此节点,新的子空间也不会因为这个节点带来损失的减少(因为已经有了)
最后是其它的节点,可以想象,如果我们选中了这个节点,那么没有一棵树t, v∈t, 就会带来2点的距离减少,所以其权重设置为上面的形式.
算法自然是选择pL中的节点权重和最大的.
一个例子:
需要说明的是,这部分的证明我觉得是,就是正统的证明蛮有意思的.
后向的方法:
相应的算法:
这么来理解权重的定义,首先,如果节点v∈l0, 那么权重自然为0,因为每个L都有,所以不会剩下的子空间造成影响, 另外,如果v在超过俩条路径上存在,那么显然,我们去掉任意一条都不会导致这个节点消失于剩余的子空间,所以权重为0.
其它的情况,即有影响的情况,那么舍弃v会直接导致包含v的树与子空间的距离+2,所以才会有上面的定义.
例子:
还有一部分是为了说明,前向和后向的一致性,这部分的证明我没看.
其它
看其数值实验,很大程度上是利用投影的距离来进行一些分类啊之类的操作. 直观上,这么设计似乎能够抓住树形数据的主干,只是,我总感觉哪里怪怪的. 但是是蛮有趣的,在普通的PCA中,也会遇到类似类别的0, 1, 2的数据,这些数据,虽然硬用也是可以的,但是应该也是有更好的方法去针对. 眼前一亮,但怪怪的...
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥