TopoFormer论文笔记

Why(研究背景与动机)

  1. 问题背景
    • 药物研发成本高昂(10年+、数十亿美元),传统方法(分子对接、自由能计算、经验模型)存在精度低、计算量大、易漏检非常规结合位点等问题。
    • 现有深度学习模型依赖序列数据(如蛋白质序列/SMILES),但忽略关键 3D 结构信息(如立体化学效应),导致对蛋白质-配体相互作用的建模不足。

  2. 现有技术瓶颈
    • NLP 模型(如 Transformer)难以直接应用于 3D 分子结构,因其序列化架构无法兼容空间拓扑信息。
    • 传统拓扑方法仅捕捉简单拓扑特征,缺乏对多尺度物理化学相互作用(如氢键、范德华力)的表征。


How(方法与技术)

1. TopoFormer概述

(1)不同于传统 Transformer 仅处理蛋白质和配体序列,TopoFormer 直接输入 3D 蛋白质-配体复合物
(2)为明确分析范围,TopoFormer 采用 20 埃(Å)或更精确的 12 埃截断值(cutoff),在设定距离范围内识别重配体(heavy ligand)及其邻近蛋白质原子。TopoFormer 随后通过其拓扑序列嵌入模块(Topological Sequence Embedding Module),将 3D 分子结构转化为拓扑序列。该过程将各类物理、化学及生物相互作用编码为向量序列
(3)TopoFormer 采用未标注蛋白质-配体复合物进行自监督预训练,使用 Transformer 编码器-解码器重构拓扑序列。该阶段通过比较输出与输入 Embedding 的相似度来评估精度。
(4)完成预训练后,TopoFormer 进入基于标记复合物的监督式微调阶段,此时初始嵌入向量转化为下游任务(如评分、排序、对接及筛选)的核心特征。在预测模块中,每个任务均配置专用预测头(dedicated head)。为确保准确性并降低偏差,TopoFormer 集成多个以不同随机种子初始化的拓扑 Transformer 深度学习模型,并与基于序列的模型形成互补。

2. PTHL

(1)TopoFormer 采用持续拓扑超有向图拉普拉斯算子(Persistent Topological Hyperdigraph Laplacian, PTHL)技术对三维蛋白质-配体复合物进行精细表征,其优势超越传统图(Graph)、单纯复形(Simplicial Complexe)与超图(Hypergraph)。
(2)在研究蛋白质-配体复合物时,我们首先构建拓扑超有向图(Topological Hyperdigraph)进行表征。拓扑超有向图利用不同维度的定向超边(Directed Hyperedge),可建模超越简单二元连接的复杂相互作用,相较传统方法实现更精细的表征。此外,超边的方向性整合了电负性(electronegativity)、电离能(ionization energy)等物理化学属性,相较传统方法实现更精细的表征。
(3)拓扑拉普拉斯矩阵特征值)可揭示对象的的拓扑和几何特性。
(4)为捕获蛋白质-配体复合物中复杂的原子相互作用(包括共价键、离子键与范德华力),TopoFormer 采用 PTHL 进行多尺度分析。该方法基于过滤参数(filtration parameter)演化拓扑序列,可跨尺度解析相互作用(如原子间距离从 2 埃到 12 埃),帮助 Transformer 模型识别各尺度对结合亲和力等特性的贡献。通过注意力分数可直观呈现不同尺度对复合物形成的具体作用机制(图3b-e)。
(5)元素间相互作用,包括氢键、范德华力与 π-π 堆积(pi-stacking),是维持蛋白质-配体复合物稳定性与特异性的关键因素。为在元素层面解析这些相互作用,TopoFormer 在拓扑序列嵌入(Topological Sequence Embedding)中引入元素特异性分析(Element-specific Analysis)方法。该方法基于蛋白质与配体中的常见重元素构建超有向子图,生成元素特异性拉普拉斯矩阵以编码复合物内的相互作用。该技术通过提取精细的物理化学特征,增强 Transformer 模型对蛋白质-配体相互作用复杂动态过程的理解。

3. 自监督预训练+监督式微调

(1)预训练阶段:使用 PDBbind 的 19,513 个未标记的蛋白质-配体复合物对 TopoFormer 进行预训练,通过重建拓扑嵌入(TopoFormer 采用拓扑嵌入模型将 3D 蛋白质-配体复合物转化为具有多尺度特征的拓扑序列),并均方误差(MSE)作为重建损失函数,使模型从海量无标签数据中学习蛋白质-配体相互作用的普适表征。
(2)微调阶段:针对评分、排序、对接与筛选任务,采用平均绝对误差(MAE)作为损失函数对 TopoFormer 进行微调。

4. 关键技术细节

(1)拓扑超有向图(Topological Hyperdigraph)
:边仅连接两个顶点,无方向性。
超图(Hypergraph):边可连接多个顶点,但无方向性。
有向图(Directed Graph):边有方向性,但每条边仍仅连接两个顶点。
单纯形(Simplex):是顶点集合的几何抽象:
◦ 0维单纯形:单个点
◦ 1维单纯形:线段(两个顶点)
◦ 2维单纯形:三角形(三个顶点、三条边)
◦ 3维单纯形:四面体(四个顶点、六条边、四个三角形面)
◦ k维单纯形:k+1 个顶点及其所有子结构
单纯复形(Simplicial Complexe):由单纯形构成的集合,描述高维拓扑结构,但无方向性。
拓扑超有向图:结合超图的多顶点连接、有向图的方向性、单纯复形的拓扑分析。本质上,拓扑超有向图由定向超边(Directed Hyperedge)组成。

在这里插入图片描述

图4-b 单纯复形

在这里插入图片描述

图4-c 定向超边

(2)拓扑拉普拉斯算子(Topological Laplacians)与谱分析(Spectrum Analysis)
拓扑拉普拉斯算子是高阶拓扑结构(如单纯复形、超图、超有向图)上的拉普拉斯算子,用于量化结构的拓扑和几何特性。
单纯复形超图超有向图的拓扑信息均源自其链复形(Chain Complexe)。下文我们将从链复形的角度重新定义拉普拉斯算子:设 Ω ∗ \Omega_* Ω 为具有微分算子 ∂ k : Ω k → Ω k − 1 \partial_k: \Omega_k \to \Omega_{k-1} k:ΩkΩk1 的链复形,假设每个 Ω k \Omega_k Ωk 均配备内积结构,则边界算子(Boundary Operator) ∂ k \partial_k k 存在伴随算子 ∂ k ∗ \partial_k^* k 。组合拉普拉斯算子 Δ k : Ω k → Ω k \Delta_k: \Omega_k \to \Omega_k Δk:ΩkΩk 定义为:
Δ k = ∂ k + 1 ∘ ∂ k + 1 ∗ + ∂ k ∗ ∘ ∂ k (4) \Delta_k = \partial_{k+1} \circ \partial_{k+1}^* + \partial_k^* \circ \partial_k \tag{4} Δk=k+1k+1+kk(4)
特别地, Δ 0 = ∂ 1 ∘ ∂ 1 ∗ \Delta_0 = \partial_1 \circ \partial_1^* Δ0=11。若为每个 Ω k \Omega_k Ωk 选取标准正交基,则拉普拉斯算子 Δ k \Delta_k Δk 的表示矩阵 L k \mathcal{L}_k Lk 可表达为:
L k = B k + 1 B k + 1 T + B k T B k (5) \mathcal{L}_k = B_{k+1}B_{k+1}^T + B_k^T B_k \tag{5} Lk=Bk+1Bk+1T+BkTBk(5)
其中 B k B_k Bk ∂ k \partial_k k 的左乘表示矩阵, B k T B_k^T BkT B k B_k Bk 的转置矩阵。项 B k T B k B_k^T B_k BkTBk 描述 k k k 维单纯形在 ( k − 1 ) (k-1) (k1) 维单纯形交集中产生的连通性;而项 B k + 1 B k + 1 T B_{k+1}B_{k+1}^T Bk+1Bk+1T 则反映 k k k 维单纯形嵌入 ( k + 1 ) (k+1) (k+1) 维单纯形引发的相互作用。
◦ 此定义将图拉普拉斯算子(Graph Laplacian)(将图视为 1 维单纯形)推广至高维空间。其特征向量与特征值编码单纯复形或超有向图的几何与拓扑信息。
谱分析:通过研究拓扑拉普拉斯算子的特征值),揭示结构的拓扑和几何特性。由于拉普拉斯矩阵半正定,其特征值均非负:
谐波谱(Harmonic Spectrum):对应零特征值,反映拓扑信息。
非谐波谱(Non-Harmonic Spectrum):对应非零特征值,反映几何信息。
(3)持续拉普拉斯算子(Persistent Laplacians)
持续拉普拉斯算子又称多尺度拓扑拉普拉斯算子(Multiscale Topological Laplacians),最初于 2019 年提出。
• 与持续同调(Persistent Homology)类似,持续拉普拉斯算子​​通过过滤过程(filtration process)​​实现​​多尺度表征​​。
持续同调:用于捕捉数据在不同尺度下的拓扑特征。其核心是通过​​​​过滤过程逐步改变一个尺度参数(即​​过滤参数​​),生成一系列嵌套的子结构(如单纯复形),并跟踪拓扑特征的“诞生”与“消失”。
过滤过程是通过逐步调整一个参数(记为 ​​d​​),构建数据从局部到全局的层级化结构。
过滤参数 d 的选择​​依赖于数据类型。例如,对点云数据,d 通常表示以每个点为中心的球体半径(或直径)。当 d 增大时,球体逐渐覆盖更多邻近点。
调整过滤参数:通过递增 d 值,生成一系列嵌套的结构,形成层级化的表征序列(例如,较小 d 值生成的图始终是较大 d 值生成图的子集)。 ​​
(4)元素特异性分析(Element-specific Analysis)
• 为实现精确预测,需在分子层面更优地表征蛋白质与配体间的相互作用。为此,TopoFormer 引入元素特异性拓扑嵌入技术进行特征提取。
• 分析配体时,重点关注碳(C)、氮(N)、氧(O)、硫(S)、磷(P)、氟(F)、氯(Cl)、溴(Br)、碘(I)等重元素;而蛋白质仅考虑碳(C)、氮(N)、氧(O)、硫(S)。通过特定顺序排列的元素组合表征蛋白质-配体相互作用:
蛋白质元素组合
E protein = { { C } , { N } , { O } , { S } , { C,N } , { C,O } , { C,S } , { N,O } , { N,S } , { O,S } , { C,N,O,S } } \mathcal{E}_{\text{protein}} = \left\{ \{ \text{C} \}, \{ \text{N} \}, \{ \text{O} \}, \{ \text{S} \}, \{ \text{C,N} \}, \{ \text{C,O} \}, \{ \text{C,S} \}, \{ \text{N,O} \}, \\ \{ \text{N,S} \}, \{ \text{O,S} \}, \{ \text{C,N,O,S} \} \right\} Eprotein={{C},{N},{O},{S},{C,N},{C,O},{C,S},{N,O},{N,S},{O,S},{C,N,O,S}}
配体元素组合
E ligand = { { C } , { N } , { O } , { S } , { C,N } , { C,O } , { C,S } , { N,O } , { N,S } , { O,S } , { N,P } , { F,Cl,Br,I } , { C,O,N,S,F,P,Cl,Br,I } } \mathcal{E}_{\text{ligand}} = \left\{ \{ \text{C} \}, \{ \text{N} \}, \{ \text{O} \}, \{ \text{S} \}, \{ \text{C,N} \}, \{ \text{C,O} \}, \{ \text{C,S} \}, \{ \text{N,O} \}, \\ \{ \text{N,S} \}, \{ \text{O,S} \}, \{ \text{N,P} \}, \{ \text{F,Cl,Br,I} \}, \\ \{ \text{C,O,N,S,F,P,Cl,Br,I} \} \right\} Eligand={{C},{N},{O},{S},{C,N},{C,O},{C,S},{N,O},{N,S},{O,S},{N,P},{F,Cl,Br,I},{C,O,N,S,F,P,Cl,Br,I}}
• 在元素特异性嵌入框架下,蛋白质-配体相互作用通过两组原子(一组来自蛋白质,另一组来自配体)间的拓扑链接定义。例如,符号 K { C,N } , { S } K_{\{\text{C,N}\},\{\text{S}\}} K{C,N},{S} 表示由蛋白质的 C、N 原子与配体的 S 原子构成的拓扑超有向图表征。
• 该嵌入方法通过空间关系矩阵 D D D 量化相互作用,其数学定义为:
D ( i , j ) = { ∥ r i − r j ∥ , 若  r i ∈ E protein , r j ∈ E ligand 或  r i ∈ E ligand , r j ∈ E protein ∞ , 其他情况 (10) D(i,j) = \begin{cases} \| \mathbf{r}_i - \mathbf{r}_j \|, & \text{若 } \mathbf{r}_i \in \mathcal{E}_{\text{protein}}, \mathbf{r}_j \in \mathcal{E}_{\text{ligand}} \\ & \text{或 } \mathbf{r}_i \in \mathcal{E}_{\text{ligand}}, \mathbf{r}_j \in \mathcal{E}_{\text{protein}} \\ \infty, & \text{其他情况} \end{cases} \tag{10} D(i,j)= rirj,, riEprotein,rjEligand riEligand,rjEprotein其他情况(10)
其中, r i , r j \mathbf{r}_i, \mathbf{r}_j ri,rj 为原子坐标向量, ∥ r i − r j ∥ \| \mathbf{r}_i - \mathbf{r}_j \| rirj 表示欧氏距离。
• TopoFormer 模型考虑配体原子周围20埃内的蛋白质原子,而 T o p o F o r m e r s \mathbf{TopoFormer}_s TopoFormers 模型将此范围缩小至12埃。本研究通过将蛋白质内部或配体内部原子间距设为无穷大,聚焦于蛋白质-配体间相互作用。针对特定复合物,共存在 143 种潜在元素组合( 11 种蛋白质组合 ×13 种配体组合),每种组合均作为单纯复形通过持续 PTHL 方法进行深度解析。


So(结果)

评分任务:CASF-2016 上 PCC=0.864,RMSE=1.568 kcal/mol(表1)。
排名任务:CASF-2016 高/低阶成功率 21%/60%(图2f)。
对接任务:CASF-2013 成功率 91.3%,显著优于现有模型(图3f-g)。
筛选任务:LIT-PCBA 数据集 E F 1 % \mathbf{EF}_{1\%} EF1%=7.29,优于多数基于评分函数的筛选方法(表2)。


3D 复合物的拓扑序列嵌入流程

1. 提取相关原子信息

目标:从蛋白质-配体复合物中提取相关原子信息(元素数组,坐标数组)

代码实现
(1)蛋白质处理

# 从PDB文件中读取蛋白质原子(C/N/O/S)
raw_protein_ele, raw_protein_xyz = get_data_from_protein_PDB(
    protein_pdb_file=protein_file,
    consider_ele=['C', 'N', 'O', 'S']
)

(2)配体处理

# 从PDB/SDF/MOL2/Ensemble PDB文件中读取配体原子(H/C/N/O/F/P/S/Cl/Br/I)
    if ligand_file_type == 'pdb':
        raw_ligand_ele, raw_ligand_xyz = get_data_from_ligand_PDB(
            ligand_file,
            ['H', 'C', 'N', 'O', 'F', 'P', 'S', 'Cl', 'Br', 'I'],
        )
    elif ligand_file_type == 'sdf':
        raw_ligand_ele, raw_ligand_xyz = get_data_from_ligand_sdf(
            ligand_file,
            ['H', 'C', 'N', 'O', 'F', 'P', 'S', 'Cl', 'Br', 'I'],
        )
    elif ligand_file_type == 'mol2':
        raw_ligand_ele, raw_ligand_xyz = get_data_from_ligand_mol2(
            ligand_file,
            ['H', 'C', 'N', 'O', 'F', 'P', 'S', 'Cl', 'Br', 'I'],
        )
    elif ligand_file_type == 'ensamble_pdb':
        raw_ligand_ele, raw_ligand_xyz = get_data_from_ligand_ensemble_PDB(
            ligand_file,
            ['H', 'C', 'N', 'O', 'F', 'P', 'S', 'Cl', 'Br', 'I'],
        )

(3)筛选配体周围 consider_field(默认 20Å)内的蛋白质原子

    protein_indices = []
    for i_portein, protein_xyz in enumerate(raw_protein_xyz):
        for i_ligand, ligand_xyz in enumerate(raw_ligand_xyz):
            if np.linalg.norm(protein_xyz - ligand_xyz) <= consider_field:
                flag = 1
                break
            else:
                flag = 0
                continue
        if flag == 1:
            protein_indices.append(i_portein)
    considered_protein_ele = raw_protein_ele[protein_indices]
    considered_protein_xyz = raw_protein_xyz[protein_indices]
    print(f'Number of protein atoms: {len(considered_protein_ele)}')
    print(f'Number of protein atoms: {len(raw_ligand_ele)}')

2. 元素组合方案

目标:定义蛋白质和配体的元素组合,捕捉不同化学相互作用

理论
(1)蛋白质元素组合:C, N, O, S 的单元素及多元素组合(如 {C}, {N}, {C,N} 等)
(2)配体元素组合:包含 C, N, O, S, F, P, Cl, Br, I 的组合

代码实现

    # 获取元素组合方案
    protein_ele_sets, ligand_ele_sets = selected_target_combination(scheme_name=ele_scheme)

3. 生成距离矩阵

目标:生成蛋白质-配体跨分子原子距离矩阵,屏蔽分子内原子距离
代码实现

    # 遍历所有元素组合
    for i, protein_ele in enumerate(protein_ele_sets):
        # 筛选当前元素组合的蛋白质原子
        selected_protein_indices = [ele in protein_ele for ele in considered_protein_ele]
        selected_protein_ele = considered_protein_ele[selected_protein_indices]
        selected_protein_xyz = considered_protein_xyz[selected_protein_indices]

        for j, ligand_ele in enumerate(ligand_ele_sets):
            # 筛选当前元素组合的配体原子
            selected_ligand_indices = [ele in ligand_ele for ele in raw_ligand_ele]
            selected_ligand_ele = raw_ligand_ele[selected_ligand_indices]
            selected_ligand_xyz = raw_ligand_xyz[selected_ligand_indices]

            # 生成距离矩阵
            distance_matrix = generate_distance_matrix(selected_protein_ele, selected_protein_xyz,
                                                       selected_ligand_ele, selected_ligand_xyz, dis_cutoff)

4. PTHL

目标:通过持久拉普拉斯(Persistent Laplacian)分析提取多尺度拓扑特征

理论
(1)空间尺度参数化:通过 dis_start(起始距离)、dis_step(步长)、dis_cutoff(终止距离)定义多尺度分析范围(例如 0-10Å ,步长 0.1Å)。
(2)拓扑不变量与频谱统计:计算每个尺度下的拉普拉斯矩阵特征值,统计以下特征:
• 零特征值数量(Betti 数)
• 非零特征值的最大值、均值、标准差等

代码实现

    # 初始化特征数组
    feature_array = np.zeros([6, int((dis_cutoff - dis_start) / dis_step), 143])
    print(f'feature shape: [#statisc spectral, #filtration parameters, #element-specific combinations] = [6, 100, 143]')
    element_combin_count = 0

    # 计算拓扑特征
    protein_len = len(selected_protein_ele)
    ligand_len = len(selected_ligand_ele)
    if (ligand_len > 0 and protein_len > 0):
        # 调用SimplicialComplexLaplacian进行持续同调计算
        scpl = SimplicialComplex_laplacian.SimplicialComplexLaplacian()
        all_laplacian_features = scpl.persistent_simplicialComplex_laplacian_dim0(
            input_data=distance_matrix,
            is_distance_matrix=True,
            max_dim=0,
            filtration=np.round(np.arange(dis_start, dis_cutoff, dis_step), 2),
            print_by_step=True,
        )
        # 提取特征统计量
        for filtration_n, data_l in enumerate(all_laplacian_features):
            statistic_val = SimplicialComplex_laplacian.statistic_eigvalues(data_l[0])
            statistic_feature = [
                statistic_val.count_zero,  # 零特征值数量(拓扑不变量)
                statistic_val.max,         # 最大非零特征值
                statistic_val.sum,         # 非零特征值总和
                statistic_val.nonzero_mean,  # 非零特征值均值
                statistic_val.nonzero_std,   # 非零特征值标准差
                statistic_val.nonzero_min,   # 最小非零特征值
            ]
            feature_array[:, filtration_n, element_combin_count] = statistic_feature
    element_combin_count += 1

5. 特征序列生成与保存

目标:将多尺度和元素组合的特征整合为序列(生成的拓扑序列作为Transformer的输入)

输出结构
维度[6, 100, 143]
◦ 6 种统计量(零特征值数量、最大值等)
◦ 100 个空间尺度(若 dis_cutoff=10Å,步长 0.1Å
◦ 143 种元素组合(11 种蛋白质组合 × 13 种配体组合)

代码实现

    # 初始化特征数组
    feature_array = np.zeros([6, int((dis_cutoff - dis_start) / dis_step), 143])
    print(f'feature shape: [#statisc spectral, #filtration parameters, #element-specific combinations] = [6, 100, 143]')
    element_combin_count = 0
    
    # 保存特征文件
    if output_feature_name is None:
        protein_name_temp = os.path.split(protein_file)[-1].split('.pdb')[0]
        protein_name = protein_name_temp.split('_protein')[0] if '_protein' in protein_name_temp else protein_name_temp
        output_feature_name = protein_name
    np.save(os.path.join(output_feature_folder, f'{output_feature_name}.npy'), feature_array.astype(np.float32),
            allow_pickle=True)

完整流程示例

1. PDB文件

定义:PDB(Protein Data Bank)文件是存储生物大分子(如蛋白质)三维结构的标准格式
代码中的处理函数
get_data_from_protein_PDB 提取蛋白质的 C, N, O, S 原子坐标。
get_data_from_ligand_PDB 提取配体的 H, C, N, O 等原子。
作用:从PDB文件中提取特定元素(C, N, O, S)的原子坐标

示例PDB片段

ATOM      1  N   MET A   1      10.123  20.456  30.789  1.00 20.00           N  
ATOM      2  CA  MET A   1      11.234  21.567  31.890  1.00 25.00           C  
HETATM 1000  O   HOH B   1       5.678   6.789   7.890  1.00 15.00           O  

蛋白质原子:以 ATOM 开头,如 N(氮)、CA(α-碳)等。
配体/水分子:以 HETATM 开头,如 O(氧)。

解析过程
(1) 截取第3列的原子类型(如N/CA/O
(2)提取坐标:第7-9列(X/Y/Z坐标),例如 N 原子坐标为 (10.123, 20.456, 30.789)
(3)代码会过滤保留 C, N, O, S 原子,最终得到:

selected_ele = ['N', 'C', 'O']
selected_xyz = [[10.123, 20.456, 30.789], [11.234,21.567,31.890], [5.678,6.789,7.890]]

2. SDF文件(配体结构文件)

代码中的处理函数get_data_from_ligand_sdf
作用:从SDF文件中提取 H, C, N, O 等元素的原子坐标

示例SDF片段

  1  2  3  0  0  0  0  0  0  0999 V2000
    4.3180   -0.9960    0.0010 C   0  0  0  0  0  0  0  0  0
    5.1840   -0.4960    0.0000 N   0  0  0  0  0  0  0  0  0
    3.4520   -0.4960    0.0010 O   0  0  0  0  0  0  0  0  0

解析过程
(1)第4行开始读取原子数(此处3个原子)
(2)提取每行前3个坐标为XYZ值,第4列为元素类型,例如 C 原子坐标为 (4.318, -0.996, 0.001)
(3)最终得到:

selected_ele = ['C', 'N', 'O']
selected_xyz = [[4.318,-0.996,0.001], [5.184,-0.496,0.0], [3.452,-0.496,0.001]]

3. 距离矩阵(Distance Matrix)

代码中的处理函数generate_distance_matrix
作用:计算蛋白质-配体原子间的距离,并生成特殊结构的矩阵

示例场景
• 假设:
◦ 蛋白质有2个原子:P1(0,0,0), P2(1,1,1)
◦ 配体有2个原子:L1(2,2,2), L2(3,3,3)
生成规则:蛋白质内部或配体内部的原子距离设为极大值(cutoff*10000),仅保留蛋白质与配体间的距离
生成结果

         P1     P2     L1     L2
P1 [[1e+06, 1e+06, 3.464, 5.196],
P2  [1e+06, 1e+06, 1.732, 3.464],
L1  [3.464, 1.732, 1e+06, 1e+06],
L2  [5.196, 3.464, 1e+06, 1e+06]]

说明
◦ P1-P2(蛋白质内部)距离设为1e+06
◦ L1-L2(配体内部)距离设为1e+06


4. 拓扑特征

代码中的处理函数SimplicialComplex_laplacian模块

特征生成过程
(1)元素组合:选择特定的元素组合,例如,蛋白质选择 C, N, O, S 的子集,配体选择 H, C, N, O 等子集(如蛋白质的 C 和配体的 O
(2)过滤参数:从 dis_startdis_cutoff,以 dis_step 为步长,生成一系列距离阈值(如0.1Å间隔的0-10Å)
(3)拉普拉斯矩阵:在每个阈值下构建单纯复形,计算拉普拉斯矩阵的特征值
(4)统计特征:对每个距离阈值下的特征值提取6个统计量:零特征值计数、最大值、总和、非零均值、非零标准差、非零最小值

示例输出形状

feature_array.shape = (6, 100, 143)

维度解释
• 第1维:6 个统计指标
• 第2维:100 个距离阈值(如 0.1Å 间隔的 0-10Å)
• 第3维:143 种元素组合(蛋白质 11 种 × 配体 13 种)

具体示例
• 元素组合:蛋白质的 C 和配体的 O
• 过滤参数:0Å, 0.1Å, ..., 10Å
• 距离 =3.0Å 时,输出特征:

特征值 = [0.0, 1.2, 0.8, 0.0]
统计量 = [
  2,      # 零值计数
  1.2,    # 最大值
  2.0,    # 总和 (1.2+0.8)
  1.0,    # 非零均值 (1.2+0.8)/2
  0.2,    # 非零标准差 √[((1.2-1)^2+(0.8-1)^2)/2]
  0.8     # 非零最小值
]

5. 完整流程示例

输入
• 蛋白质 PDB :含 C, N, O, S 原子
• 配体 SDF :含 H, C, N, O 原子
• 参数:考虑半径 20Å ,距离范围 0-10Å ,步长 0.1Å

处理步骤
(1)提取蛋白质中距离配体20Å内的 C, N, O, S 原子
(2)提取配体中所有 H, C, N, O 原子
(3)生成 50×50 距离矩阵(假设蛋白质 30 原子 + 配体 20 原子)
(4)对每个元素组合(如 C-C、C-O 等)生成 50×50 子矩阵
(5)在 0-10Å 范围内以 0.1Å 步长计算拓扑统计量
(6)最终生成形状为 (6,100,143) 的特征数组


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值