Skip to content

Instantly share code, notes, and snippets.

@betatim
Last active February 21, 2016 10:13
Show Gist options
  • Save betatim/b058950c1941b4e4bef7 to your computer and use it in GitHub Desktop.
Save betatim/b058950c1941b4e4bef7 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": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"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.model_selection 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": 3,
"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": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Counter({0: 20828, 1: 179172})"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c = Counter(y)\n",
"c"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"((41656, 20), (41656,))"
]
},
"execution_count": 5,
"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": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n2kB1SxtSmtwnwbwDSHMks9ptajvXLh/DVCocuSUhb968ibe3N5MnTzYpM3XqVJKSktDpdKxevZrD\nhw/ToUMH7t+/z7vvvqtICq5YscJEejCnoyhLVq5cyYgRI0pU91GRkvzpp59YunQpe/fu5cqVK/z1\n118F5mY6f/48ISEhhIeHk5iYSK9evXj22WdNsn127tzZRA4yt9qXEIJVq1aZ/Z2NHDnSRC5y+fLl\n1K9fX3ES//73vzlx4gRnz54lOjoaR0dH3njjDaV+cHAwq1evLtPvtThvAicIIeKNWyKwC3i3qHqP\nEjHR+3A04wDSU20Rtndo6hpYPoaVIup7AKVHTmdha2vLkCFDOHfunNlytra2tGrVis2bNxMXF8fq\n1auLvPalS5fQ5ElHkjusEx4eTpcuXXjzzTdxc3MjMDCQXbt2mZS/cOECrVu3xs3NjcGDB5OUlGT2\nXleuXCE6OponnnhCObZlyxZatGiBVqulVq1aimJZbtu+/PJLAgIC6NWrFwAHDhygffv2uLm50bJl\nS/bv36/UCQ8Pp1GjRri4uPD4448THh5e5HfwoERERDBu3Djq1auHq6srs2bNKvC73rFjB127dqVt\n27ZoNBreffddrly58kASl7mdRWF89dVXJmphV69epXfv3nh4eGBnZ8fzzz9vonhWs2ZNnJycOHr0\naLFteViKEoUXQBDgZdzcpCFz53dlYZylyOAujlZ5HEBsLBlZd8mQdrR1rVADGpVHhHv37vHtt98q\nOfcLwsnJiR49eph0jIVR1HLkQ4cOERQURHx8PFOmTFGyYOawZs0a1q5dS0xMDHq9nilTppi9zqlT\np6hbt67J/ZydnVm3bh1JSUls2bKF5cuXs23bNpN6+/fv5/z58/z0009ERUXx7LPPsmDBAhISEvjg\ngw8YNGiQEsv28fFh+/btJCcnExYWxuTJkzl9+rRZe/bt21eolGRBHeOZM2cICgpS9oOCgoiJickn\nkmOOnM48t03Hjh3D29ubhg0bsmjRonxykG+//Tbe3t507ty5wN/ppUuXOHTokMno6uWXX2bfvn3c\nunWL1NRU1q1bly/ra4MGDTh58mSRdluKQh2AMZPcNilltnErXymmElLN38fUAUgJOh1p8g5x0pP6\nDg7lZ1wpUannAISwzFZCBg4ciLu7O66urvz888+89dZbRdbx9fUlPj6+xPfMTd26dQkJCUEIQUhI\n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\nB6tDAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x104853630>"
]
},
"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.9,\n",
" random_state=492)\n",
"\n",
" # build classifiers\n",
" dt = DecisionTreeClassifier(max_depth=3)\n",
" bdt = AdaBoostClassifier(dt,\n",
" algorithm='SAMME',\n",
" n_estimators=5,\n",
" learning_rate=0.5, random_state=35)\n",
"\n",
" rf = RandomForestClassifier(n_estimators=5,\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": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (sklearn env)",
"language": "python",
"name": "python3-sklearn-dev"
},
"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