1542 lines
210 KiB
Plaintext
1542 lines
210 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Decision trees, overarching aims\n",
|
||
"\n",
|
||
"\n",
|
||
"We start here with the most basic algorithm, the so-called decision\n",
|
||
"tree. With this basic algorithm we can in turn build more complex\n",
|
||
"networks, spanning from homogeneous and heterogenous forests (bagging,\n",
|
||
"random forests and more) to one of the most popular supervised\n",
|
||
"algorithms nowadays, the extreme gradient boosting, or just\n",
|
||
"XGBoost. But let us start with the simplest possible ingredient.\n",
|
||
"\n",
|
||
"Decision trees are supervised learning algorithms used for both,\n",
|
||
"classification and regression tasks.\n",
|
||
"\n",
|
||
"\n",
|
||
"The main idea of decision trees\n",
|
||
"is to find those descriptive features which contain the most\n",
|
||
"**information** regarding the target feature and then split the dataset\n",
|
||
"along the values of these features such that the target feature values\n",
|
||
"for the resulting underlying datasets are as pure as possible.\n",
|
||
"\n",
|
||
"The descriptive features which reproduce best the target/output features are normally said\n",
|
||
"to be the most informative ones. The process of finding the **most\n",
|
||
"informative** feature is done until we accomplish a stopping criteria\n",
|
||
"where we then finally end up in so called **leaf nodes**. \n",
|
||
"\n",
|
||
"## Basics of a tree\n",
|
||
"\n",
|
||
"A decision tree is typically divided into a **root node**, the **interior nodes**,\n",
|
||
"and the final **leaf nodes** or just **leaves**. These entities are then connected by so-called **branches**.\n",
|
||
"\n",
|
||
"The leaf nodes\n",
|
||
"contain the predictions we will make for new query instances presented\n",
|
||
"to our trained model. This is possible since the model has \n",
|
||
"learned the underlying structure of the training data and hence can,\n",
|
||
"given some assumptions, make predictions about the target feature value\n",
|
||
"(class) of unseen query instances.\n",
|
||
"\n",
|
||
"\n",
|
||
"## General Features\n",
|
||
"\n",
|
||
"The overarching approach to decision trees is a top-down approach.\n",
|
||
"\n",
|
||
"* A leaf provides the classification of a given instance.\n",
|
||
"\n",
|
||
"* A node specifies a test of some attribute of the instance.\n",
|
||
"\n",
|
||
"* A branch corresponds to a possible values of an attribute.\n",
|
||
"\n",
|
||
"* An instance is classified by starting at the root node of the tree, testing the attribute specified by this node, then moving down the tree branch corresponding to the value of the attribute in the given example.\n",
|
||
"\n",
|
||
"This process is then repeated for the subtree rooted at the new\n",
|
||
"node.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"In simplified terms, the process of training a decision tree and\n",
|
||
"predicting the target features of query instances is as follows:\n",
|
||
"\n",
|
||
"1. Present a dataset containing of a number of training instances characterized by a number of descriptive features and a target feature\n",
|
||
"\n",
|
||
"2. Train the decision tree model by continuously splitting the target feature along the values of the descriptive features using a measure of information gain during the training process\n",
|
||
"\n",
|
||
"3. Grow the tree until we accomplish a stopping criteria create leaf nodes which represent the *predictions* we want to make for new query instances\n",
|
||
"\n",
|
||
"4. Show query instances to the tree and run down the tree until we arrive at leaf nodes\n",
|
||
"\n",
|
||
"Then we are essentially done!"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"2nd degree coefficients:\n",
|
||
"zero power: -1.3439564710454786\n",
|
||
"first power: 0.020404272938413143\n",
|
||
"second power: 0.0001539814498783133\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_1_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAHFCAYAAAAKbwgcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAACPlklEQVR4nO3dd3wU1drA8d/sphfCJpBkQ01AAUNNUJpKiSgoKqJYuIqoVwXbBXvvihfLa8UG14B6pajotYCIAqJSE2ooQhL6JpGwSUhI33n/CJnMJpu+m2ST5+snn+zMnDlzZnZknpxz5hxFVVUVIYQQQgg3Z2juAgghhBBCOIMENUIIIYRoFSSoEUIIIUSrIEGNEEIIIVoFCWqEEEII0SpIUCOEEEKIVkGCGiGEEEK0ChLUCCGEEKJVkKBGCCGEEK2CBDVC1FN8fDyKomg/Pj4+hIeHM3r0aGbPnk1GRoZLj3/w4EEURSE+Pr5e+02bNo3u3bu7pEw1HVN/rar7mTZtWpOWq7LK5WnXrh3Dhw/niy++aNZyNaWG3ldCtCSKTJMgRP3Ex8dzyy238Mknn9C7d2+Ki4vJyMjg999/55NPPsFoNLJ48WIuuugilxy/sLCQrVu30qNHDzp27Fjn/ZKTk8nJyWHQoEEuKVd1x/z777+15cTERO6++25efvllRo8era3v2LEjPXr0aLJyVaYoCtdccw0PPPAAqqqSmprKyy+/TFJSEp9//jlTpkxptrI1lYbeV0K0JBLUCFFP5UHN5s2bGTx4sN22w4cPc/7555OVlcX+/fsJCwtrplK2TGvWrGH06NEsXbqUa665ptp0+fn5+Pj4oChKk5RLURTuvvtu3n33XW3doUOH6N69OxdeeCFr165tknKUO336NH5+fk16TCFaA2l+EsKJunbtyuuvv86pU6f48MMP7bZt2bKFK664guDgYHx8fBg0aBBLliypksexY8e444476NKlC15eXkRERHDNNdeQnp4OOG4m+Pvvv7V9vL296dixIyNGjGDVqlVaGkfNTwUFBTz22GNERkbi5eVFp06duPvuu8nKyrJL1717dyZMmMCKFSuIiYnB19eX3r1785///KdxF4yK5ryVK1dy66230rFjR/z8/CgsLARg8eLFDBs2DH9/fwICArjkkkvYunVrlXzqen3rqlu3bnTs2FG77uVycnJ48MEH7a7ZzJkzycvLs0uXlZXFbbfdRnBwMAEBAVx22WWkpKSgKArPPvuslu7ZZ59FURQSExO55pprMJlMWq2VqqrMnTuXgQMH4uvri8lk4pprriElJcXuWFu3bmXChAmEhobi7e1NREQEl112GUePHtXSLF26lCFDhhAUFISfnx9RUVHceuut2vbqmp9+//134uLiCAwMxM/Pj+HDh/PDDz/YpSn/DlevXs2MGTPo0KEDISEhTJo0iePHj9f72gvRUBLUCOFkl156KUajkd9++01bt3r1akaMGEFWVhYffPAB3377LQMHDuS6666ze4gcO3aMc889l2XLlnH//fezfPly3nzzTYKCgrBardUe86abbuKbb77h6aefZuXKlcybN4+LLrqIzMzMavdRVZWJEyfy2muvcdNNN/HDDz9w//33s2DBAsaMGaMFFeW2b9/OAw88wKxZs/j222/p378/t912m915Nsatt96Kp6cnn376KV9++SWenp68/PLL3HDDDZxzzjksWbKETz/9lFOnTnHBBRewe/dubd+6Xt/6yM7O5uTJk5x99tnautOnTzNy5EgWLFjAfffdx/Lly3nkkUeIj4/niiuuoLzi22azcfnll/Pf//6XRx55hGXLljFkyBDGjRtX7fEmTZpEz549Wbp0KR988AEAd955JzNnzuSiiy7im2++Ye7cuSQlJTF8+HAt2MrLy2Ps2LGkp6fz3nvv8fPPP/Pmm2/StWtXTp06BcD69eu57rrriIqKYtGiRfzwww88/fTTlJSU1HgN1q5dy5gxY8jOzmb+/Pl88cUXBAYGcvnll7N48eIq6f/5z3/i6enJf//7X+bMmcOaNWu48cYb63fhhWgMVQhRL5988okKqJs3b642TVhYmNqnTx9tuXfv3uqgQYPU4uJiu3QTJkxQzWazWlpaqqqqqt56662qp6enunv37mrzTk1NVQH1k08+0dYFBASoM2fOrLHcN998s9qtWzdtecWKFSqgzpkzxy7d4sWLVUD96KOPtHXdunVTfXx81EOHDmnr8vPz1eDgYPXOO++s8bh6q1evVgF16dKl2rry6zl16lS7tIcPH1Y9PDzUe++91279qVOn1PDwcPXaa6/V1tX1+lYHUO+66y61uLhYLSoqUv/66y/1iiuuUAMDA9UtW7Zo6WbPnq0aDIYq3/2XX36pAuqPP/6oqqqq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0iQWLlwIQFpaGmazmfXr1zN06NAqedx9992kp6fz5ZdfauteffVV5syZww033MDSpUvZuXMnHTp0qLU8U6ZMwWq1ajVDANdffz0rVqwgKysLgAsvvJDx48fz2GOPaWk+++wzHn74YY4fPw6U/Y8xffp03n//fS3N0KFDiYmJYe7cuRw8eJDIyEi2bt3KwIEDtTTTpk1jzZo1JCcnYzQaAbj22msxGAwsWrQIgIyMDHJycmo8j+7du+PhUbV1Njk5mZiYGF5//XX++c9/Vru/w/tJCCHc1OYVm8kbX9bctP+y/YzqOYpjbx0DwPxPM5Z5FgBMY00MWDnA6cev6fmtJ31qapKWBseONXcpatW/f3/ts9FoJCQkhH79+mnrwsLCgLKHOcAHH3zAvHnzOHToEPn5+RQVFdkFBgAPPPAA3377Le+88w7Lly+vU0ADsGfPHq666iq7dcOGDWPFihXackJCAps3b7armSktLaWgoIDTp0/j5+en7Vc5n7p0DI6OjtYCGgCz2czOnTu15dDQUEJDQ+t0PnrHjx9n3LhxTJ48ucaARgghWh1d61Pl5qfygAZo9j41EtTUJDzcLY7r6elpt6woit268upAm83GkiVLmDVrFq+//jrDhg0jMDCQV199lY0bN9rlkZGRwb59+zAajezfv59x4+o2kFJdKv5sNhvPPfcckyZNqrKttlqNulRtOroe+vbg6dOn89lnn9WYx+7du+natau2fPz4cUaPHs2wYcP46KOPai2DEEK0Jvq3nzBA+1HtOfr60Srp2o9q33SFckCCmprUsQnInaxbt47hw4dz1113aeuSk5OrpLv11lvp27cvt99+O7fddhtxcXGcc845teZ/zjnnsGHDBrt1lZdjYmLYt28fPXv2rDGvDRs2MHXqVLvlQYPKXhX08vICymp46uv555/nwQcfrDFNRESE9vnYsWOMHj2a2NhYPvnkEwwG6YomhGhb9G8/oUCHCR04d9e5nN5/WlvtFe5FuyHVNw01BQlq2piePXuycOFCfvrpJyIjI/n000/ZvHmz9jYRwHvvvcf69evZsWMHXbp0Yfny5fzjH/9g48aNWjBRnfvuu4/hw4czZ84cJk6cyMqVK+2angCefvppJkyYQJcuXZg8eTIGg4EdO3awc+dOu07FS5cuZfDgwZx//vl8/vnnbNq0ifnz5wNlTUi+vr6sWLGCzp074+PjQ1BQUJ2uQX2an44fP86oUaPo2rUrr732Gn///be2Lby5avKEEKKJVa6pAfCP9sc/2r95ClQN+ZOzjZk+fTqTJk3iuuuuY8iQIWRmZtrV2uzdu5eHHnqIuXPn0qVLF6AsyMnKyuKpp56qNf+hQ4cyb9483nnnHQYOHMjKlSt58skn7dJccsklfP/99/z888+ce+65DB06lDfeeINu3brZpXvuuedYtGgR/fv3Z8GCBXz++edabZGHhwdvv/02H374IREREVx55ZWNvTQOrVy5kgMHDvDrr7/SuXNnzGaz9iOEEG1GpT41LVWLefvpt99+49VXXyUhIQGLxcKyZcvshrufNm0aCxYssNtnyJAhVZo2alLvt59Es1EUpco94E7kfhJCtCa/L/mdkuvKxhLbf+1+bl9c+xAfzlTXt59aTLyVl5fHgAEDePfdd6tNM27cOCwWi/bz448/NmEJhRBCiLap8jg1LVWL6VMzfvx4xo8fX2Mab29v6cfQzMaPH6+NiVPZ448/zuOPP97EJRJCCOFMthIbmd9mcnLnSY5mHqXP9X0o/KgQj/KQoWLEDKxWKwkJCcTGxmIymRxn2IRaTFBTF2vWrCE0NJT27dszcuRIXnrppRo7fBYWFlJYWKgt1zbgmqjdvHnzyM/Pd7jNmaPstpBWUSGEaHPSF6Sz75/7ADBi5K93/6oIaKh469RqtRIdHY3FYsFsNpOUlNTsgY3bBDXjx49n8uTJdOvWjdTUVJ566inGjBlDQkIC3t7eDveZPXs2zz33XBOXtHXr1KlTcxdBCCGEC+XuyK1x+/7O+wG0PrAAFouFxMRE4uLiXF6+mrSYPjW1ue6667jsssvo27cvl19+OcuXL+evv/7ihx9+qHafxx57jOzsbO3nyJEjTVhiIYQQwg3Zqt809e6pqKPLatJjY2O1N0EjIiKIiYlpitLVyG1qaiozm81069aN/fv3V5vG29u72locIYQQQlRlN9Cezl/hf3Gk4xF8fXwBMJlMJCUlkZiYSExMTLM3PYEbBzWZmZkcOXJExgsRQgghnKmamhpVKQt2DEpFI4/JZGr2Jie9FhPU5ObmcuDAAW05NTWVbdu2ERwcTHBwMM8++yxXX301ZrOZgwcP8vjjj9OhQ4cqkycKIYQQouHSctIcrrcpZdFOXebgay4tJqjZsmULo0eP1pbvv/9+AG6++Wbef/99du7cycKFC8nKysJsNjN69GgWL15MYGBgcxVZCCGEaHVST6bSjW5V1pfX1HQN6lplW0vRYoKaUaNG1fga708//dSEpRHOFB8fz8yZM8nKynL5saZNm0ZWVhbffPONy48lhBCtkd08TzohASG8MPoFpvSb0sQlqju3eftJCL2DBw+iKArbtm1z+bG6d++Ooih2P48++qjLjyuEEM2imj41Z3U4iycvfBI/T7+mLU89tJiaGiFasueff57bb6+Y6yQgIKAZSyOEEK5T3dtPiqHl9qUpJzU1bm7UqFHce++9zJw5E5PJRFhYGB999BF5eXnccsstBAYG0qNHD5YvXw6UjQR52223ERkZia+vL7169eKtt97S8isoKCA6Opo77rhDW5eamkpQUBAff/xxncoUHx9P165d8fPz46qrriIzM7NKmu+++47Y2Fh8fHyIioriueeeo6SkRNuuKArvv/8+48ePx9fXl8jISJYuXaptj4yMBGDQoEEoisKoUaPs8n/ttdcwm82EhIRw9913U1xcXKeyVycwMJDw8HDtR4IaIUSrVd04NW4QMbhBEUVtFixYQIcOHdi0aRP33nsvM2bMYPLkyQwfPpzExEQuueQSbrrpJk6fPo3NZqNz584sWbKE3bt38/TTT/P444+zZMkSAHx8fPj8889ZsGAB33zzDaWlpdx0002MHj3arqaiOhs3buTWW2/lrrvuYtu2bYwePZoXX3zRLs1PP/3EjTfeyH333cfu3bv58MMPiY+P56WXXrJL99RTT3H11Vezfft2brzxRm644Qb27NkDwKZNmwBYtWoVFouFr7/+Wttv9erVJCcns3r1ahYsWEB8fDzx8fHa9unTpxMQEFDjz+HDh+3K8u9//5uQkBAGDhzISy+9RFFRUd2/ICGEcCPV9W91h5oaRW1Dk+zUNHV5QUEBqampREZG4uPjA8DgjwaTluv41TZXCg8IZ8sdW+qUdtSoUZSWlmqTTJaWlhIUFMSkSZNYuHAhAGlpaZjNZtavX8/QoUOr5HH33XeTnp7Ol19+qa179dVXmTNnDjfccANLly5l586ddOjQodbyTJkyBavVqtUMAVx//fWsWLFC6yh84YUXMn78eB577DEtzWeffcbDDz/M8ePHgbKamunTp/P+++9raYYOHUpMTAxz587l4MGD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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_1_2.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"%matplotlib inline\n",
|
||
"\n",
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.preprocessing import PolynomialFeatures\n",
|
||
"from sklearn.linear_model import LinearRegression\n",
|
||
"\n",
|
||
"steps=250\n",
|
||
"\n",
|
||
"distance=0\n",
|
||
"x=0\n",
|
||
"distance_list=[]\n",
|
||
"steps_list=[]\n",
|
||
"while x<steps:\n",
|
||
" distance+=np.random.randint(-1,2)\n",
|
||
" distance_list.append(distance)\n",
|
||
" x+=1\n",
|
||
" steps_list.append(x)\n",
|
||
"plt.plot(steps_list,distance_list, color='green', label=\"Random Walk Data\")\n",
|
||
"\n",
|
||
"steps_list=np.asarray(steps_list)\n",
|
||
"distance_list=np.asarray(distance_list)\n",
|
||
"\n",
|
||
"X=steps_list[:,np.newaxis]\n",
|
||
"\n",
|
||
"#Polynomial fits\n",
|
||
"\n",
|
||
"#Degree 2\n",
|
||
"poly_features=PolynomialFeatures(degree=2, include_bias=False)\n",
|
||
"X_poly=poly_features.fit_transform(X)\n",
|
||
"\n",
|
||
"lin_reg=LinearRegression()\n",
|
||
"poly_fit=lin_reg.fit(X_poly,distance_list)\n",
|
||
"b=lin_reg.coef_\n",
|
||
"c=lin_reg.intercept_\n",
|
||
"print (\"2nd degree coefficients:\")\n",
|
||
"print (\"zero power: \",c)\n",
|
||
"print (\"first power: \", b[0])\n",
|
||
"print (\"second power: \",b[1])\n",
|
||
"\n",
|
||
"z = np.arange(0, steps, .01)\n",
|
||
"z_mod=b[1]*z**2+b[0]*z+c\n",
|
||
"\n",
|
||
"fit_mod=b[1]*X**2+b[0]*X+c\n",
|
||
"plt.plot(z, z_mod, color='r', label=\"2nd Degree Fit\")\n",
|
||
"plt.title(\"Polynomial Regression\")\n",
|
||
"\n",
|
||
"plt.xlabel(\"Steps\")\n",
|
||
"plt.ylabel(\"Distance\")\n",
|
||
"\n",
|
||
"#Degree 10\n",
|
||
"poly_features10=PolynomialFeatures(degree=10, include_bias=False)\n",
|
||
"X_poly10=poly_features10.fit_transform(X)\n",
|
||
"\n",
|
||
"poly_fit10=lin_reg.fit(X_poly10,distance_list)\n",
|
||
"\n",
|
||
"y_plot=poly_fit10.predict(X_poly10)\n",
|
||
"plt.plot(X, y_plot, color='black', label=\"10th Degree Fit\")\n",
|
||
"\n",
|
||
"plt.legend()\n",
|
||
"plt.show()\n",
|
||
"\n",
|
||
"\n",
|
||
"#Decision Tree Regression\n",
|
||
"from sklearn.tree import DecisionTreeRegressor\n",
|
||
"regr_1=DecisionTreeRegressor(max_depth=2)\n",
|
||
"regr_2=DecisionTreeRegressor(max_depth=5)\n",
|
||
"regr_3=DecisionTreeRegressor(max_depth=7)\n",
|
||
"regr_1.fit(X, distance_list)\n",
|
||
"regr_2.fit(X, distance_list)\n",
|
||
"regr_3.fit(X, distance_list)\n",
|
||
"\n",
|
||
"X_test = np.arange(0.0, steps, 0.01)[:, np.newaxis]\n",
|
||
"y_1 = regr_1.predict(X_test)\n",
|
||
"y_2 = regr_2.predict(X_test)\n",
|
||
"y_3=regr_3.predict(X_test)\n",
|
||
"\n",
|
||
"# Plot the results\n",
|
||
"plt.figure()\n",
|
||
"plt.scatter(X, distance_list, s=2.5, c=\"black\", label=\"data\")\n",
|
||
"plt.plot(X_test, y_1, color=\"red\",\n",
|
||
" label=\"max_depth=2\", linewidth=2)\n",
|
||
"plt.plot(X_test, y_2, color=\"green\", label=\"max_depth=5\", linewidth=2)\n",
|
||
"plt.plot(X_test, y_3, color=\"m\", label=\"max_depth=7\", linewidth=2)\n",
|
||
"\n",
|
||
"plt.xlabel(\"Data\")\n",
|
||
"plt.ylabel(\"Darget\")\n",
|
||
"plt.title(\"Decision Tree Regression\")\n",
|
||
"plt.legend()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Building a tree, regression\n",
|
||
"\n",
|
||
"There are mainly two steps\n",
|
||
"1. We split the predictor space (the set of possible values $x_1,x_2,\\dots, x_p$) into $J$ distinct and non-non-overlapping regions, $R_1,R_2,\\dots,R_J$. \n",
|
||
"\n",
|
||
"2. For every observation that falls into the region $R_j$ , we make the same prediction, which is simply the mean of the response values for the training observations in $R_j$.\n",
|
||
"\n",
|
||
"How do we construct the regions $R_1,\\dots,R_J$? In theory, the\n",
|
||
"regions could have any shape. However, we choose to divide the\n",
|
||
"predictor space into high-dimensional rectangles, or boxes, for\n",
|
||
"simplicity and for ease of interpretation of the resulting predictive\n",
|
||
"model. The goal is to find boxes $R_1,\\dots,R_J$ that minimize the\n",
|
||
"MSE, given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sum_{j=1}^J\\sum_{i\\in R_j}(y_i-\\overline{y}_{R_j})^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $\\overline{y}_{R_j}$ is the mean response for the training observations \n",
|
||
"within box $j$. \n",
|
||
"\n",
|
||
"\n",
|
||
"Unfortunately, it is computationally infeasible to consider every\n",
|
||
"possible partition of the feature space into $J$ boxes. The common\n",
|
||
"strategy is to take a top-down approach\n",
|
||
"\n",
|
||
"The approach is top-down because it begins at the top of the tree (all\n",
|
||
"observations belong to a single region) and then successively splits\n",
|
||
"the predictor space; each split is indicated via two new branches\n",
|
||
"further down on the tree. It is greedy because at each step of the\n",
|
||
"tree-building process, the best split is made at that particular step,\n",
|
||
"rather than looking ahead and picking a split that will lead to a\n",
|
||
"better tree in some future step.\n",
|
||
"\n",
|
||
"\n",
|
||
"### Making a tree\n",
|
||
"\n",
|
||
"In order to implement the recursive binary splitting we start by selecting\n",
|
||
"the predictor $x_j$ and a cutpoint $s$ that splits the predictor space into two regions $R_1$ and $R_2$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\left\\{X\\vert x_j < s\\right\\},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\left\\{X\\vert x_j \\geq s\\right\\},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"so that we obtain the lowest MSE, that is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sum_{i:x_i\\in R_j}(y_i-\\overline{y}_{R_1})^2+\\sum_{i:x_i\\in R_2}(y_i-\\overline{y}_{R_2})^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"which we want to minimize by considering all predictors\n",
|
||
"$x_1,x_2,\\dots,x_p$. We consider also all possible values of $s$ for\n",
|
||
"each predictor. These values could be determined by randomly assigned\n",
|
||
"numbers or by starting at the midpoint and then proceed till we find\n",
|
||
"an optimal value.\n",
|
||
"\n",
|
||
"For any $j$ and $s$, we define the pair of half-planes where\n",
|
||
"$\\overline{y}_{R_1}$ is the mean response for the training\n",
|
||
"observations in $R_1(j,s)$, and $\\overline{y}_{R_2}$ is the mean\n",
|
||
"response for the training observations in $R_2(j,s)$.\n",
|
||
"\n",
|
||
"Finding the values of $j$ and $s$ that minimize the above equation can be\n",
|
||
"done quite quickly, especially when the number of features $p$ is not\n",
|
||
"too large.\n",
|
||
"\n",
|
||
"Next, we repeat the process, looking\n",
|
||
"for the best predictor and best cutpoint in order to split the data\n",
|
||
"further so as to minimize the MSE within each of the resulting\n",
|
||
"regions. However, this time, instead of splitting the entire predictor\n",
|
||
"space, we split one of the two previously identified regions. We now\n",
|
||
"have three regions. Again, we look to split one of these three regions\n",
|
||
"further, so as to minimize the MSE. The process continues until a\n",
|
||
"stopping criterion is reached; for instance, we may continue until no\n",
|
||
"region contains more than five observations.\n",
|
||
"\n",
|
||
"\n",
|
||
"The above procedure is rather straightforward, but leads often to\n",
|
||
"overfitting and unnecessarily large and complicated trees. The basic\n",
|
||
"idea is to grow a large tree $T_0$ and then prune it back in order to\n",
|
||
"obtain a subtree. A smaller tree with fewer splits (fewer regions) can\n",
|
||
"lead to smaller variance and better interpretation at the cost of a\n",
|
||
"little more bias.\n",
|
||
"\n",
|
||
"The so-called Cost complexity pruning algorithm gives us a\n",
|
||
"way to do just this. Rather than considering every possible subtree,\n",
|
||
"we consider a sequence of trees indexed by a nonnegative tuning\n",
|
||
"parameter $\\alpha$.\n",
|
||
"\n",
|
||
"Read more at the following [Scikit-Learn link on pruning](https://scikit-learn.org/stable/auto_examples/tree/plot_cost_complexity_pruning.html#sphx-glr-auto-examples-tree-plot-cost-complexity-pruning-py).\n",
|
||
"\n",
|
||
"\n",
|
||
"For each value of $\\alpha$ there corresponds a subtree $T \\in T_0$ such that"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\sum_{m=1}^{\\overline{T}}\\sum_{i:x_i\\in R_m}(y_i-\\overline{y}_{R_m})^2+\\alpha\\overline{T},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"is as small as possible. Here $\\overline{T}$ is \n",
|
||
"the number of terminal nodes of the tree $T$ , $R_m$ is the\n",
|
||
"rectangle (i.e. the subset of predictor space) corresponding to the $m$-th terminal node.\n",
|
||
"\n",
|
||
"The tuning parameter $\\alpha$ controls a trade-off between the subtree’s\n",
|
||
"complexity and its fit to the training data. When $\\alpha = 0$, then the\n",
|
||
"subtree $T$ will simply equal $T_0$, \n",
|
||
"because then the above equation just measures the\n",
|
||
"training error. \n",
|
||
"However, as $\\alpha$ increases, there is a price to pay for\n",
|
||
"having a tree with many terminal nodes. The above equation will\n",
|
||
"tend to be minimized for a smaller subtree. \n",
|
||
"\n",
|
||
"\n",
|
||
"It turns out that as we increase $\\alpha$ from zero\n",
|
||
"branches get pruned from the tree in a nested and predictable fashion,\n",
|
||
"so obtaining the whole sequence of subtrees as a function of $\\alpha$ is\n",
|
||
"easy. We can select a value of $\\alpha$ using a validation set or using\n",
|
||
"cross-validation. We then return to the full data set and obtain the\n",
|
||
"subtree corresponding to $\\alpha$. \n",
|
||
"\n",
|
||
"\n",
|
||
"### Schematic Regression Procedure\n",
|
||
"\n",
|
||
"Building a Regression Tree\n",
|
||
"\n",
|
||
"1. Use recursive binary splitting to grow a large tree on the training data, stopping only when each terminal node has fewer than some minimum number of observations.\n",
|
||
"\n",
|
||
"2. Apply cost complexity pruning to the large tree in order to obtain a sequence of best subtrees, as a function of $\\alpha$.\n",
|
||
"\n",
|
||
"3. Use for example $K$-fold cross-validation to choose $\\alpha$. Divide the training observations into $K$ folds. For each $k=1,2,\\dots,K$ we: \n",
|
||
"\n",
|
||
" * repeat steps 1 and 2 on all but the $k$-th fold of the training data. \n",
|
||
"\n",
|
||
" * Then we valuate the mean squared prediction error on the data in the left-out $k$-th fold, as a function of $\\alpha$.\n",
|
||
"\n",
|
||
" * Finally we average the results for each value of $\\alpha$, and pick $\\alpha$ to minimize the average error.\n",
|
||
"\n",
|
||
"\n",
|
||
"4. Return the subtree from Step 2 that corresponds to the chosen value of $\\alpha$. \n",
|
||
"\n",
|
||
"!eblock\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## A Classification Tree\n",
|
||
"\n",
|
||
"A classification tree is very similar to a regression tree, except\n",
|
||
"that it is used to predict a qualitative response rather than a\n",
|
||
"quantitative one. Recall that for a regression tree, the predicted\n",
|
||
"response for an observation is given by the mean response of the\n",
|
||
"training observations that belong to the same terminal node. In\n",
|
||
"contrast, for a classification tree, we predict that each observation\n",
|
||
"belongs to the most commonly occurring class of training observations\n",
|
||
"in the region to which it belongs. In interpreting the results of a\n",
|
||
"classification tree, we are often interested not only in the class\n",
|
||
"prediction corresponding to a particular terminal node region, but\n",
|
||
"also in the class proportions among the training observations that\n",
|
||
"fall into that region. \n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"The task of growing a\n",
|
||
"classification tree is quite similar to the task of growing a\n",
|
||
"regression tree. Just as in the regression setting, we use recursive\n",
|
||
"binary splitting to grow a classification tree. However, in the\n",
|
||
"classification setting, the MSE cannot be used as a criterion for making\n",
|
||
"the binary splits. A natural alternative to MSE is the **classification\n",
|
||
"error rate**. Since we plan to assign an observation in a given region\n",
|
||
"to the most commonly occurring error rate class of training\n",
|
||
"observations in that region, the classification error rate is simply\n",
|
||
"the fraction of the training observations in that region that do not\n",
|
||
"belong to the most common class. \n",
|
||
"\n",
|
||
"When building a classification tree, either the Gini index or the\n",
|
||
"entropy are typically used to evaluate the quality of a particular\n",
|
||
"split, since these two approaches are more sensitive to node purity\n",
|
||
"than is the classification error rate. \n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"If our targets are the outcome of a classification process that takes\n",
|
||
"for example $k=1,2,\\dots,K$ values, the only thing we need to think of\n",
|
||
"is to set up the splitting criteria for each node.\n",
|
||
"\n",
|
||
"We define a PDF $p_{mk}$ that represents the number of observations of\n",
|
||
"a class $k$ in a region $R_m$ with $N_m$ observations. We represent\n",
|
||
"this likelihood function in terms of the proportion $I(y_i=k)$ of\n",
|
||
"observations of this class in the region $R_m$ as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"p_{mk} = \\frac{1}{N_m}\\sum_{x_i\\in R_m}I(y_i=k).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"We let $p_{mk}$ represent the majority class of observations in region\n",
|
||
"$m$. The three most common ways of splitting a node are given by\n",
|
||
"\n",
|
||
"* Misclassification error"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"p_{mk} = \\frac{1}{N_m}\\sum_{x_i\\in R_m}I(y_i\\ne k) = 1-p_{mk}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"* Gini index $g$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"g = \\sum_{k=1}^K p_{mk}(1-p_{mk}).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"* Information entropy or just entropy $s$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"s = -\\sum_{k=1}^K p_{mk}\\log{p_{mk}}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Visualizing the Tree, Classification"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" mean radius mean texture mean perimeter mean area mean smoothness \\\n",
|
||
"0 17.99 10.38 122.80 1001.0 0.11840 \n",
|
||
"1 20.57 17.77 132.90 1326.0 0.08474 \n",
|
||
"2 19.69 21.25 130.00 1203.0 0.10960 \n",
|
||
"3 11.42 20.38 77.58 386.1 0.14250 \n",
|
||
"4 20.29 14.34 135.10 1297.0 0.10030 \n",
|
||
".. ... ... ... ... ... \n",
|
||
"564 21.56 22.39 142.00 1479.0 0.11100 \n",
|
||
"565 20.13 28.25 131.20 1261.0 0.09780 \n",
|
||
"566 16.60 28.08 108.30 858.1 0.08455 \n",
|
||
"567 20.60 29.33 140.10 1265.0 0.11780 \n",
|
||
"568 7.76 24.54 47.92 181.0 0.05263 \n",
|
||
"\n",
|
||
" mean compactness mean concavity mean concave points mean symmetry \\\n",
|
||
"0 0.27760 0.30010 0.14710 0.2419 \n",
|
||
"1 0.07864 0.08690 0.07017 0.1812 \n",
|
||
"2 0.15990 0.19740 0.12790 0.2069 \n",
|
||
"3 0.28390 0.24140 0.10520 0.2597 \n",
|
||
"4 0.13280 0.19800 0.10430 0.1809 \n",
|
||
".. ... ... ... ... \n",
|
||
"564 0.11590 0.24390 0.13890 0.1726 \n",
|
||
"565 0.10340 0.14400 0.09791 0.1752 \n",
|
||
"566 0.10230 0.09251 0.05302 0.1590 \n",
|
||
"567 0.27700 0.35140 0.15200 0.2397 \n",
|
||
"568 0.04362 0.00000 0.00000 0.1587 \n",
|
||
"\n",
|
||
" mean fractal dimension ... worst radius worst texture \\\n",
|
||
"0 0.07871 ... 25.380 17.33 \n",
|
||
"1 0.05667 ... 24.990 23.41 \n",
|
||
"2 0.05999 ... 23.570 25.53 \n",
|
||
"3 0.09744 ... 14.910 26.50 \n",
|
||
"4 0.05883 ... 22.540 16.67 \n",
|
||
".. ... ... ... ... \n",
|
||
"564 0.05623 ... 25.450 26.40 \n",
|
||
"565 0.05533 ... 23.690 38.25 \n",
|
||
"566 0.05648 ... 18.980 34.12 \n",
|
||
"567 0.07016 ... 25.740 39.42 \n",
|
||
"568 0.05884 ... 9.456 30.37 \n",
|
||
"\n",
|
||
" worst perimeter worst area worst smoothness worst compactness \\\n",
|
||
"0 184.60 2019.0 0.16220 0.66560 \n",
|
||
"1 158.80 1956.0 0.12380 0.18660 \n",
|
||
"2 152.50 1709.0 0.14440 0.42450 \n",
|
||
"3 98.87 567.7 0.20980 0.86630 \n",
|
||
"4 152.20 1575.0 0.13740 0.20500 \n",
|
||
".. ... ... ... ... \n",
|
||
"564 166.10 2027.0 0.14100 0.21130 \n",
|
||
"565 155.00 1731.0 0.11660 0.19220 \n",
|
||
"566 126.70 1124.0 0.11390 0.30940 \n",
|
||
"567 184.60 1821.0 0.16500 0.86810 \n",
|
||
"568 59.16 268.6 0.08996 0.06444 \n",
|
||
"\n",
|
||
" worst concavity worst concave points worst symmetry \\\n",
|
||
"0 0.7119 0.2654 0.4601 \n",
|
||
"1 0.2416 0.1860 0.2750 \n",
|
||
"2 0.4504 0.2430 0.3613 \n",
|
||
"3 0.6869 0.2575 0.6638 \n",
|
||
"4 0.4000 0.1625 0.2364 \n",
|
||
".. ... ... ... \n",
|
||
"564 0.4107 0.2216 0.2060 \n",
|
||
"565 0.3215 0.1628 0.2572 \n",
|
||
"566 0.3403 0.1418 0.2218 \n",
|
||
"567 0.9387 0.2650 0.4087 \n",
|
||
"568 0.0000 0.0000 0.2871 \n",
|
||
"\n",
|
||
" worst fractal dimension \n",
|
||
"0 0.11890 \n",
|
||
"1 0.08902 \n",
|
||
"2 0.08758 \n",
|
||
"3 0.17300 \n",
|
||
"4 0.07678 \n",
|
||
".. ... \n",
|
||
"564 0.07115 \n",
|
||
"565 0.06637 \n",
|
||
"566 0.07820 \n",
|
||
"567 0.12400 \n",
|
||
"568 0.07039 \n",
|
||
"\n",
|
||
"[569 rows x 30 columns]\n",
|
||
" malignant benign\n",
|
||
"0 1 0\n",
|
||
"1 1 0\n",
|
||
"2 1 0\n",
|
||
"3 1 0\n",
|
||
"4 1 0\n",
|
||
".. ... ...\n",
|
||
"564 1 0\n",
|
||
"565 1 0\n",
|
||
"566 1 0\n",
|
||
"567 1 0\n",
|
||
"568 0 1\n",
|
||
"\n",
|
||
"[569 rows x 2 columns]\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0"
|
||
]
|
||
},
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import os\n",
|
||
"from sklearn.datasets import load_breast_cancer\n",
|
||
"from sklearn.tree import DecisionTreeClassifier\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"from sklearn.metrics import confusion_matrix\n",
|
||
"from sklearn.tree import export_graphviz\n",
|
||
"\n",
|
||
"from IPython.display import Image \n",
|
||
"from pydot import graph_from_dot_data\n",
|
||
"import pandas as pd\n",
|
||
"import numpy as np\n",
|
||
"\n",
|
||
"\n",
|
||
"cancer = load_breast_cancer()\n",
|
||
"X = pd.DataFrame(cancer.data, columns=cancer.feature_names)\n",
|
||
"print(X)\n",
|
||
"y = pd.Categorical.from_codes(cancer.target, cancer.target_names)\n",
|
||
"y = pd.get_dummies(y)\n",
|
||
"print(y)\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n",
|
||
"tree_clf = DecisionTreeClassifier(max_depth=5)\n",
|
||
"tree_clf.fit(X_train, y_train)\n",
|
||
"\n",
|
||
"export_graphviz(\n",
|
||
" tree_clf,\n",
|
||
" out_file=\"DataFiles/cancer.dot\",\n",
|
||
" feature_names=cancer.feature_names,\n",
|
||
" class_names=cancer.target_names,\n",
|
||
" rounded=True,\n",
|
||
" filled=True\n",
|
||
")\n",
|
||
"cmd = 'dot -Tpng DataFiles/cancer.dot -o DataFiles/cancer.png'\n",
|
||
"os.system(cmd)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0"
|
||
]
|
||
},
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# Common imports\n",
|
||
"import numpy as np\n",
|
||
"from sklearn.model_selection import train_test_split \n",
|
||
"from sklearn.tree import DecisionTreeClassifier\n",
|
||
"from sklearn.datasets import make_moons\n",
|
||
"from sklearn.tree import export_graphviz\n",
|
||
"from pydot import graph_from_dot_data\n",
|
||
"import pandas as pd\n",
|
||
"import os\n",
|
||
"\n",
|
||
"np.random.seed(42)\n",
|
||
"X, y = make_moons(n_samples=100, noise=0.25, random_state=53)\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=0)\n",
|
||
"tree_clf = DecisionTreeClassifier(max_depth=5)\n",
|
||
"tree_clf.fit(X_train, y_train)\n",
|
||
"\n",
|
||
"export_graphviz(\n",
|
||
" tree_clf,\n",
|
||
" out_file=\"DataFiles/moons.dot\",\n",
|
||
" rounded=True,\n",
|
||
" filled=True\n",
|
||
")\n",
|
||
"cmd = 'dot -Tpng DataFiles/moons.dot -o DataFiles/moons.png'\n",
|
||
"os.system(cmd)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Other ways of visualizing the trees\n",
|
||
"\n",
|
||
"**Scikit-Learn** has also another way to visualize the trees which is very useful, here with the Iris data."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"[Text(0.5, 0.9166666666666666, 'X[2] <= 2.45\\ngini = 0.667\\nsamples = 150\\nvalue = [50, 50, 50]'),\n",
|
||
" Text(0.4230769230769231, 0.75, 'gini = 0.0\\nsamples = 50\\nvalue = [50, 0, 0]'),\n",
|
||
" Text(0.5769230769230769, 0.75, 'X[3] <= 1.75\\ngini = 0.5\\nsamples = 100\\nvalue = [0, 50, 50]'),\n",
|
||
" Text(0.3076923076923077, 0.5833333333333334, 'X[2] <= 4.95\\ngini = 0.168\\nsamples = 54\\nvalue = [0, 49, 5]'),\n",
|
||
" Text(0.15384615384615385, 0.4166666666666667, 'X[3] <= 1.65\\ngini = 0.041\\nsamples = 48\\nvalue = [0, 47, 1]'),\n",
|
||
" Text(0.07692307692307693, 0.25, 'gini = 0.0\\nsamples = 47\\nvalue = [0, 47, 0]'),\n",
|
||
" Text(0.23076923076923078, 0.25, 'gini = 0.0\\nsamples = 1\\nvalue = [0, 0, 1]'),\n",
|
||
" Text(0.46153846153846156, 0.4166666666666667, 'X[3] <= 1.55\\ngini = 0.444\\nsamples = 6\\nvalue = [0, 2, 4]'),\n",
|
||
" Text(0.38461538461538464, 0.25, 'gini = 0.0\\nsamples = 3\\nvalue = [0, 0, 3]'),\n",
|
||
" Text(0.5384615384615384, 0.25, 'X[2] <= 5.45\\ngini = 0.444\\nsamples = 3\\nvalue = [0, 2, 1]'),\n",
|
||
" Text(0.46153846153846156, 0.08333333333333333, 'gini = 0.0\\nsamples = 2\\nvalue = [0, 2, 0]'),\n",
|
||
" Text(0.6153846153846154, 0.08333333333333333, 'gini = 0.0\\nsamples = 1\\nvalue = [0, 0, 1]'),\n",
|
||
" Text(0.8461538461538461, 0.5833333333333334, 'X[2] <= 4.85\\ngini = 0.043\\nsamples = 46\\nvalue = [0, 1, 45]'),\n",
|
||
" Text(0.7692307692307693, 0.4166666666666667, 'X[1] <= 3.1\\ngini = 0.444\\nsamples = 3\\nvalue = [0, 1, 2]'),\n",
|
||
" Text(0.6923076923076923, 0.25, 'gini = 0.0\\nsamples = 2\\nvalue = [0, 0, 2]'),\n",
|
||
" Text(0.8461538461538461, 0.25, 'gini = 0.0\\nsamples = 1\\nvalue = [0, 1, 0]'),\n",
|
||
" Text(0.9230769230769231, 0.4166666666666667, 'gini = 0.0\\nsamples = 43\\nvalue = [0, 0, 43]')]"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 640x480 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"filenames": {
|
||
"image/png": "/Users/mhjensen/Teaching/MachineLearning/doc/LectureNotes/_build/jupyter_execute/chapter6_24_1.png"
|
||
}
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.datasets import load_iris\n",
|
||
"from sklearn import tree\n",
|
||
"X, y = load_iris(return_X_y=True)\n",
|
||
"tree_clf = tree.DecisionTreeClassifier()\n",
|
||
"tree_clf = tree_clf.fit(X, y)\n",
|
||
"# and then plot the tree\n",
|
||
"tree.plot_tree(tree_clf)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Alternatively, the tree can also be exported in textual format with the function exporttext.\n",
|
||
"This method doesn’t require the installation of external libraries and is more compact:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"|--- petal width (cm) <= 0.80\n",
|
||
"| |--- class: 0\n",
|
||
"|--- petal width (cm) > 0.80\n",
|
||
"| |--- petal width (cm) <= 1.75\n",
|
||
"| | |--- class: 1\n",
|
||
"| |--- petal width (cm) > 1.75\n",
|
||
"| | |--- class: 2\n",
|
||
"\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.datasets import load_iris\n",
|
||
"from sklearn.tree import DecisionTreeClassifier\n",
|
||
"from sklearn.tree import export_text\n",
|
||
"iris = load_iris()\n",
|
||
"decision_tree = DecisionTreeClassifier(random_state=0, max_depth=2)\n",
|
||
"decision_tree = decision_tree.fit(iris.data, iris.target)\n",
|
||
"r = export_text(decision_tree, feature_names=iris['feature_names'])\n",
|
||
"print(r)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Algorithms for Setting up Decision Trees\n",
|
||
"\n",
|
||
"Two algorithms stand out in the set up of decision trees:\n",
|
||
"1. The CART (Classification And Regression Tree) algorithm for both classification and regression\n",
|
||
"\n",
|
||
"2. The ID3 algorithm based on the computation of the information gain for classification\n",
|
||
"\n",
|
||
"We discuss both algorithms with applications here. The popular library\n",
|
||
"**Scikit-Learn** uses the CART algorithm. For classification problems\n",
|
||
"you can use either the **gini** index or the **entropy** to split a tree\n",
|
||
"in two branches.\n",
|
||
"\n",
|
||
"### The CART algorithm for Classification\n",
|
||
"\n",
|
||
"For classification, the CART algorithm splits the data set in two subsets using a single feature $k$ and a threshold $t_k$.\n",
|
||
"This could be for example a threshold set by a number below a certain circumference of a malign tumor.\n",
|
||
"\n",
|
||
"How do we find these two quantities?\n",
|
||
"We search for the pair $(k,t_k)$ that produces the purest subset using for example the **gini** factor $G$.\n",
|
||
"The cost function it tries to minimize is then"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"C(k,t_k) = \\frac{m_{\\mathrm{left}}}{m}G_{\\mathrm{left}}+ \\frac{m_{\\mathrm{right}}}{m}G_{\\mathrm{right}},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $G_{\\mathrm{left/right}}$ measures the impurity of the left/right subset and $m_{\\mathrm{left/right}}$\n",
|
||
" is the number of instances in the left/right subset\n",
|
||
"\n",
|
||
"Once it has successfully split the training set in two, it splits the subsets using the same logic, then the subsubsets\n",
|
||
"and so on, recursively. It stops recursing once it reaches the maximum depth (defined by the\n",
|
||
"$max\\_depth$ hyperparameter), or if it cannot find a split that will reduce impurity. A few other\n",
|
||
"hyperparameters control additional stopping conditions such as the $min\\_samples\\_split$,\n",
|
||
"$min\\_samples\\_leaf$, $min\\_weight\\_fraction\\_leaf$, and $max\\_leaf\\_nodes$.\n",
|
||
"\n",
|
||
"\n",
|
||
"### The CART algorithm for Regression\n",
|
||
"\n",
|
||
"The CART algorithm for regression works is similar to the one for classification except that instead of trying to split the\n",
|
||
"training set in a way that minimizes say the **gini** or **entropy** impurity, it now tries to split the training set in a way that minimizes our well-known mean-squared error (MSE). The cost function is now"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"C(k,t_k) = \\frac{m_{\\mathrm{left}}}{m}\\mathrm{MSE}_{\\mathrm{left}}+ \\frac{m_{\\mathrm{right}}}{m}\\mathrm{MSE}_{\\mathrm{right}}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Here the MSE for a specific node is defined as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\mathrm{MSE}_{\\mathrm{node}}=\\frac{1}{m_\\mathrm{node}}\\sum_{i\\in \\mathrm{node}}(\\overline{y}_{\\mathrm{node}}-y_i)^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"with"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\overline{y}_{\\mathrm{node}}=\\frac{1}{m_\\mathrm{node}}\\sum_{i\\in \\mathrm{node}}y_i,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"the mean value of all observations in a specific node.\n",
|
||
"\n",
|
||
"Without any regularization, the regression task for decision trees, \n",
|
||
"just like for classification tasks, is prone to overfitting.\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"### Computing the Gini index\n",
|
||
"\n",
|
||
"The example we will look at is a classical one in many Machine\n",
|
||
"Learning applications. Based on various meteorological features, we\n",
|
||
"have several so-called attributes which decide whether we at the end\n",
|
||
"will do some outdoor activity like skiing, going for a bike ride etc\n",
|
||
"etc. The table here contains the feautures **outlook**, **temperature**,\n",
|
||
"**humidity** and **wind**. The target or output is whether we ride\n",
|
||
"(True=1) or whether we do something else that day (False=0). The\n",
|
||
"attributes for each feature are then sunny, overcast and rain for the\n",
|
||
"outlook, hot, cold and mild for temperature, high and normal for\n",
|
||
"humidity and weak and strong for wind.\n",
|
||
"\n",
|
||
"The table here summarizes the various attributes and\n",
|
||
"<table border=\"1\">\n",
|
||
"<thead>\n",
|
||
"<tr><th align=\"center\">Day</th> <th align=\"center\">Outlook </th> <th align=\"center\">Temperature</th> <th align=\"center\">Humidity</th> <th align=\"center\"> Wind </th> <th align=\"center\">Ride</th> </tr>\n",
|
||
"</thead>\n",
|
||
"<tbody>\n",
|
||
"<tr><td align=\"center\"> 1 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Hot </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 0 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 2 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Hot </td> <td align=\"center\"> High </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 3 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Hot </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 4 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 5 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 6 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 0 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 7 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 8 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 0 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 9 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Cool </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 10 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Mild </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 11 </td> <td align=\"center\"> Sunny </td> <td align=\"center\"> Mild </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 12 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 13 </td> <td align=\"center\"> Overcast </td> <td align=\"center\"> Hot </td> <td align=\"center\"> Normal </td> <td align=\"center\"> Weak </td> <td align=\"center\"> 1 </td> </tr>\n",
|
||
"<tr><td align=\"center\"> 14 </td> <td align=\"center\"> Rain </td> <td align=\"center\"> Mild </td> <td align=\"center\"> High </td> <td align=\"center\"> Strong </td> <td align=\"center\"> 0 </td> </tr>\n",
|
||
"</tbody>\n",
|
||
"</table>\n",
|
||
"\n",
|
||
"### Simple Python Code to read in Data and perform Classification"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"ename": "FileNotFoundError",
|
||
"evalue": "[Errno 2] No such file or directory: 'DataFiles/rideclass.csv'",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
|
||
"Input \u001b[0;32mIn [6]\u001b[0m, in \u001b[0;36m<cell line: 37>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msave_fig\u001b[39m(fig_id):\n\u001b[1;32m 35\u001b[0m plt\u001b[38;5;241m.\u001b[39msavefig(image_path(fig_id) \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.png\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28mformat\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpng\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 37\u001b[0m infile \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mdata_path\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrideclass.csv\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 39\u001b[0m \u001b[38;5;66;03m# Read the experimental data with Pandas\u001b[39;00m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mIPython\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdisplay\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m display\n",
|
||
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'DataFiles/rideclass.csv'"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Common imports\n",
|
||
"import numpy as np\n",
|
||
"import pandas as pd\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn.tree import DecisionTreeClassifier\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"from sklearn.tree import export_graphviz\n",
|
||
"from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
|
||
"from sklearn.compose import ColumnTransformer\n",
|
||
"from IPython.display import Image \n",
|
||
"from pydot import graph_from_dot_data\n",
|
||
"import os\n",
|
||
"\n",
|
||
"# Where to save the figures and data files\n",
|
||
"PROJECT_ROOT_DIR = \"Results\"\n",
|
||
"FIGURE_ID = \"Results/FigureFiles\"\n",
|
||
"DATA_ID = \"DataFiles/\"\n",
|
||
"\n",
|
||
"if not os.path.exists(PROJECT_ROOT_DIR):\n",
|
||
" os.mkdir(PROJECT_ROOT_DIR)\n",
|
||
"\n",
|
||
"if not os.path.exists(FIGURE_ID):\n",
|
||
" os.makedirs(FIGURE_ID)\n",
|
||
"\n",
|
||
"if not os.path.exists(DATA_ID):\n",
|
||
" os.makedirs(DATA_ID)\n",
|
||
"\n",
|
||
"def image_path(fig_id):\n",
|
||
" return os.path.join(FIGURE_ID, fig_id)\n",
|
||
"\n",
|
||
"def data_path(dat_id):\n",
|
||
" return os.path.join(DATA_ID, dat_id)\n",
|
||
"\n",
|
||
"def save_fig(fig_id):\n",
|
||
" plt.savefig(image_path(fig_id) + \".png\", format='png')\n",
|
||
"\n",
|
||
"infile = open(data_path(\"rideclass.csv\"),'r')\n",
|
||
"\n",
|
||
"# Read the experimental data with Pandas\n",
|
||
"from IPython.display import display\n",
|
||
"ridedata = pd.read_csv(infile,names = ('Outlook','Temperature','Humidity','Wind','Ride'))\n",
|
||
"ridedata = pd.DataFrame(ridedata)\n",
|
||
"\n",
|
||
"# Features and targets\n",
|
||
"X = ridedata.loc[:, ridedata.columns != 'Ride'].values\n",
|
||
"y = ridedata.loc[:, ridedata.columns == 'Ride'].values\n",
|
||
"\n",
|
||
"# Create the encoder.\n",
|
||
"encoder = OneHotEncoder(handle_unknown=\"ignore\")\n",
|
||
"# Assume for simplicity all features are categorical.\n",
|
||
"encoder.fit(X) \n",
|
||
"# Apply the encoder.\n",
|
||
"X = encoder.transform(X)\n",
|
||
"print(X)\n",
|
||
"# Then do a Classification tree\n",
|
||
"tree_clf = DecisionTreeClassifier(max_depth=2)\n",
|
||
"tree_clf.fit(X, y)\n",
|
||
"print(\"Train set accuracy with Decision Tree: {:.2f}\".format(tree_clf.score(X,y)))\n",
|
||
"#transfer to a decision tree graph\n",
|
||
"export_graphviz(\n",
|
||
" tree_clf,\n",
|
||
" out_file=\"DataFiles/ride.dot\",\n",
|
||
" rounded=True,\n",
|
||
" filled=True\n",
|
||
")\n",
|
||
"cmd = 'dot -Tpng DataFiles/cancer.dot -o DataFiles/cancer.png'\n",
|
||
"os.system(cmd)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The above functions (gini, entropy and misclassification error) are\n",
|
||
"important components of the so-called CART algorithm. We will discuss\n",
|
||
"this algorithm below after we have discussed the information gain\n",
|
||
"algorithm ID3.\n",
|
||
"\n",
|
||
"In the example here we have converted all our attributes into numerical values $0,1,2$ etc."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Split a dataset based on an attribute and an attribute value\n",
|
||
"def test_split(index, value, dataset):\n",
|
||
"\tleft, right = list(), list()\n",
|
||
"\tfor row in dataset:\n",
|
||
"\t\tif row[index] < value:\n",
|
||
"\t\t\tleft.append(row)\n",
|
||
"\t\telse:\n",
|
||
"\t\t\tright.append(row)\n",
|
||
"\treturn left, right\n",
|
||
" \n",
|
||
"# Calculate the Gini index for a split dataset\n",
|
||
"def gini_index(groups, classes):\n",
|
||
"\t# count all samples at split point\n",
|
||
"\tn_instances = float(sum([len(group) for group in groups]))\n",
|
||
"\t# sum weighted Gini index for each group\n",
|
||
"\tgini = 0.0\n",
|
||
"\tfor group in groups:\n",
|
||
"\t\tsize = float(len(group))\n",
|
||
"\t\t# avoid divide by zero\n",
|
||
"\t\tif size == 0:\n",
|
||
"\t\t\tcontinue\n",
|
||
"\t\tscore = 0.0\n",
|
||
"\t\t# score the group based on the score for each class\n",
|
||
"\t\tfor class_val in classes:\n",
|
||
"\t\t\tp = [row[-1] for row in group].count(class_val) / size\n",
|
||
"\t\t\tscore += p * p\n",
|
||
"\t\t# weight the group score by its relative size\n",
|
||
"\t\tgini += (1.0 - score) * (size / n_instances)\n",
|
||
"\treturn gini\n",
|
||
"\n",
|
||
"# Select the best split point for a dataset\n",
|
||
"def get_split(dataset):\n",
|
||
"\tclass_values = list(set(row[-1] for row in dataset))\n",
|
||
"\tb_index, b_value, b_score, b_groups = 999, 999, 999, None\n",
|
||
"\tfor index in range(len(dataset[0])-1):\n",
|
||
"\t\tfor row in dataset:\n",
|
||
"\t\t\tgroups = test_split(index, row[index], dataset)\n",
|
||
"\t\t\tgini = gini_index(groups, class_values)\n",
|
||
"\t\t\tprint('X%d < %.3f Gini=%.3f' % ((index+1), row[index], gini))\n",
|
||
"\t\t\tif gini < b_score:\n",
|
||
"\t\t\t\tb_index, b_value, b_score, b_groups = index, row[index], gini, groups\n",
|
||
"\treturn {'index':b_index, 'value':b_value, 'groups':b_groups}\n",
|
||
" \n",
|
||
"dataset = [[0,0,0,0,0],\n",
|
||
" [0,0,0,1,1],\n",
|
||
" [1,0,0,0,1],\n",
|
||
" [2,1,0,0,1],\n",
|
||
" [2,2,1,0,1],\n",
|
||
" [2,2,1,1,0],\n",
|
||
" [1,2,1,1,1],\n",
|
||
" [0,1,0,0,0],\n",
|
||
" [0,2,1,0,1],\n",
|
||
" [2,1,1,0,1],\n",
|
||
" [0,1,1,1,1],\n",
|
||
" [1,1,0,1,1],\n",
|
||
" [1,0,1,0,1],\n",
|
||
" [2,1,0,1,0]]\n",
|
||
"\n",
|
||
"split = get_split(dataset)\n",
|
||
"print('Split: [X%d < %.3f]' % ((split['index']+1), split['value']))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Entropy and the ID3 algorithm\n",
|
||
"\n",
|
||
"The ID3 algorithm learns decision trees by constructing\n",
|
||
"them in a top down way, beginning with the question **which attribute should be tested at the root of the tree**?\n",
|
||
"\n",
|
||
"1. Each instance attribute is evaluated using a statistical test to determine how well it alone classifies the training examples.\n",
|
||
"\n",
|
||
"2. The best attribute is selected and used as the test at the root node of the tree.\n",
|
||
"\n",
|
||
"3. A descendant of the root node is then created for each possible value of this attribute.\n",
|
||
"\n",
|
||
"4. Training examples are sorted to the appropriate descendant node.\n",
|
||
"\n",
|
||
"5. The entire process is then repeated using the training examples associated with each descendant node to select the best attribute to test at that point in the tree.\n",
|
||
"\n",
|
||
"6. This forms a greedy search for an acceptable decision tree, in which the algorithm never backtracks to reconsider earlier choices. \n",
|
||
"\n",
|
||
"The ID3 algorithm selects which attribute to test at each node in the\n",
|
||
"tree.\n",
|
||
"\n",
|
||
"We would like to select the attribute that is most useful for classifying\n",
|
||
"examples.\n",
|
||
"\n",
|
||
"What is a good quantitative measure of the worth of an attribute?\n",
|
||
"\n",
|
||
"Information gain measures how well a given attribute separates the\n",
|
||
"training examples according to their target classification.\n",
|
||
"\n",
|
||
"The ID3 algorithm uses this information gain measure to select among the candidate\n",
|
||
"attributes at each step while growing the tree.\n",
|
||
"\n",
|
||
"\n",
|
||
"### Cancer Data again now with Decision Trees and other Methods"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import numpy as np\n",
|
||
"from sklearn.model_selection import train_test_split \n",
|
||
"from sklearn.datasets import load_breast_cancer\n",
|
||
"from sklearn.svm import SVC\n",
|
||
"from sklearn.linear_model import LogisticRegression\n",
|
||
"from sklearn.tree import DecisionTreeClassifier\n",
|
||
"\n",
|
||
"# Load the data\n",
|
||
"cancer = load_breast_cancer()\n",
|
||
"\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state=0)\n",
|
||
"print(X_train.shape)\n",
|
||
"print(X_test.shape)\n",
|
||
"# Logistic Regression\n",
|
||
"logreg = LogisticRegression(solver='lbfgs')\n",
|
||
"logreg.fit(X_train, y_train)\n",
|
||
"print(\"Test set accuracy with Logistic Regression: {:.2f}\".format(logreg.score(X_test,y_test)))\n",
|
||
"# Support vector machine\n",
|
||
"svm = SVC(gamma='auto', C=100)\n",
|
||
"svm.fit(X_train, y_train)\n",
|
||
"print(\"Test set accuracy with SVM: {:.2f}\".format(svm.score(X_test,y_test)))\n",
|
||
"# Decision Trees\n",
|
||
"deep_tree_clf = DecisionTreeClassifier(max_depth=None)\n",
|
||
"deep_tree_clf.fit(X_train, y_train)\n",
|
||
"print(\"Test set accuracy with Decision Trees: {:.2f}\".format(deep_tree_clf.score(X_test,y_test)))\n",
|
||
"#now scale the data\n",
|
||
"from sklearn.preprocessing import StandardScaler\n",
|
||
"scaler = StandardScaler()\n",
|
||
"scaler.fit(X_train)\n",
|
||
"X_train_scaled = scaler.transform(X_train)\n",
|
||
"X_test_scaled = scaler.transform(X_test)\n",
|
||
"# Logistic Regression\n",
|
||
"logreg.fit(X_train_scaled, y_train)\n",
|
||
"print(\"Test set accuracy Logistic Regression with scaled data: {:.2f}\".format(logreg.score(X_test_scaled,y_test)))\n",
|
||
"# Support Vector Machine\n",
|
||
"svm.fit(X_train_scaled, y_train)\n",
|
||
"print(\"Test set accuracy SVM with scaled data: {:.2f}\".format(logreg.score(X_test_scaled,y_test)))\n",
|
||
"# Decision Trees\n",
|
||
"deep_tree_clf.fit(X_train_scaled, y_train)\n",
|
||
"print(\"Test set accuracy with Decision Trees and scaled data: {:.2f}\".format(deep_tree_clf.score(X_test_scaled,y_test)))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Another example, the moons again"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from __future__ import division, print_function, unicode_literals\n",
|
||
"\n",
|
||
"# Common imports\n",
|
||
"import numpy as np\n",
|
||
"import os\n",
|
||
"\n",
|
||
"# to make this notebook's output stable across runs\n",
|
||
"np.random.seed(42)\n",
|
||
"\n",
|
||
"# To plot pretty figures\n",
|
||
"import matplotlib\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from matplotlib.colors import ListedColormap\n",
|
||
"plt.rcParams['axes.labelsize'] = 14\n",
|
||
"plt.rcParams['xtick.labelsize'] = 12\n",
|
||
"plt.rcParams['ytick.labelsize'] = 12\n",
|
||
"\n",
|
||
"\n",
|
||
"from sklearn.svm import SVC\n",
|
||
"from sklearn import datasets\n",
|
||
"from sklearn.tree import DecisionTreeClassifier\n",
|
||
"from sklearn.datasets import make_moons\n",
|
||
"from sklearn.tree import export_graphviz\n",
|
||
"\n",
|
||
"Xm, ym = make_moons(n_samples=100, noise=0.25, random_state=53)\n",
|
||
"\n",
|
||
"deep_tree_clf1 = DecisionTreeClassifier(random_state=42)\n",
|
||
"deep_tree_clf2 = DecisionTreeClassifier(min_samples_leaf=4, random_state=42)\n",
|
||
"deep_tree_clf1.fit(Xm, ym)\n",
|
||
"deep_tree_clf2.fit(Xm, ym)\n",
|
||
"\n",
|
||
"\n",
|
||
"def plot_decision_boundary(clf, X, y, axes=[0, 7.5, 0, 3], iris=True, legend=False, plot_training=True):\n",
|
||
" x1s = np.linspace(axes[0], axes[1], 100)\n",
|
||
" x2s = np.linspace(axes[2], axes[3], 100)\n",
|
||
" x1, x2 = np.meshgrid(x1s, x2s)\n",
|
||
" X_new = np.c_[x1.ravel(), x2.ravel()]\n",
|
||
" y_pred = clf.predict(X_new).reshape(x1.shape)\n",
|
||
" custom_cmap = ListedColormap(['#fafab0','#9898ff','#a0faa0'])\n",
|
||
" plt.contourf(x1, x2, y_pred, alpha=0.3, cmap=custom_cmap)\n",
|
||
" if not iris:\n",
|
||
" custom_cmap2 = ListedColormap(['#7d7d58','#4c4c7f','#507d50'])\n",
|
||
" plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)\n",
|
||
" if plot_training:\n",
|
||
" plt.plot(X[:, 0][y==0], X[:, 1][y==0], \"yo\", label=\"Iris-Setosa\")\n",
|
||
" plt.plot(X[:, 0][y==1], X[:, 1][y==1], \"bs\", label=\"Iris-Versicolor\")\n",
|
||
" plt.plot(X[:, 0][y==2], X[:, 1][y==2], \"g^\", label=\"Iris-Virginica\")\n",
|
||
" plt.axis(axes)\n",
|
||
" if iris:\n",
|
||
" plt.xlabel(\"Petal length\", fontsize=14)\n",
|
||
" plt.ylabel(\"Petal width\", fontsize=14)\n",
|
||
" else:\n",
|
||
" plt.xlabel(r\"$x_1$\", fontsize=18)\n",
|
||
" plt.ylabel(r\"$x_2$\", fontsize=18, rotation=0)\n",
|
||
" if legend:\n",
|
||
" plt.legend(loc=\"lower right\", fontsize=14)\n",
|
||
"plt.figure(figsize=(11, 4))\n",
|
||
"plt.subplot(121)\n",
|
||
"plot_decision_boundary(deep_tree_clf1, Xm, ym, axes=[-1.5, 2.5, -1, 1.5], iris=False)\n",
|
||
"plt.title(\"No restrictions\", fontsize=16)\n",
|
||
"plt.subplot(122)\n",
|
||
"plot_decision_boundary(deep_tree_clf2, Xm, ym, axes=[-1.5, 2.5, -1, 1.5], iris=False)\n",
|
||
"plt.title(\"min_samples_leaf = {}\".format(deep_tree_clf2.min_samples_leaf), fontsize=14)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"np.random.seed(6)\n",
|
||
"Xs = np.random.rand(100, 2) - 0.5\n",
|
||
"ys = (Xs[:, 0] > 0).astype(np.float32) * 2\n",
|
||
"\n",
|
||
"angle = np.pi/4\n",
|
||
"rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n",
|
||
"Xsr = Xs.dot(rotation_matrix)\n",
|
||
"\n",
|
||
"tree_clf_s = DecisionTreeClassifier(random_state=42)\n",
|
||
"tree_clf_s.fit(Xs, ys)\n",
|
||
"tree_clf_sr = DecisionTreeClassifier(random_state=42)\n",
|
||
"tree_clf_sr.fit(Xsr, ys)\n",
|
||
"\n",
|
||
"plt.figure(figsize=(11, 4))\n",
|
||
"plt.subplot(121)\n",
|
||
"plot_decision_boundary(tree_clf_s, Xs, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
|
||
"plt.subplot(122)\n",
|
||
"plot_decision_boundary(tree_clf_sr, Xsr, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Quadratic training set + noise\n",
|
||
"np.random.seed(42)\n",
|
||
"m = 200\n",
|
||
"X = np.random.rand(m, 1)\n",
|
||
"y = 4 * (X - 0.5) ** 2\n",
|
||
"y = y + np.random.randn(m, 1) / 10"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.tree import DecisionTreeRegressor\n",
|
||
"\n",
|
||
"tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)\n",
|
||
"tree_reg.fit(X, y)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.tree import DecisionTreeRegressor\n",
|
||
"\n",
|
||
"tree_reg1 = DecisionTreeRegressor(random_state=42, max_depth=2)\n",
|
||
"tree_reg2 = DecisionTreeRegressor(random_state=42, max_depth=3)\n",
|
||
"tree_reg1.fit(X, y)\n",
|
||
"tree_reg2.fit(X, y)\n",
|
||
"\n",
|
||
"def plot_regression_predictions(tree_reg, X, y, axes=[0, 1, -0.2, 1], ylabel=\"$y$\"):\n",
|
||
" x1 = np.linspace(axes[0], axes[1], 500).reshape(-1, 1)\n",
|
||
" y_pred = tree_reg.predict(x1)\n",
|
||
" plt.axis(axes)\n",
|
||
" plt.xlabel(\"$x_1$\", fontsize=18)\n",
|
||
" if ylabel:\n",
|
||
" plt.ylabel(ylabel, fontsize=18, rotation=0)\n",
|
||
" plt.plot(X, y, \"b.\")\n",
|
||
" plt.plot(x1, y_pred, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
|
||
"\n",
|
||
"plt.figure(figsize=(11, 4))\n",
|
||
"plt.subplot(121)\n",
|
||
"plot_regression_predictions(tree_reg1, X, y)\n",
|
||
"for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
|
||
" plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
|
||
"plt.text(0.21, 0.65, \"Depth=0\", fontsize=15)\n",
|
||
"plt.text(0.01, 0.2, \"Depth=1\", fontsize=13)\n",
|
||
"plt.text(0.65, 0.8, \"Depth=1\", fontsize=13)\n",
|
||
"plt.legend(loc=\"upper center\", fontsize=18)\n",
|
||
"plt.title(\"max_depth=2\", fontsize=14)\n",
|
||
"\n",
|
||
"plt.subplot(122)\n",
|
||
"plot_regression_predictions(tree_reg2, X, y, ylabel=None)\n",
|
||
"for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
|
||
" plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
|
||
"for split in (0.0458, 0.1298, 0.2873, 0.9040):\n",
|
||
" plt.plot([split, split], [-0.2, 1], \"k:\", linewidth=1)\n",
|
||
"plt.text(0.3, 0.5, \"Depth=2\", fontsize=13)\n",
|
||
"plt.title(\"max_depth=3\", fontsize=14)\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": false,
|
||
"editable": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"tree_reg1 = DecisionTreeRegressor(random_state=42)\n",
|
||
"tree_reg2 = DecisionTreeRegressor(random_state=42, min_samples_leaf=10)\n",
|
||
"tree_reg1.fit(X, y)\n",
|
||
"tree_reg2.fit(X, y)\n",
|
||
"\n",
|
||
"x1 = np.linspace(0, 1, 500).reshape(-1, 1)\n",
|
||
"y_pred1 = tree_reg1.predict(x1)\n",
|
||
"y_pred2 = tree_reg2.predict(x1)\n",
|
||
"\n",
|
||
"plt.figure(figsize=(11, 4))\n",
|
||
"\n",
|
||
"plt.subplot(121)\n",
|
||
"plt.plot(X, y, \"b.\")\n",
|
||
"plt.plot(x1, y_pred1, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
|
||
"plt.axis([0, 1, -0.2, 1.1])\n",
|
||
"plt.xlabel(\"$x_1$\", fontsize=18)\n",
|
||
"plt.ylabel(\"$y$\", fontsize=18, rotation=0)\n",
|
||
"plt.legend(loc=\"upper center\", fontsize=18)\n",
|
||
"plt.title(\"No restrictions\", fontsize=14)\n",
|
||
"\n",
|
||
"plt.subplot(122)\n",
|
||
"plt.plot(X, y, \"b.\")\n",
|
||
"plt.plot(x1, y_pred2, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
|
||
"plt.axis([0, 1, -0.2, 1.1])\n",
|
||
"plt.xlabel(\"$x_1$\", fontsize=18)\n",
|
||
"plt.title(\"min_samples_leaf={}\".format(tree_reg2.min_samples_leaf), fontsize=14)\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Pros and cons of trees, pros\n",
|
||
"\n",
|
||
"* White box, easy to interpret model. Some people believe that decision trees more closely mirror human decision-making than do the regression and classification approaches discussed earlier (think of support vector machines)\n",
|
||
"\n",
|
||
"* Trees are very easy to explain to people. In fact, they are even easier to explain than linear regression!\n",
|
||
"\n",
|
||
"* No feature normalization needed\n",
|
||
"\n",
|
||
"* Tree models can handle both continuous and categorical data (Classification and Regression Trees)\n",
|
||
"\n",
|
||
"* Can model nonlinear relationships\n",
|
||
"\n",
|
||
"* Can model interactions between the different descriptive features\n",
|
||
"\n",
|
||
"* Trees can be displayed graphically, and are easily interpreted even by a non-expert (especially if they are small)\n",
|
||
"\n",
|
||
"### Disadvantages\n",
|
||
"\n",
|
||
"* Unfortunately, trees generally do not have the same level of predictive accuracy as some of the other regression and classification approaches\n",
|
||
"\n",
|
||
"* If continuous features are used the tree may become quite large and hence less interpretable\n",
|
||
"\n",
|
||
"* Decision trees are prone to overfit the training data and hence do not well generalize the data if no stopping criteria or improvements like pruning, boosting or bagging are implemented\n",
|
||
"\n",
|
||
"* Small changes in the data may lead to a completely different tree. This issue can be addressed by using ensemble methods like bagging, boosting or random forests\n",
|
||
"\n",
|
||
"* Unbalanced datasets where some target feature values occur much more frequently than others may lead to biased trees since the frequently occurring feature values are preferred over the less frequently occurring ones. \n",
|
||
"\n",
|
||
"* If the number of features is relatively large (high dimensional) and the number of instances is relatively low, the tree might overfit the data\n",
|
||
"\n",
|
||
"* Features with many levels may be preferred over features with less levels since for them it is *more easy* to split the dataset such that the sub datasets only contain pure target feature values. This issue can be addressed by preferring for instance the information gain ratio as splitting criteria over information gain\n",
|
||
"\n",
|
||
"However, by aggregating many decision trees, using methods like\n",
|
||
"bagging, random forests, and boosting, the predictive performance of\n",
|
||
"trees can be substantially improved."
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"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.9.10"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
} |