RetroXpert - 一种基于 EGAT 和 RGN 的逆合成算法

一般说来(单步)逆合成(机器学习)算法主要有三大类,1)主流的是基于反应模板的方法,典型代表是 2018 年发表在 Nature 上的使用蒙特卡洛树以及三个较为传统的深度神经网络方法进行整个逆合成算法,其中最重要的一个神经网络就是根据产物的分子指纹预测一个反应模板,套上该模板即可得到反应物。也有论文称为分子指纹方法。2)最近比较火的是基于语言模型的方法,其中...

Read More

贝叶斯优化在化学中的应用-条件优化

在一个很大搜索空间内想找到最优的参数,一般会有模拟退火、遗传算法等基于随机的算法,但这些算法收敛性较差,需要很大的迭代次数才能达到最优,对于迭代成本非常高的一些应用场景,这些方法恐怕不是很适用,化学反应中的条件优化就是这么个迭代成本非常高的场景。常规的一次化学实验就需要花费 4-12 小时才能得到比较可靠的收率数据,假设一天可迭代两次,迭代 10 次需要一周...

Read More

高斯过程笔记 2 - 贝叶斯优化

高斯过程的理论与公式实在难以看懂,打算先把它晾在一边,先假设我已经可以成熟运用(当然如果仅仅是应用,scikit-learn 调用一下就可以),看看高斯过程能用来做什么。主动学习就是一个非常好的选择。想象下这么个场景,现在可以买到的化合物库可能达到了一个亿,如果将每个化合物都去进行分子对接,一个化合物如果需要 10 秒的计算时间,即使有 1 万个核,也需要 ...

Read More

使用 VSCODE 调试 RDKit 内核(C++)

在研究 RDKit 的一些算法的时候,总希望能够“进入到代码中”看这些变量到底是什么,哪些代码块会被执行。可 RDKit 的编译比较复杂,如果是 Python 的部分,那么可以直接在 VSCode 中进行调试,记得在 launch 中设置 “justMyCode: false",详见该问题。但如果想要调试 C++ 的部分,则就复杂很多,需要是用调试...

Read More

高斯过程笔记 1 - 关于贝叶斯统计中的基本概念理解

如果问统计学模型和机器学习模型有什么交集,那么高斯过程作为一个兼具理论与实际应用的算法自然首当其冲。直接百度下高斯过程自然能看到许多通俗的解释,比如: 高斯过程指的是一组随机变量的集合,这个集合里面的任意有限个随机变量都服从联合正态分布 (百度百科) 高斯过程被认为是一种机器学习算法,是以惰性学习方式,利用点与点之间同质性的度量作为核函数,以从输入的训...

Read More

ROC vs PRC 哪个能更好地评价不平衡数据集的模型表现

受试者工作特性(ROC)曲线是最常见的评价模型预测能力的方式之一,曲面下面积(AUC)越高则模型表现越好。除了 ROC 以外,还有一个相对少见但有时非常重要的评价方式,就是精度-召回率曲线(PRC),虽然同样是曲面下面积越高越好,其和 ROC 所考虑的评价指标不同,除了样子不同外,AUC 往往也不同。尽管在任意时刻使用 ROC 曲线评价模型无可厚非,但当数据...

Read More

使用 VF2 算法进行子结构搜索

子结构搜索在化学信息学中非常常见,利用这个算法,可以从数据库中检索到感兴趣的化合物、可以用来构建基于片段的 QSAR 模型、用来检查化合物中是否存在特定(警示)子结构、甚至用来匹配化学反应规则等等。由于我们可以将化合物分子看成是一个由点和边构成的图(Graph),子结构搜索就成了子图识别的过程。因此我们需要使用一些子图识别的算法来解决子结构搜索的问题,我们一...

Read More

决策树与信息增益的算法细节[下]

上一章中介绍了 scikit-learn 实现决策树时涉及的几个类以及着重介绍 split 的算法细节。本篇着重介绍 criterion 的算法细节,即如何(快速)计算特征规则的信息增益值。一般的教程在实现决策树时主要考虑到代码的易读性,但在真实应用环境或者说像 scikit-learn 这样的库之所以广为使用,其算法的高效性也是令我们值得学习的地方。另外主...

Read More

决策树与信息增益的算法细节[上]

决策树是非常经典的机器学习算法,单独使用时决策树仍然是至今少数可以解释的模型之一,许多决策树一同构建的整体模型,如经典的随机森林模型仍然是目前广泛使用的“传统机器学习算法”,其在化学信息学的出场频率绝不逊色于支持向量机以及神经网络这种较为复杂的模型。决策树的理论基础以及大致的算法其实不难理解,但若我们仔细关注 scikit-learn 的原码时,就会发现那些...

Read More

波峰识别算法介绍

最近的一个项目是研究钙离子信号强度的变化波形。研究方法是得到这些波的一些重要参数,比如波峰的数量、周期等。如何让计算机算法识别我们人眼一看便知的波峰则是第一个需要解决的问题。而且我们还让要让计算机知道哪些是“真正”的波峰,哪些是噪音导致的“小波”。简单的说涉及两个问题:1.波峰的本质是什么?2.真正的波和噪音的波的区别到底是什么? 波峰的本质可以从维基百科定...

Read More

SMILES 标准化算法 - CANGEN

SMILES 是化学信息学中最常见的分子形式,其因为可读性强、体积小且“表格友好”而广受应用。但由于同一个分子可以有多种不同的 SMILES 形式导致我们不能将它用作化合物的匹配与去重操作。于是将 SMILES 标准化(Canonicalise)的需求就产生,如果可以通过某个算法保证一个化合物只会有一种 SMILES 自然可以增加 SMILES 在化学信息学...

Read More

化学信息学中的立体化学

由于大多数化学信息学的应用模型(如 QSAR)都不考虑化合物的手性信息,因此大家在构建模型时也常常有意或无意地忽视它,甚至在建模之前直接将化合物的手性信息去掉。该过程无可厚非,毕竟既然对应异构体的分子指纹如果是一样的,若其活性也一样就没有必要作为重复数据出现在训练或测试集中,若其活性有很大区别,则不仅无法利用,反而增加模型训练的难度,试想同一个 X 怎么能得...

Read More

QSAR 模型中应用域的定义方法

使用统计学或机器学习方法构建的 QSAR(定量构效关系)模型需要定义应用域才能使模型更有意义。一来这符合 OECD 对 QSAR 的指导原则,二来从机器学习角度应用域的设定可以防止因为待测试样本的特征范围与训练集样本区别太大而导致的预测偏差过大的情况,就像用亚洲人种做的调查所构建的模型可能并不适合其他人种。从另一个角度,若通过合适的应用域可以在评估前将不...

Read More

Pytorch 实现 multi-head self-attention 逆合成预测

相比于传统的 RNN 方法构建的翻译模型,使用 Google 提出的 multi-head self attention 方法可以更好的捕捉长距离的词与语词之间的关系。北大裴剑锋课题组最近在 arXiv 发布了其利用该方法应用于逆合成的研究,本问尝试利用该论文提供的先做进行重复试验。虽然谷歌已经提供了“非官方”的 TensorFlow 扩展 tensor...

Read More

如何写科技论文

写科技论文往往是大家比较头痛的一件事情,做实验已经很辛苦,可把这些实验整理成一篇完整的稿子也一样特别痛苦,期间充满着纠结、心累与无奈。下面根据我写论文的经验,给大家分享下我写论文的一些心得。也许不适合所有情况,也许也不是最佳的方式,但不妨先根据下面的经验进行尝试,避免自己走一些弯路。 写论文的顺序最初写论文时都是从头开始写,即背景、方法、结果、讨论、结论的顺...

Read More

扩展连通性指纹(ECFP/Morgan Fingerprint)介绍

扩展连通性指纹(Extended Connectivity Fingerprints,ECFP)是当下最广受使用用于构建化合物定量构效关系(QSAR)模型的分子指纹。在 RDKit 中,ECFP 指纹又叫 Morgan 指纹,正因为 ECFP的核心想法来自于 Morgan 算法,该算法可以为每个原子分配一个唯一的识别符,该标识符会经过几轮迭代。 Morgan...

Read More

使用 K-means 方法对化合物库进行聚类

在药物筛选过程中,我们时常面临一个问题:我有太多有意思的分子,但资源或预算有限,我该如何挑选最合适的分子去进一步测活等?如果全选择理论最优(如对接打分最高、QSAR 预测结果最好等),那么很有可能由于缺乏多样性,测试结果差不多,意义不大。此时我们可以通过聚类的方法减少待测样本的同时尽可能大的保留化合物的多样性。K-means 是一个古老却又最常用的一种聚类方...

Read More

使用强化学习生成模型产生新的分子

在药物设计、化学信息学领域,深度学习并不一定能比传统机器学习领域有更好的表现,尤其是在学术界,由于有标签的数据很少,数据噪音较大,往往用深度学习只会导致过拟合降低模型的预测能力。但是,生成学习用于药物设计却完全发挥了当前深度神经网络的优势。虽然有标签的数据很少,但是药物设计数据库诸如CHEMBL不乏质量较高的“化合物信息”。这里说的质量较高指的是他们的类...

Read More

用于博客上传图片的图床网站汇集

之前本博客的图床都采用七牛云,可惜现在可能由于国家的管控,必须使用备案的域名才可以绑定,否则只给一个为期30天的测试域名,显然是不能用这个域名作为图床的,无奈之下只能另辟蹊径。 网上看到一些介绍 Hexo 上传图片的方法,比如可以使用本身的插件post_asset_folder,可我仍然偏好使用图床,可能觉得源码就应该是纯粹的源码吧。 笔者收集一些常见的图床...

Read More

使用Python或Bash统计文件行数方法与性能测试

当统计大文件的行数时,除了要考虑便捷性,自然也会想到要考虑其计算性能(主要是时间尺度)。网上搜了下有很多种方法可以实现,那么到底应该选择哪种?首先明确方向,需要统计结果的环境是python,那么除了使用python本身的方法外,利用bash也是个很不错的选择,毕竟bash里有很多快速处理文本的工具。 网上调查发现有6种bash下的方法和3种python下的方...

Read More