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

使用统计学或机器学习方法构建的 QSAR(定量构效关系)模型需要定义应用域才能使模型更有意义。一来这符合 OECD 对 QSAR 的指导原则,二来从机器学习角度应用域的设定可以防止因为待测试样本的特征范围与训练集样本区别太大而导致的预测偏差过大的情况,就像用亚洲人种做的调查所构建的模型可能并不适合其他人种。从另一个角度,若通过合适的应用域可以在评估前将不适合的化合物样本踢出在外,便同样是在提高模型的准确性。当然此时也得引入另一个评价指标,即该应用域的范围有多大,我们并不希望一个模型虽然很好但仅适用于很小的化合物空间。

Read More

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

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

Read More

如何写科技论文

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

写论文的顺序

最初写论文时都是从头开始写,即背景、方法、结果、讨论、结论的顺序,最后再写摘要。虽然这种方法并非不行,但根据自己这些年来写文章的体验,这种从头写的方法其实并不值得推荐,下面给出我个人的一些建议。

Read More

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

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

Read More

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

在药物筛选过程中,我们时常面临一个问题:我有太多有意思的分子,但资源或预算有限,我该如何挑选最合适的分子去进一步测活等?如果全选择理论最优(如对接打分最高、QSAR 预测结果最好等),那么很有可能由于缺乏多样性,测试结果差不多,意义不大。此时我们可以通过聚类的方法减少待测样本的同时尽可能大的保留化合物的多样性。K-means 是一个古老却又最常用的一种聚类方法,速度非常快。Patrick Walter 博士写了一篇博客介绍了使用 K-means 聚类方法的环境、目的与具体实现方法。由于谷歌的 Blogspot 在国内无法正常访问,我就在下面附上原文。Patrick 将它的工具放在了 Github,我们可以直接使用命令行对化合物进行聚类。

Read More

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

之前本博客的图床都采用七牛云,可惜现在可能由于国家的管控,必须使用备案的域名才可以绑定,
否则只给一个为期30天的测试域名,显然是不能用这个域名作为图床的,无奈之下只能另辟蹊径。

网上看到一些介绍 Hexo 上传图片的方法,比如可以使用本身的插件post_asset_folder
可我仍然偏好使用图床,可能觉得源码就应该是纯粹的源码吧。

Read More

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

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

Read More

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

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

Read More

Facebook面试题-求硬币概率

无意中看到一个面试题,号称是Facebook出的(出处

You randomly draw a coin from 100 coins — 1 unfair coin (head-head), 99 fair coins (head-tail) and roll it 10 times. If the result is 10 heads, what is the probability that the coin is unfair?

Read More

Nodejs下使用gm圆形裁剪并合成图片

说到Nodejs下的图片处理可能第一想到就是gm,gm底层可以是GraphicsMagic(其实也是gm的由来),也可以是ImageMagick(其实GraphicsMagic本身也是从ImageMagic分割而来,现在独立了)。虽然这两个工具本身都不是js实现,所以需要额外安装,不过此工具非常常见,可能已经预装在linux系统下,而且安装也很方便,所以不用因为看到是“第三方”就放弃。虽然说这两个软件都只是底层,无需关心,可笔者在实践中发现必须得用GraphicsMagic,所以这里就只介绍GraphicsMagics的安装与使用。

Read More