聚类方法,聚类后选择打分最高那个分子,并对 karamadock 的结果求交集
This commit is contained in:
@@ -8,6 +8,40 @@ python scripts/cluster_granularity_scan.py \
|
||||
--smiles-col smiles \
|
||||
--radius 3 \
|
||||
--n-bits 1024
|
||||
|
||||
Method Params #Clusters AvgSize AvgIntraSim
|
||||
Butina {'cutoff': 0.4} 8960 2.10 0.706
|
||||
Butina {'cutoff': 0.5} 6720 2.80 0.625
|
||||
Butina {'cutoff': 0.6} 4648 4.04 0.548
|
||||
Butina {'cutoff': 0.7} 2783 6.75 0.463
|
||||
Butina {'cutoff': 0.8} 958 19.61 0.333
|
||||
Hierarchical {'threshold': 0.3} 12235 1.54 0.814
|
||||
Hierarchical {'threshold': 0.4} 9603 1.96 0.739
|
||||
Hierarchical {'threshold': 0.5} 7300 2.57 0.664
|
||||
DBSCAN {'eps': 0.2} 2050 3.18 0.106
|
||||
DBSCAN {'eps': 0.3} 2275 4.61 0.113
|
||||
DBSCAN {'eps': 0.4} 2014 6.65 0.113
|
||||
KMeans {'k': 10} 10 1878.70 0.204
|
||||
KMeans {'k': 20} 20 939.35 0.200
|
||||
KMeans {'k': 50} 50 375.74 0.233
|
||||
| 列名 | 含义 |
|
||||
| --------------- | --------------------------------- |
|
||||
| **#Clusters** | 聚类后得到的簇数量(独立 cluster 数) |
|
||||
| **AvgSize** | 每个簇平均包含的分子个数 = 样本总数 / 簇数 |
|
||||
| **AvgIntraSim** | 每个簇内部分子两两之间的平均相似度(越接近 1 代表簇内部更相似) |
|
||||
现在的数据:
|
||||
|
||||
Butina 在 cutoff=0.4 时 AvgIntraSim=0.706(簇内结构还算比较接近,但簇数非常多)。
|
||||
|
||||
Hierarchical 阈值 0.3 时 AvgIntraSim=0.814(更紧密,但簇数更多)。
|
||||
|
||||
DBSCAN 和 KMeans 的簇内相似度都低,说明它们在 Tanimoto 上可能不太适合你这个任务。
|
||||
|
||||
聚类:用 Butina cutoff ≈ 0.6–0.7 或 Hierarchical 阈值 ≈ 0.5–0.6(保持簇内差异可控,簇数不要太多)。
|
||||
|
||||
选代表:每个簇取 1 个中心分子(簇内与其他成员平均相似度最高的那个)。
|
||||
|
||||
如果仍想增强多样性,可以在代表集中再跑一次 MaxMin picking。
|
||||
"""
|
||||
import sys, os
|
||||
from pathlib import Path
|
||||
|
||||
Reference in New Issue
Block a user