{ "metadata": { "name": "", "signature": "sha256:000afe566e05d08f982b61ccddea83bee65dc78682614a1973fc6e8b163c0684" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimizing Diversity Picking in the RDKit\n", "\n", "The RDKit has an implementation of the MaxMin algorithm (Ashton, M. et. al., Quant. Struct.-Act. Relat., 21 (2002), 598-604) for diversity picking. This provides a computationally efficient method for picking diverse subsets of molecules from a larger set.\n", "\n", "This post explores the performance of the different ways of invoking the algorithm and does a bit of looking at the scaling of the runtime with set size." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "from __future__ import print_function\n", "\n", "from rdkit import Chem\n", "from rdkit.Chem import Draw,rdMolDescriptors,AllChem\n", "from rdkit.Chem.Draw import IPythonConsole\n", "from rdkit import SimDivFilters,DataStructs\n", "\n", "import gzip\n", "%pylab inline\n", "\n", "from rdkit import rdBase\n", "print(rdBase.rdkitVersion)\n", "import time\n", "print(time.asctime())" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n", "2014.09.1pre\n", "Mon Aug 11 07:51:19 2014\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Start by reading in a set of molecules from the Zinc Biogenic Compounds (formerly known as \"Zinc Natural Products\") subset and generating Morgan2 fingerprints for the diversity calculation. The compound structures are available here:\n", "http://zinc.docking.org/subsets/zbc" ] }, { "cell_type": "code", "collapsed": false, "input": [ "ms = []\n", "inf = gzip.open('../data/znp.sdf.gz')\n", "suppl = Chem.ForwardSDMolSupplier(inf)\n", "while len(ms)<20000:\n", " m = next(suppl)\n", " AllChem.Compute2DCoords(m)\n", " if m is not None: ms.append(m)\n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "fps = [rdMolDescriptors.GetMorganFingerprintAsBitVect(m,2) for m in ms]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are two basic ways to use the MaxMinPicker\n", "\n", " 1. Generate the distance matrix in advance and do the picking based on those pre-calculated distances\n", " 2. Use a \"lazy\" form of the picker that generates distances using a caller-supplied function. For reasons of efficiency, this uses a cache internally so that distances don't have to be calculated more than once.\n", "\n", "Here's a demonstration of using the first approach to pick 50 diverse instances from the first 1000 compounds in the set:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def dmat_sim(fps,ntopick):\n", " ds=[]\n", " for i in range(1,len(fps)):\n", " ds.extend(DataStructs.BulkTanimotoSimilarity(fps[i],fps[:i],returnDistance=True))\n", " mmp =SimDivFilters.MaxMinPicker()\n", " ids=mmp.Pick(numpy.array(ds),len(fps),ntopick)\n", " return ids\n", "\n", "dmat_ids=dmat_sim(fps[:1000],50)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that there are some examples of using this approach floating around on the web that calculate the distance matrix in the wrong order. I've done my best to find and either fix or remove them, but there are no doubt still some bad ones out there." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(list(dmat_ids)[:10])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[374, 636, 790, 497, 724, 366, 418, 587, 433, 537]\n" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "Draw.MolsToGridImage([ms[x] for x in dmat_ids[:10]],molsPerRow=4)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "png": "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\nA3Ho0CGxHhZMTEzw559/wsXFBb17987zDYK0tDTExsbmeb158+ahSpUqGD58uLyj5pu2tjaWLl2K\n/v37w8LCAqVLl85+GwDNo6Jyv8hvvwE7dwITJgAZHQHdugGDB8u+fv8eePkSePu26IFJaJGRRM7O\nRMWKEdWvT3T2bJ43T01NJW9vb6pUqRKVK1eOvL29KTk5Od/N+fn5UbVq1ahq1ap0/vz5oqZXOUeP\nHqVGjRqRvr4+OTs7U3h4eOa5Y8eOUfny5alOnTp09+7dXK/h7+9PdevWpXLlytGRI0eEiP1NI0eO\npGHDhokdgwlo5MiRNHLkSLFjMJGkpRFt20ZUpw6Rvj7RhAlEL19mvU1CQgJ5enrSTz/9RMbGxuTq\n6kofPnwgIqKYmBhycHAgLS0tcnV1pbS0NIXmjYmJoUWLFpGZmRmZm5tT48aN6dmzZwptkzF5unXr\nFpUsWZKGDBlCKSkpBb7/06dPac+ePeTk5EQtW7YkQ0ND0tDQoHLlytGECRMUkLhg0tLSyNramgAU\n+cPU1JRWrFgh9kOiuLg4Mjc3JyMjIzI1Nc32YVu5MpG5ee4fUinRgAFEEsl/Fx0xgig8nGjZMqKh\nQ4lmzyYaPZpo+vQiZRWuAImOlhUehoZEdnbfLDwoPZ0uHz1KNjY2ZGJiQvPnzyfJl09IAcTHx5Oz\nszNpamqSg4MDxcTEFOo6quTcuXPUpEkT0tPTI2dnZ/r06VOOt4uKisr8o+zs7ExJSUk53i4lJYXc\n3d1JR0eHevfuTREREYqMn6tnz57RsGHDSE9Pj65duyZKBiYOLkB+TCkpRN7eRBYWRKamRK6uRF//\nOouKiiJXV1cyMzOjEiVKkLu7e66/5w8ePEglS5akxo0bU2hoqNzzvn79miZMmEDFihWjhg0b0tGj\nRykyMpIGDx5Murq65O7uTlKpVO7tMiZPZ84Q1a0rodmzF1B6erpcrimVSqlHjx5kYGBArVq1kss1\ni+LYsWOkr69PJ06coDt37uT64e/vT8+ePcv1o23btmRubk61atUqVKEmT7NmzSIrKytKTU0t/EU2\nbiT65x/Z12lpRH36yL5etozoyhXZ1yEhKlSA+PoSValCtHkzUV5PTHo60ZEjRHZ29MHenmbPnk2R\nkZFyifDvv/+SpaUllS1blg4fPiyXayqbCxcukL29Penq6pKzszN9/PgxX/c7deoUVa5cmaytrenm\n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\nAggREREREWkn3wzBIiIiIiIi7TGAEBERERGRahhAiIiIiIhINQwgRERERESkGgYQIiIiIiJSDQMI\nERERERGphgGEiIiIiIhUwwBCRERERESqYQAhIiIiIiLVMIAQEREREZFqGECIiIiIiEg1DCBERERE\nRKQaBhAiIiIiIlINAwgREREREamGAYSIiIiIiFTDAEJERERERKphACEiIiIiItUwgBARERERkWoY\nQIiIiIiISDUMIEREREREpBoGECIiIiIiUg0DCBERERERqYYBhIiIiIiIVMMAQkREREREqmEAISIi\nIiIi1TCAEBERERGRahhAiIiIiIhINaZaF0BERLmWkdYFEBFR7sMrIEREREREpBoGECIiIiIiUg0D\nCBERERERqYYBhIiIiIiIVMMAQkREREREqmEAISIiIiIi1TCAEBERERGRahhAiIiIiIhINQwgRERE\nRESkGgYQIiIiIiJSDQMIERERERGphgGEiIiIiIhUwwBCRERERESqYQAhIiIiIiLVMIAQEREREZFq\nGECIiIiIiEg1DCBERERERKQaBhAiIiIiIlINAwgREREREamGAYSIiIiIiFTDAEJERERERKphACEi\nIiIiItUwgBARERERkWoYQIiIiIiISDUMIEREREREpBoGECIiIiIiUg0DCBERERERqYYBhIiIiIiI\nVMMAQkREREREqmEAISIiIiIi1TCAEBERERGRahhAiIiIiIhINQwgRERERESkGgYQIiIiIiJSDQMI\nERERERGphgGEiIiIiIhUwwBCRERERESqYQAhIiIiIiLVMIAQEREREZFqGECIiIiIiEg1DCBERERE\nRKQaBhAiIiIiIlINAwgREREREamGAYSIiIiIiFTDAEJERERERKphACEiIiIiItUwgBARERERkWoY\nQIiIiIiISDUMIEREREREpBoGECIiIiIiUg0DCBERERERqYYBhIiIiIiIVMMAQkREREREqmEAISIi\nIiIi1TCAEBERERGRahhAKPfS6YDgYODRI60rISIiIqJMMtW6AKK38u+/QN++gKMjcPEi0KQJ8Omn\nWldFRERERG/AAEK506ZNwIQJQLduytcffAAkJADm5trWRUREREQZ4hAsyp1OnABatnzxdfXqQFiY\nZuUQERERUeaoGkDi4+PRqlUrXLhwQc1uKS9q1Qr4558XX9+6BVStql09RERERJQpqgYQCwsL2NjY\n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\nu2XLFlSvXh1TpkzBkydP9H5+IiKinCLPBRBzc3OMGDECy5YtQ7NmzXD+/HmcOHECHTp00HtfI0eO\nhI2NDb7OxRM/5syZg7CwMPj5+WV6+eLsaNeuHRwcHLB27drUY8OHD0doaCiO5MZt4zWQmJiI6Oho\n3Lp1CwBQpkwZdOzYUW/nDwkJgbOzM1q2bAknJyeEhYWhYcOGAID79+/rrZ/cJuW116xZE40aNdLb\neY8dO4aGDRtixIgRmDRpEm7cuIHChQsDAG7duoXo6GhegSIiorxF8qCzZ8+KjY2NFCxYUJydnWXq\n1Kni4+Mjv/zyi1y6dEliY2Oz3cfy5cvF1tZWrl27poeKtbF3716xtLSUgIAAVfv96quvxMHBQZKS\nklKPDRs2THr37q1qHbnR3r175d1335WSJUuKiYmJDB48WO7evauXc0dFRYm7u7uYm5tL586d5fLl\ny6n3PX/+XGbOnClWVlYyc+ZMvfSXm7z82p8/f66Xc4aFhUmvXr3E1NRUXF1d5d69e6n33b17VwYN\nGiQmJiZSsmRJqV69uuzdu1cv/eoZ2NjY2NjYstogeYxOp5Nu3bpJ7dq1ZdmyZTJlyhTp2bOnvPfe\ne1KkSBEBIACkVKlS4uTkJP3795cZM2bImjVr5NChQ3L9+nVJSEjIsI9jx46Jubm57Nq1S6VXpX+h\noaFSpEgRWbJkiep9P336VGxsbGTPnj2px06cOCGj69WTxPv3Va8nNzh9+rS0bt1arKysxNPTU6Kj\no+XSpUvSqVMnsbKyEg8PD3n69OlbnTs5OVl8fX2lVKlSUqlSJdm9e3fqfUlJSeLt7S1FixaVWrVq\nycGDB/X1knKdgwcPSq1ataRo0aLi7e2dJkBnRWxsrHh6eoq1tbU0b95cAgMDU+97+vSpeHh4iJWV\nlbz//vty6dIliY6OFk9PT7GyspLWrVvL6dOn9fSK9ELzX2JsbGxsbLmvQfKYzz77TN555x25fft2\nuvdHRkbK6dOnZceOHbJ06VJxd3cXZ2dnqVWrlhQoUEAAiImJiZQrV05atWolgwcPljlz5sj69evl\nr7/+krNnz0rZsmVl4sSJKr8y/YmPjxdHR0fp2bOn6HQ6TWpwc3OT999/P+1BJycRT09N6smpHjx4\nIC4uLmJsbCwuLi7p/lzv3r1bKlasKKVLlxZfX19JTk7O9PmPHj0qDRs2FBsbG/H29k4Tvvft2yfV\n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\nIsobGECIiIiIiEg1DCBERERERKQaBhAiIiIiIlINAwgREREREamGAYSIiIiIiFTDAEJERERERKph\nACEiIiIiItUwgBARERERkWoYQIiIiIiISDUMIEREREREpBoGECIiIiIiUg0DCBERERERqYYBhIiI\niIiIVMMAQkREREREqmEAISIiIiIi1TCAEBERERGRahhAiIiIiIhINQwgRERERESkGgYQIiIiIiJS\nDQMIERERERGphgGEiIiIiIhUwwBCRERERESqYQAhIiIiIiLVMIAQEREREZFqGECIiIiIiEg1DCBE\nRERERKQaBhAiIiIiIlINAwgREREREamGAYSIiIiIiFTDAEJERERERKphACEiIiIiItUwgBARERER\nkWoYQIiIiIiISDUMIEREREREpBoGECIiIiIiUg0DCBERERERqYYBhIiIiIiIVMMAQkREREREqmEA\nISIiIiIi1TCAEBERERGRahhAiIiIiIhINQwgRERERESkGgYQIiIiIiJSDQMIERERERGphgGEiIiI\niIhUwwBCRERERESqYQAhIiIiIiLVMIAQEREREZFqGECIiIiIiEg1DCBERERERKQaBhAiIiIiIlIN\nAwgREREREamGAYSIiIiIiFTDAEJERERERKphACEiIiIiItUwgBARERERkWoYQIiIiIiISDX/B224\nTZkLitP1AAAAAElFTkSuQmCC\n", "prompt_number": 11, "text": [ "" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Those are certainly diverse\n", "\n", "Try the same thing using the lazy picker and a user-supplied function" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def fn(i,j,fps=fps):\n", " return 1.-DataStructs.TanimotoSimilarity(fps[i],fps[j])\n", "mmp =SimDivFilters.MaxMinPicker()\n", "lazy_ids = mmp.LazyPick(fn,1000,50)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make sure the results are the same" ] }, { "cell_type": "code", "collapsed": false, "input": [ "list(lazy_ids)==list(dmat_ids)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "True" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "When working with bit vectors, a third option that can be used that includes the distance calculation directly in the C++ call. I'll show below that this makes a difference in performance.\n", "\n", "*Note* the LazyBitVectorPick call is a new addition to the RDKit. At the time of this writing it is only available in the github version of the code. It will appear in the 2014.09 release." ] }, { "cell_type": "code", "collapsed": false, "input": [ "mmp =SimDivFilters.MaxMinPicker()\n", "bv_ids = mmp.LazyBitVectorPick(fps[:1000],1000,50)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "list(bv_ids)==list(dmat_ids)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "True" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's look at the relative performance of these approaches for a subset of the data.\n", "\n", "Timing data was generated on a not-particularly-modern machine: a four-year old MacBook Pro" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mmp =SimDivFilters.MaxMinPicker()\n", "%timeit dmat_sim(fps[:2000],50)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 loops, best of 3: 1.77 s per loop\n" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "mmp =SimDivFilters.MaxMinPicker()\n", "%timeit mmp.LazyPick(fn,2000,50)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 loops, best of 3: 1.01 s per loop\n" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "mmp =SimDivFilters.MaxMinPicker()\n", "%timeit mmp.LazyBitVectorPick(fps,2000,50)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 loops, best of 3: 458 ms per loop\n" ] } ], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So we have a clear winner: the LazyBitVector picker is considerably faster than the other alternatives." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Impact of the cache" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The LazyBitVectorPicker is very runtime efficient, but the memory usage of the cache that it uses (about nPoints * nPicks * 30bytes) could theoretically cause problems for large data sets. The cache can be disabled, at the expense of substantially longer run time:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mmp =SimDivFilters.MaxMinPicker()\n", "%timeit mmp.LazyBitVectorPick(fps,2000,50,useCache=False)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 loops, best of 3: 1.37 s per loop\n" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Impact of data set size\n", "\n", "Let's look at the evolution of the run time with the number of compounds we're picking from" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for sz in range(1,11):\n", " sz*=1000\n", " print(\"Doing: %1d\"%(sz))\n", " mmp =SimDivFilters.MaxMinPicker()\n", " %timeit mmp.LazyBitVectorPick(fps,sz,50)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Doing: 1000\n", "10 loops, best of 3: 186 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 2000\n", "1 loops, best of 3: 417 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 3000\n", "1 loops, best of 3: 688 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 4000\n", "1 loops, best of 3: 955 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 5000\n", "1 loops, best of 3: 1.21 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 6000\n", "1 loops, best of 3: 1.49 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 7000\n", "1 loops, best of 3: 1.8 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 8000\n", "1 loops, best of 3: 2.34 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 9000\n", "1 loops, best of 3: 2.22 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 10000\n", "1 loops, best of 3: 2.55 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The runtime increases more or less linearly with the size of the set being picked from" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Impact of the number of points being picked" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for sz in range(1,11):\n", " sz*=20\n", " print(\"Doing: %1d\"%(sz))\n", " mmp =SimDivFilters.MaxMinPicker()\n", " %timeit mmp.LazyBitVectorPick(fps,5000,sz)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Doing: 20\n", "1 loops, best of 3: 201 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 40\n", "1 loops, best of 3: 737 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 60\n", "1 loops, best of 3: 1.69 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 80\n", "1 loops, best of 3: 3.03 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 100\n", "1 loops, best of 3: 4.78 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 120\n", "1 loops, best of 3: 6.91 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 140\n", "1 loops, best of 3: 9.64 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 160\n", "1 loops, best of 3: 12.4 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 180\n", "1 loops, best of 3: 15.8 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Doing: 200\n", "1 loops, best of 3: 20 s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 37 }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's more quadratic in the number of picks. Given the algorithm, which needs to compare each potential point to pick against all the points that have so-far been picked, this makes perfect sense." ] } ], "metadata": {} } ] }