"""四个方向(A/B/C/D)各一个可用实例,共用同一个合成数据集。
方向定义(对齐《自研AI立项与计划.md》与《自研AI_P3算法原型计划.md》):
A. 功能聚类 —— signal='F':按激活响应模式聚类,替代几何欧氏距离聚类
B. 多尺度树 —— regionify_hierarchical:先粗分区成大区、再细分小区
C. 区域函数升级 —— order=0(质心)→ order=1(低秩/主成分)
D. 逐层区域化 —— signal='S':按结构边界切分,层间不混聚
目的:保证可用性——四个方向都能在当前库代码上真实跑通,且生成物可
reconstruct() 还原成近似权重(当模型权重用)。
运行:python examples/four_directions_demo.py
"""
import numpy as np
import _common
import nrfunc
def _recon_ev(W, res):
"""重建权重并返回还原保真度,用于验证「生成物可当模型权重用」。"""
recon = nrfunc.reconstruct(res)
return nrfunc.explained_variance(W, res['assign'], res['K'], lambda: recon)
def main():
rng = np.random.default_rng(0)
n, D, T = 256, 64, 48
W = rng.standard_normal((n, D))
A = rng.standard_normal((n, T))
groups = np.repeat(np.arange(8), n // 8)
print("=" * 64)
print(f"共用数据集:W=({n},{D}) 激活 A=({n},{T}) 结构 groups=8 层")
print("=" * 64)
resA = nrfunc.regionify(W, signal='F', K=16, order=1, r=8, activations=A)
evA = _recon_ev(W, resA)
print(f"[A 功能聚类] K={resA['K']} 口径={resA['explained']:.3f} "
f"重建={evA:.3f} 一致={abs(resA['explained'] - evA) < 1e-9}")
resB = nrfunc.regionify_hierarchical(
W, signal='G', K_top=8, K_sub=4, order=1, r=8)
evB = _recon_ev(W, resB)
print(f"[B 多尺度树] 顶层={resB['K_top']} × 区内={resB['K_sub']} → 叶子 K={resB['K']} "
f"口径={resB['explained']:.3f} 重建={evB:.3f} "
f"一致={abs(resB['explained'] - evB) < 1e-9}")
resC0 = nrfunc.regionify(W, signal='G', K=16, order=0)
resC1 = nrfunc.regionify(W, signal='G', K=16, order=1, r=8)
evC1 = _recon_ev(W, resC1)
print(f"[C 阶数升级] 0 阶={resC0['explained']:.3f} → 1 阶={resC1['explained']:.3f} "
f"(+{resC1['explained'] - resC0['explained']:.3f}) 重建={evC1:.3f}")
resD = nrfunc.regionify(W, signal='S', groups=groups, order=1, r=8)
evD = _recon_ev(W, resD)
print(f"[D 逐层区域化] K={resD['K']}(=结构层数) 口径={resD['explained']:.3f} "
f"重建={evD:.3f} 一致={abs(resD['explained'] - evD) < 1e-9}")
print("=" * 64)
print("四个方向全部跑通:生成物均可 reconstruct() 还原成近似权重(可用)。")
print("=" * 64)
if __name__ == '__main__':
main()