{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2018.09.1\n" ] } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import os\n", "import numpy as np\n", "from rdkit import Chem\n", "from rdkit import rdBase\n", "from rdkit.Chem import AllChem\n", "from rdkit.Chem import DataStructs\n", "from rdkit.Chem import RDConfig\n", "from rdkit.Chem import rdFingerprintGenerator\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.ensemble import ExtraTreesClassifier\n", "from sklearn.ensemble import GradientBoostingClassifier\n", "from sklearn.svm import SVC\n", "from xgboost import XGBClassifier\n", "from sklearn.metrics import classification_report\n", "from sklearn.metrics import confusion_matrix\n", "# This is new class for blending\n", "from blending_classification import BlendingClassifier\n", "\n", "datadir = os.path.join(RDConfig.RDDocsDir, \"Book/data\")\n", "print(rdBase.rdkitVersion)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def mols2feat(mols):\n", " generator = rdFingerprintGenerator.GetMorganGenerator(radius=2)\n", " res = []\n", " for mol in mols:\n", " fp = generator.GetFingerprint(mol)\n", " arr = np.zeros(0,)\n", " DataStructs.ConvertToNumpyArray(fp, arr)\n", " res.append(arr)\n", " return res" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# load train and test data\n", "train_mol = [ mol for mol in Chem.SDMolSupplier(os.path.join(datadir,'solubility.train.sdf')) if mol != None]\n", "test_mol = [ mol for mol in Chem.SDMolSupplier(os.path.join(datadir,'solubility.test.sdf')) if mol != None]\n", "\n", "cls = list(set([mol.GetProp('SOL_classification') for mol in train_mol]))\n", "cls_dic = {}\n", "for i, cl in enumerate(cls):\n", " cls_dic[cl] = i\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# make train X, y and test X, y\n", "train_X = np.array(mols2feat(train_mol))\n", "train_y = np.array([cls_dic[mol.GetProp('SOL_classification')] for mol in train_mol])\n", "\n", "test_X = np.array(mols2feat(test_mol))\n", "test_y = np.array([cls_dic[mol.GetProp('SOL_classification')] for mol in test_mol])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "rf = RandomForestClassifier(n_estimators=100, n_jobs=-1)\n", "et = ExtraTreesClassifier(n_estimators=100, n_jobs=-1)\n", "gbc = GradientBoostingClassifier(learning_rate=0.01)\n", "xgbc = XGBClassifier(n_estimators=100, n_jobs=-1)\n", "# To use SVC, probability option must be True\n", "svc = SVC(probability=True, gamma='auto')\n", "\n", "l1_clfs = [rf, et, gbc, xgbc]\n", "l2_clf = RandomForestClassifier(n_estimators=100, n_jobs=-1)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "blendclf = BlendingClassifier(l1_clfs, l2_clf, verbose=1)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting 4 l1_classifiers...\n", "3 classes classification\n", "1-1th hold, classifier\n", "1-2th hold, classifier\n", "1-3th hold, classifier\n", "1-4th hold, classifier\n", "1-5th hold, classifier\n", "2-1th hold, classifier\n", "2-2th hold, classifier\n", "2-3th hold, classifier\n", "2-4th hold, classifier\n", "2-5th hold, classifier\n", "3-1th hold, classifier\n", "3-2th hold, classifier\n", "3-3th hold, classifier\n", "3-4th hold, classifier\n", "3-5th hold, classifier\n", "4-1th hold, classifier\n", "4-2th hold, classifier\n", "4-3th hold, classifier\n", "4-4th hold, classifier\n", "4-5th hold, classifier\n", "--- Blending ---\n", "(1025, 4, 3)\n" ] }, { "data": { "text/plain": [ "BlendingClassifier(l1_clfs=[RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n", " max_depth=None, max_features='auto', max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fract...state=0, reg_alpha=0, reg_lambda=1, scale_pos_weight=1,\n", " seed=None, silent=True, subsample=1)],\n", " l2_clf=RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n", " max_depth=None, max_features='auto', max_leaf_nodes=None,\n", " min_impurity_decrease=0.0, min_impurity_split=None,\n", " min_samples_leaf=1, min_samples_split=2,\n", " min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=-1,\n", " oob_score=False, random_state=None, verbose=0,\n", " warm_start=False),\n", " n_hold=5, random_state=794, test_size=0.2, use_clones=True,\n", " verbose=1)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "blendclf.fit(train_X, train_y)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "pred_y = blendclf.predict(test_X)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 0.51 0.72 0.60 40\n", " 1 0.68 0.53 0.60 115\n", " 2 0.74 0.79 0.76 102\n", "\n", " micro avg 0.67 0.67 0.67 257\n", " macro avg 0.64 0.68 0.65 257\n", "weighted avg 0.67 0.67 0.66 257\n", "\n" ] } ], "source": [ "print(classification_report(test_y, pred_y))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(
,\n", " )" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from mlxtend.plotting import plot_confusion_matrix\n", "cm = confusion_matrix(test_y, pred_y)\n", "plot_confusion_matrix(cm)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 0.81 0.81 0.81 102\n", " 1 0.77 0.75 0.76 115\n", " 2 0.72 0.78 0.75 40\n", "\n", " micro avg 0.78 0.78 0.78 257\n", " macro avg 0.77 0.78 0.77 257\n", "weighted avg 0.78 0.78 0.78 257\n", "\n" ] } ], "source": [ "mono_rf = RandomForestClassifier(n_estimators=100, n_jobs=-1)\n", "mono_rf.fit(train_X, train_y)\n", "pred_y2 = mono_rf.predict(test_X) \n", "print(classification_report(test_y, pred_y2))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(
,\n", " )" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cm2 = confusion_matrix(test_y, pred_y2)\n", "plot_confusion_matrix(cm2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }