Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ibab/96b31f83b6998e7a5263 to your computer and use it in GitHub Desktop.
Save ibab/96b31f83b6998e7a5263 to your computer and use it in GitHub Desktop.
Balanced or unbalanced? Does it make a difference for a tree based classifier if the two classes are balanced or not?
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from collections import Counter\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from sklearn import datasets\n",
"from sklearn.cross_validation import train_test_split\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.ensemble import AdaBoostClassifier, RandomForestClassifier\n",
"from sklearn.metrics import roc_curve, auc, roc_auc_score"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"X, y = datasets.make_classification(n_samples=200000,\n",
" weights=[0.1],\n",
" random_state=500)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Counter({0: 20828, 1: 179172})"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c = Counter(y)\n",
"c"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"((41656, 20), (41656,))"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# take as many class1 samples as there are in class0\n",
"# samples are shuffled so we can take the first\n",
"X_bal_1 = X[y==1][:c[0]]\n",
"X_bal = np.vstack([X[y==0], X_bal_1])\n",
"y_bal = np.hstack([np.ones(c[0]), np.zeros(c[0])])\n",
"X_bal.shape, y_bal.shape"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nVatWNectIjz88MPk5+dTVlbGcccdR1xcHMOGDWtOv2nTJsaNG9ehLr1FVx3AgvDn5+Hzz1scCzpM\ncRATMoM4Qx30W9XV1BHADHl7XylNv8bv9/PGG29QUlJCTk5OO3lVVRVfffUVP/nJT/B6vVx77bXd\nznvWrFkUFxezZs0annrqKS66yNp+q7a2FrfbjdfrZc2aNTz55JPdzvO0005r1VHV1tbicrmIjY1l\nz5493HPPPV2mP+KII8jOzuaOO+5gz5491NXVsXz5cr7++mvA6uhiYmJwuVwsXryY559/vtO8WpqA\nWh77MgFddNFFLFmyhLfffpvS0lLuueceTjnllOYOsi3Lly+noqKCsrIyHnvsMdavX88NN9wAwNdf\nf823335LfX09eXl5XH/99Rx11FHNbz0zZszg1VdfZdmyZVRUVDBr1ixOOukkvF6rrfjmm2+oqamh\nqKiIW2+9lZiYGM477zwAKioqWLNmDY2NjSxbtowbb7yR++67D4djrwl64cKF/PjHP+7ynkeczqYH\nHWwHP3Aa6L3/XaC8D6a2F157rZp335XqzRfOO+D8D0b0NNDIMG7cOGUYhjIMQ7ndbjV27Fj10ksv\nNctnzpzZLPd6vSonJ0fdeeedqqysrF1eXU0DnTNnjsrMzFSpqanq/vvvb5avXLlSTZgwQXk8HjV5\n8mT12GOPtcrDMIxOp4H6/X6VlZWlioqKlFLWNNUzzzxTeb1eNXz4cPWPf/xDGYbRPOVzypQp6v33\n32+VR3FxsbrssstUWlqaio+PV1OmTFGffPKJUkqpTz/9VI0cOVJ5PB41bdo0de+996rLL798f25v\nt3j33XfVsGHDlMfjUWeccYYqKCholt1www2tynzggQdUYmKi8nq96rTTTlMbNmxols2dO1eNHj1a\neb1elZaWpi666CK1a9euVmX96U9/UhkZGSohIUGde+65avfu3c2yq6++WsXFxam4uDg1ffr0Vnps\n375d5eTkKJfLpQYPHqwee+yxVvmuX79ejRgxosfuiVIHNg1U1D5eH0VkGrBeKbVTRK4ATgWeUEqt\njnDf1FYPtS9dO2PBggW8+K/hvJM4hapZea2FV1zBR5O2UBo7mUuu6pav+37BggUL+q0ZSES6bdbQ\n7B9PP/00u3fv5tFHH+1rVaKa6667jhNPPLF5ULkn6Ox/E77e4bSH7uwF9CxwrIhkYg0CLwL+gbUz\n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\nQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3839fa20b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def train_and_test(X, y, label=\"\"):\n",
" # build datasets and evaluate clasifiers\n",
" # keep the training set fairly small but use a very\n",
" # large testing set. This is an attempt at making the\n",
" # problem \"harder\"\n",
" X_train, X_test, y_train, y_test = train_test_split(X, y,\n",
" test_size=0.5,\n",
" random_state=492)\n",
"\n",
" # build classifiers\n",
" dt = DecisionTreeClassifier(max_depth=3)\n",
" bdt = AdaBoostClassifier(dt,\n",
" algorithm='SAMME.R',\n",
" n_estimators=100,\n",
" learning_rate=0.1, random_state=35)\n",
"\n",
" rf = RandomForestClassifier(n_estimators=100,\n",
" max_depth=3,\n",
" random_state=34,\n",
" n_jobs=5)\n",
"\n",
" bdt.fit(X_train, y_train)\n",
" bdt_dec_test = bdt.predict_proba(X_test)[:, 1]\n",
"\n",
" rf.fit(X_train, y_train)\n",
" rf_dec_test = rf.predict_proba(X_test)[:, 1]\n",
"\n",
" return (\"BDT\"+label, y_test, bdt_dec_test), (\"RF\"+label, y_test, rf_dec_test)\n",
"\n",
"def plot(*args):\n",
" # plot rocs\n",
" for (label, y_true, decision) in args:\n",
" fpr, tpr, thresholds_w = roc_curve(y_true, decision)\n",
" roc_auc = auc(fpr, tpr)\n",
" plt.plot(fpr, tpr, label='%s (area = %0.5f)'%(label, roc_auc))\n",
"\n",
" plt.xlim([-0.05, 1.05])\n",
" plt.ylim([-0.05, 1.05])\n",
" plt.xlabel('False Positive Rate')\n",
" plt.ylabel('True Positive Rate')\n",
" plt.title('Receiver operating characteristic')\n",
" plt.legend(loc=\"best\")\n",
" plt.grid()\n",
" \n",
"balanced = train_and_test(X_bal, y_bal, \"bal\")\n",
"unbalanced = train_and_test(X, y, \"unb\")\n",
"# create an unbalanced dataset limited in\n",
"# size to the balanced dataset\n",
"X_lim = X[:2*c[0]]\n",
"y_lim = y[:2*c[0]]\n",
"unbalanced_limited = train_and_test(X_lim, y_lim, \"unb-l\")\n",
"\n",
"plot(*balanced, *unbalanced, *unbalanced_limited)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment