Last active
November 15, 2022 15:34
-
-
Save cmarinbe/b026d08eaaec20bcef19 to your computer and use it in GitHub Desktop.
Checking imbalance effect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Check how imbalance of the training sample affects the performance of a BDT" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"%matplotlib inline" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# imports\n", | |
"import numpy as np\n", | |
"from collections import OrderedDict\n", | |
"\n", | |
"from sklearn import datasets\n", | |
"from sklearn.cross_validation import train_test_split\n", | |
"from sklearn.metrics import roc_curve, auc\n", | |
"\n", | |
"from scikit_learn.general_tools.compare_train_test import compare_train_test\n", | |
"from scikit_learn.imbalance.imbalance_base import plot_rocs\n", | |
"\n", | |
"# functions\n", | |
"def build_bdt(min_samples_leaf, max_depth=3,\n", | |
" alg=\"SAMME\", n_estim=100, learn_r=0.1):\n", | |
" from sklearn.tree import DecisionTreeClassifier\n", | |
" from sklearn.ensemble import AdaBoostClassifier\n", | |
" dt = DecisionTreeClassifier(max_depth=max_depth,\n", | |
" min_samples_leaf=min_samples_leaf)\n", | |
" bdt = AdaBoostClassifier(dt,\n", | |
" algorithm=alg,\n", | |
" n_estimators=n_estim,\n", | |
" learning_rate=learn_r)\n", | |
" return bdt\n", | |
"\n", | |
"def do_plots(y_test, pred, y_red, pred_red):\n", | |
" # plot bdt outputs\n", | |
" plt = compare_train_test(y_test, pred, y_red, pred_red,\n", | |
" labels=('full', 'reduced'))\n", | |
" plt.show()\n", | |
"\n", | |
" # plot rocs\n", | |
" colors = OrderedDict([('full', 'b'),\n", | |
" ('reduced', 'r')])\n", | |
"\n", | |
" plot_rocs([y_test, y_red],\n", | |
" [pred, pred_red],\n", | |
" colors)\n", | |
"\n", | |
"def roc_imabalance(n, rdm_state, plots=False):\n", | |
" # create random balanced sample\n", | |
" X, y = datasets.make_classification(n_samples=n,\n", | |
" random_state=rdm_state)\n", | |
"\n", | |
" # split samples\n", | |
" X_train,X_test,y_train,y_test=train_test_split(X, y,\n", | |
" test_size=0.33,\n", | |
" random_state=rdm_state)\n", | |
"\n", | |
" # make samples\n", | |
" n_sig_train = X_train[y_train==1].shape[0]\n", | |
" n_bkg_train = X_train[y_train==0].shape[0]\n", | |
"\n", | |
" #as samples are shulfed we just keep the first 1000 sig and bkg\n", | |
" X_sig_red = X_train[y_train==1][:1000,:]\n", | |
" y_sig_red = y_train[y_train==1][:1000]\n", | |
" n_sig_red = X_sig_red.shape[0]\n", | |
" X_bkg_red = X_train[y_train==0][:1000,:]\n", | |
" y_bkg_red = y_train[y_train==0][:1000]\n", | |
" n_bkg_red = X_bkg_red.shape[0]\n", | |
" \n", | |
" X_train_bal = np.concatenate((X_sig_red, X_bkg_red))\n", | |
" y_train_bal = np.concatenate((np.ones(n_sig_red),\n", | |
" np.zeros(n_bkg_red)))\n", | |
"\n", | |
" X_train_imbal = np.concatenate((X_train[y_train==1], X_bkg_red))\n", | |
" y_train_imbal = np.concatenate((np.ones(n_sig_train),\n", | |
" np.zeros(n_bkg_red)))\n", | |
" \n", | |
" if plots:\n", | |
" print \"n sig train balanced is: %s\" %n_sig_red\n", | |
" print \"n bkg train balanced is: %s\" %n_bkg_red\n", | |
" print \"n sig train imbalanced is: %s\" %n_sig_train\n", | |
" \n", | |
" # build bdt, train on full sample and apply\n", | |
" bdt = build_bdt(0.05*len(X_train_bal))\n", | |
" bdt.fit(X_train_bal, y_train_bal)\n", | |
" pred = bdt.predict_proba(X_test)[:,1]\n", | |
" \n", | |
" # train on reduced sample and apply\n", | |
" bdt_imbal = build_bdt(0.05*len(X_train_imbal))\n", | |
" bdt_imbal.fit(X_train_imbal, y_train_imbal)\n", | |
" pred_imbal = bdt_imbal.predict_proba(X_test)[:,1]\n", | |
" \n", | |
" # plots\n", | |
" if plots:\n", | |
" do_plots(y_test, pred, y_test, pred_imbal)\n", | |
" \n", | |
" # get roc area\n", | |
" areas = []\n", | |
" for y, dec in zip([y_test, y_test], [pred, pred_imbal]):\n", | |
" fpr, tpr, thresholds = roc_curve(y, dec)\n", | |
" roc_auc = auc(fpr, tpr)\n", | |
" areas.append(roc_auc)\n", | |
" \n", | |
" return areas" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"## Toy 0\n", | |
"n sig train balanced is: 1000\n", | |
"n bkg train balanced is: 1000\n", | |
"n sig train imbalanced is: 100483\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\nWb16tU/qS0lJISMjg7ffftsn9XnjjTfe4NVXX2XFihUUFxczePBgVqxYQZcuXdyWt2YiY3wrLS2N\ntMofssCMGTMa1EwUsOkoVDVfRFKBs1U1rXK7iLwCfOruPSkpKYEJzke+/PJLHnjgAdLT0wkNDWXA\ngAE89dRTnH322W7LT5s2jT/96U8+O763E9j5S0REBL/5zW949NFHefzxx4MaizGtReUP5UozZsxo\nUD3+Hk3URURinM+jgBHAWhHpVqXYVcDGxh5reWoqD48aRQrw8KhRLG/ACl+NqaOgoICxY8cyefJk\ncnNzyc7OZvr06URERLgtn5OTQ1paGuPGjXO7v6ysrN7xNwU33HADb775JqWlpcEOxRhTH6rqtwcw\nEEd/wTpgA/An5/a3nK/XA/OArm7eq+64275s/nydkpio6mjcUQWdkpioy+bPd1uHO42tY/Xq1RoT\nE+P18d58800dMWJEtW29evXSv//97zpw4ECNjIzU8vJyXblypZ5//vkaExOjp59+uqalpbnK//TT\nT3rxxRdrdHS0jhgxQu+++269+eabVVX1iy++0B49ehxX/2effaaqqmVlZTpz5kxNTEzU6OhoPeus\ns3TXrl2qqrp582YdPny4durUSfv166f//ve/XXUcOHBAL7/8cu3QoYOec845+vDDD+tFF11U7Th9\n+vTRZcuWuT1vT5+rMcY3nP+P1f/7uiFvCsSjPslg6siR1b7EKx8Pjxrl9R+wsXUUFBRo586dNTk5\nWRcsWKCHDh2qtfz999+vd999d7VtvXr10jPOOEOzsrK0qKhIs7KytHPnzrpgwQJVVV2yZIl27txZ\nDxw4oKqq5513nt53331aUlKiy5cv1+joaJ0wYYKquk8GCQkJunTpUlVVfeyxx3TgwIG6bds2VVXd\nsGGDHjx4UA8fPqw9evTQN954Q8vLy3Xt2rXapUsXTU9PV1XV6667Tq+77jo9evSobtq0SePi4nTo\n0KHVjnPFFVforFmz3J63JQNj/KuhyaBF3IEcVlzsdntoUVHA6oiOjubLL79ERLjjjjs48cQTufLK\nK9m3b5/b8vn5+bRv377aNhFh0qRJxMXFERERwTvvvMNll13G6NGOe/KGDx/O2WefTWpqKjt37mTN\nmjU88sgjhIeHM3ToUC6//HKvz/eVV15h5syZ9OnTB4CBAwfSqVMn5s+fT+/evUlOTiYkJITBgwdz\n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\njAH+P1X3kzoex0N8AAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x116ba4050>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n6ahTOFiWyAAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x1165ec850>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"## Toy 1\n", | |
"## Toy 2\n", | |
"## Toy 3\n", | |
"## Toy 4\n", | |
"## Toy 5\n", | |
"## Toy 6\n", | |
"## Toy 7\n", | |
"## Toy 8\n", | |
"## Toy 9\n", | |
"## Toy 10\n", | |
"## Toy 11\n", | |
"## Toy 12\n", | |
"## Toy 13\n", | |
"## Toy 14\n", | |
"## Toy 15\n", | |
"## Toy 16\n", | |
"## Toy 17\n", | |
"## Toy 18\n", | |
"## Toy 19\n", | |
"## Toy 20\n", | |
"## Toy 21\n", | |
"## Toy 22\n", | |
"## Toy 23\n", | |
"## Toy 24\n", | |
"## Toy 25\n", | |
"## Toy 26\n", | |
"## Toy 27\n", | |
"## Toy 28\n", | |
"## Toy 29\n", | |
"## Toy 30\n", | |
"## Toy 31\n", | |
"## Toy 32\n", | |
"## Toy 33\n", | |
"## Toy 34\n", | |
"## Toy 35\n", | |
"## Toy 36\n", | |
"## Toy 37\n", | |
"## Toy 38\n", | |
"## Toy 39\n", | |
"## Toy 40\n", | |
"## Toy 41\n", | |
"## Toy 42\n", | |
"## Toy 43\n", | |
"## Toy 44\n", | |
"## Toy 45\n", | |
"## Toy 46\n", | |
"## Toy 47\n", | |
"## Toy 48\n", | |
"## Toy 49\n", | |
"## Toy 50\n", | |
"## Toy 51\n", | |
"## Toy 52\n", | |
"## Toy 53\n", | |
"## Toy 54\n", | |
"## Toy 55\n", | |
"## Toy 56\n", | |
"## Toy 57\n", | |
"## Toy 58\n", | |
"## Toy 59\n", | |
"## Toy 60\n", | |
"## Toy 61\n", | |
"## Toy 62\n", | |
"## Toy 63\n", | |
"## Toy 64\n", | |
"## Toy 65\n", | |
"## Toy 66\n", | |
"## Toy 67\n", | |
"## Toy 68\n", | |
"## Toy 69\n", | |
"## Toy 70\n", | |
"## Toy 71\n", | |
"## Toy 72\n", | |
"## Toy 73\n", | |
"## Toy 74\n", | |
"## Toy 75\n", | |
"## Toy 76\n", | |
"## Toy 77\n", | |
"## Toy 78\n", | |
"## Toy 79\n", | |
"## Toy 80\n", | |
"## Toy 81\n", | |
"## Toy 82\n", | |
"## Toy 83\n", | |
"## Toy 84\n", | |
"## Toy 85\n", | |
"## Toy 86\n", | |
"## Toy 87\n", | |
"## Toy 88\n", | |
"## Toy 89\n", | |
"## Toy 90\n", | |
"## Toy 91\n", | |
"## Toy 92\n", | |
"## Toy 93\n", | |
"## Toy 94\n", | |
"## Toy 95\n", | |
"## Toy 96\n", | |
"## Toy 97\n", | |
"## Toy 98\n", | |
"## Toy 99\n", | |
"### Results\n", | |
"Mean area with full set is: 0.9729 +- 0.0142\n", | |
"Mean area with redu set is: 0.9694 +- 0.0142\n" | |
] | |
} | |
], | |
"source": [ | |
"# run toys\n", | |
"n_toys = 100\n", | |
"n_samples = 300000\n", | |
"rdm_state = 500\n", | |
"plots = True\n", | |
"\n", | |
"areas = {'balanced': [], 'imbalanced': []}\n", | |
"for i in range(n_toys):\n", | |
" print \"## Toy %s\" %i\n", | |
" if i>0: plots = False\n", | |
" a_bal, a_imbal = roc_imabalance(n_samples, rdm_state, plots)\n", | |
" areas['balanced'].append(a_bal)\n", | |
" areas['imbalanced'].append(a_imbal)\n", | |
" rdm_state += 1\n", | |
"\n", | |
"print \"### Results\"\n", | |
"print \"Mean area with balanced set is: %0.4f +- %0.4f\" %(np.mean(areas['balanced']), np.std(areas['balanced']))\n", | |
"print \"Mean area with imbalanced set is: %0.4f +- %0.4f\" %(np.mean(areas['imbalanced']), np.std(areas['imbalanced']))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"### Results\n", | |
"Mean area with balanced set is: 0.9729 +- 0.0142\n", | |
"Mean area with imbalanced set is: 0.9694 +- 0.0142\n" | |
] | |
} | |
], | |
"source": [ | |
"print \"### Results\"\n", | |
"print \"Mean area with balanced set is: %0.4f +- %0.4f\" %(np.mean(areas['balanced']), np.std(areas['balanced']))\n", | |
"print \"Mean area with imbalanced set is: %0.4f +- %0.4f\" %(np.mean(areas['imbalanced']), np.std(areas['imbalanced']))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This shows that a factor 1:100 of imbalance in the training sample does not degrade (or at least, not significantly) the performance of a BDT." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 2", | |
"language": "python", | |
"name": "python2" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 2 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython2", | |
"version": "2.7.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment