1311 lines
212 KiB
Plaintext
1311 lines
212 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**Chapter 6 – Decision Trees**"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"_This notebook contains all the sample code and solutions to the exercises in chapter 6._"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Setup"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"First, let's make sure this notebook works well in both python 2 and 3, import a few common modules, ensure MatplotLib plots figures inline and prepare a function to save the figures:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# To support both python 2 and python 3\n",
|
||
"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",
|
||
"%matplotlib inline\n",
|
||
"import matplotlib\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"plt.rcParams['axes.labelsize'] = 14\n",
|
||
"plt.rcParams['xtick.labelsize'] = 12\n",
|
||
"plt.rcParams['ytick.labelsize'] = 12\n",
|
||
"\n",
|
||
"# 한글출력\n",
|
||
"matplotlib.rc('font', family='NanumBarunGothic')\n",
|
||
"matplotlib.rcParams['axes.unicode_minus'] = False\n",
|
||
"\n",
|
||
"# Where to save the figures\n",
|
||
"PROJECT_ROOT_DIR = \".\"\n",
|
||
"CHAPTER_ID = \"decision_trees\"\n",
|
||
"\n",
|
||
"def image_path(fig_id):\n",
|
||
" return os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID, fig_id)\n",
|
||
"\n",
|
||
"def save_fig(fig_id, tight_layout=True):\n",
|
||
" print(\"Saving figure\", fig_id)\n",
|
||
" if tight_layout:\n",
|
||
" plt.tight_layout()\n",
|
||
" plt.savefig(image_path(fig_id) + \".png\", format='png', dpi=300)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Training and visualizing"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,\n",
|
||
" max_features=None, max_leaf_nodes=None,\n",
|
||
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
|
||
" min_samples_leaf=1, min_samples_split=2,\n",
|
||
" min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
|
||
" splitter='best')"
|
||
]
|
||
},
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.datasets import load_iris\n",
|
||
"from sklearn.tree import DecisionTreeClassifier\n",
|
||
"\n",
|
||
"iris = load_iris()\n",
|
||
"X = iris.data[:, 2:] # petal length and width\n",
|
||
"y = iris.target\n",
|
||
"\n",
|
||
"tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)\n",
|
||
"tree_clf.fit(X, y)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.tree import export_graphviz\n",
|
||
"\n",
|
||
"export_graphviz(\n",
|
||
" tree_clf,\n",
|
||
" out_file=image_path(\"iris_tree.dot\"),\n",
|
||
" feature_names=[\"꽃잎 길이 (cm)\", \"꽃잎 폭 (cm)\"],\n",
|
||
" class_names=iris.target_names,\n",
|
||
" rounded=True,\n",
|
||
" filled=True\n",
|
||
" )"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/svg+xml": [
|
||
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
||
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
||
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
||
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
|
||
" -->\n",
|
||
"<!-- Title: Tree Pages: 1 -->\n",
|
||
"<svg width=\"341pt\" height=\"314pt\"\n",
|
||
" viewBox=\"0.00 0.00 341.00 314.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
||
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 310)\">\n",
|
||
"<title>Tree</title>\n",
|
||
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-310 337,-310 337,4 -4,4\"/>\n",
|
||
"<!-- 0 -->\n",
|
||
"<g id=\"node1\" class=\"node\">\n",
|
||
"<title>0</title>\n",
|
||
"<path fill=\"transparent\" stroke=\"#000000\" d=\"M198.5,-306C198.5,-306 66.5,-306 66.5,-306 60.5,-306 54.5,-300 54.5,-294 54.5,-294 54.5,-235 54.5,-235 54.5,-229 60.5,-223 66.5,-223 66.5,-223 198.5,-223 198.5,-223 204.5,-223 210.5,-229 210.5,-235 210.5,-235 210.5,-294 210.5,-294 210.5,-300 204.5,-306 198.5,-306\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"132.5\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">꽃잎 길이 (cm) <= 2.45</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"132.5\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.667</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"132.5\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 150</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"132.5\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [50, 50, 50]</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"132.5\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = setosa</text>\n",
|
||
"</g>\n",
|
||
"<!-- 1 -->\n",
|
||
"<g id=\"node2\" class=\"node\">\n",
|
||
"<title>1</title>\n",
|
||
"<path fill=\"#e58139\" stroke=\"#000000\" d=\"M105,-179.5C105,-179.5 12,-179.5 12,-179.5 6,-179.5 0,-173.5 0,-167.5 0,-167.5 0,-123.5 0,-123.5 0,-117.5 6,-111.5 12,-111.5 12,-111.5 105,-111.5 105,-111.5 111,-111.5 117,-117.5 117,-123.5 117,-123.5 117,-167.5 117,-167.5 117,-173.5 111,-179.5 105,-179.5\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"58.5\" y=\"-164.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.0</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"58.5\" y=\"-149.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 50</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"58.5\" y=\"-134.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [50, 0, 0]</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"58.5\" y=\"-119.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = setosa</text>\n",
|
||
"</g>\n",
|
||
"<!-- 0->1 -->\n",
|
||
"<g id=\"edge1\" class=\"edge\">\n",
|
||
"<title>0->1</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M106.6184,-222.8796C99.7121,-211.7735 92.2361,-199.7513 85.2825,-188.5691\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"88.0917,-186.4587 79.8387,-179.8149 82.1473,-190.1552 88.0917,-186.4587\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"74.1619\" y=\"-200.4619\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n",
|
||
"</g>\n",
|
||
"<!-- 2 -->\n",
|
||
"<g id=\"node3\" class=\"node\">\n",
|
||
"<title>2</title>\n",
|
||
"<path fill=\"transparent\" stroke=\"#000000\" d=\"M266,-187C266,-187 147,-187 147,-187 141,-187 135,-181 135,-175 135,-175 135,-116 135,-116 135,-110 141,-104 147,-104 147,-104 266,-104 266,-104 272,-104 278,-110 278,-116 278,-116 278,-175 278,-175 278,-181 272,-187 266,-187\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"206.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">꽃잎 폭 (cm) <= 1.75</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"206.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.5</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"206.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 100</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"206.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 50, 50]</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"206.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = versicolor</text>\n",
|
||
"</g>\n",
|
||
"<!-- 0->2 -->\n",
|
||
"<g id=\"edge2\" class=\"edge\">\n",
|
||
"<title>0->2</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M158.3816,-222.8796C163.8142,-214.1434 169.5992,-204.8404 175.2053,-195.8253\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"178.1993,-197.6383 180.5079,-187.2981 172.2549,-193.9418 178.1993,-197.6383\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"186.1847\" y=\"-207.945\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n",
|
||
"</g>\n",
|
||
"<!-- 3 -->\n",
|
||
"<g id=\"node4\" class=\"node\">\n",
|
||
"<title>3</title>\n",
|
||
"<path fill=\"#39e581\" fill-opacity=\"0.898039\" stroke=\"#000000\" d=\"M186,-68C186,-68 89,-68 89,-68 83,-68 77,-62 77,-56 77,-56 77,-12 77,-12 77,-6 83,0 89,0 89,0 186,0 186,0 192,0 198,-6 198,-12 198,-12 198,-56 198,-56 198,-62 192,-68 186,-68\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"137.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.168</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"137.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 54</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"137.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 49, 5]</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"137.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = versicolor</text>\n",
|
||
"</g>\n",
|
||
"<!-- 2->3 -->\n",
|
||
"<g id=\"edge3\" class=\"edge\">\n",
|
||
"<title>2->3</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M180.8069,-103.9815C175.3469,-95.1585 169.5716,-85.8258 164.0793,-76.9506\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"166.942,-74.9254 158.7035,-68.2637 160.9896,-78.609 166.942,-74.9254\"/>\n",
|
||
"</g>\n",
|
||
"<!-- 4 -->\n",
|
||
"<g id=\"node5\" class=\"node\">\n",
|
||
"<title>4</title>\n",
|
||
"<path fill=\"#8139e5\" fill-opacity=\"0.976471\" stroke=\"#000000\" d=\"M321,-68C321,-68 228,-68 228,-68 222,-68 216,-62 216,-56 216,-56 216,-12 216,-12 216,-6 222,0 228,0 228,0 321,0 321,0 327,0 333,-6 333,-12 333,-12 333,-56 333,-56 333,-62 327,-68 321,-68\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"274.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.043</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"274.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 46</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"274.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 1, 45]</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"274.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = virginica</text>\n",
|
||
"</g>\n",
|
||
"<!-- 2->4 -->\n",
|
||
"<g id=\"edge4\" class=\"edge\">\n",
|
||
"<title>2->4</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M231.8207,-103.9815C237.2016,-95.1585 242.8932,-85.8258 248.3059,-76.9506\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"251.3851,-78.6236 253.6038,-68.2637 245.4088,-74.9789 251.3851,-78.6236\"/>\n",
|
||
"</g>\n",
|
||
"</g>\n",
|
||
"</svg>\n"
|
||
],
|
||
"text/plain": [
|
||
"<graphviz.files.Source at 0x7f58dcdf44e0>"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import graphviz\n",
|
||
"with open(\"images/decision_trees/iris_tree.dot\") as f:\n",
|
||
" dot_graph = f.read()\n",
|
||
"dot = graphviz.Source(dot_graph)\n",
|
||
"dot.format = 'png'\n",
|
||
"dot.render(filename='iris_tree', directory='images/decision_trees', cleanup=True)\n",
|
||
"dot"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/haesun/anaconda3/envs/handson-ml/lib/python3.5/site-packages/matplotlib/contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
|
||
" s)\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Saving figure decision_tree_decision_boundaries_plot\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x7f58dc98aa58>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from matplotlib.colors import ListedColormap\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, linewidth=10)\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(\"꽃잎 길이\", fontsize=14)\n",
|
||
" plt.ylabel(\"꽃잎 폭\", 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",
|
||
"\n",
|
||
"plt.figure(figsize=(8, 4))\n",
|
||
"plot_decision_boundary(tree_clf, X, y)\n",
|
||
"plt.plot([2.45, 2.45], [0, 3], \"k-\", linewidth=2)\n",
|
||
"plt.plot([2.45, 7.5], [1.75, 1.75], \"k--\", linewidth=2)\n",
|
||
"plt.plot([4.95, 4.95], [0, 1.75], \"k:\", linewidth=2)\n",
|
||
"plt.plot([4.85, 4.85], [1.75, 3], \"k:\", linewidth=2)\n",
|
||
"plt.text(1.40, 1.0, \"깊이=0\", fontsize=15)\n",
|
||
"plt.text(3.2, 1.80, \"깊이=1\", fontsize=13)\n",
|
||
"plt.text(4.05, 0.5, \"(깊이=2)\", fontsize=11)\n",
|
||
"\n",
|
||
"save_fig(\"decision_tree_decision_boundaries_plot\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Predicting classes and class probabilities"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"array([[0. , 0.90740741, 0.09259259]])"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"tree_clf.predict_proba([[5, 1.5]])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"array([1])"
|
||
]
|
||
},
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"tree_clf.predict([[5, 1.5]])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Sensitivity to training set details"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"array([[4.8, 1.8]])"
|
||
]
|
||
},
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"X[(X[:, 1]==X[:, 1][y==1].max()) & (y==1)] # widest Iris-Versicolor flower"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,\n",
|
||
" max_features=None, max_leaf_nodes=None,\n",
|
||
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
|
||
" min_samples_leaf=1, min_samples_split=2,\n",
|
||
" min_weight_fraction_leaf=0.0, presort=False, random_state=40,\n",
|
||
" splitter='best')"
|
||
]
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"not_widest_versicolor = (X[:, 1]!=1.8) | (y==2)\n",
|
||
"X_tweaked = X[not_widest_versicolor]\n",
|
||
"y_tweaked = y[not_widest_versicolor]\n",
|
||
"\n",
|
||
"tree_clf_tweaked = DecisionTreeClassifier(max_depth=2, random_state=40)\n",
|
||
"tree_clf_tweaked.fit(X_tweaked, y_tweaked)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/haesun/anaconda3/envs/handson-ml/lib/python3.5/site-packages/matplotlib/contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
|
||
" s)\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Saving figure decision_tree_instability_plot\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x7f58dc96f358>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"plt.figure(figsize=(8, 4))\n",
|
||
"plot_decision_boundary(tree_clf_tweaked, X_tweaked, y_tweaked, legend=False)\n",
|
||
"plt.plot([0, 7.5], [0.8, 0.8], \"k-\", linewidth=2)\n",
|
||
"plt.plot([0, 7.5], [1.75, 1.75], \"k--\", linewidth=2)\n",
|
||
"plt.text(1.0, 0.9, \"깊이=0\", fontsize=15)\n",
|
||
"plt.text(1.0, 1.80, \"깊이=1\", fontsize=13)\n",
|
||
"\n",
|
||
"save_fig(\"decision_tree_instability_plot\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/haesun/anaconda3/envs/handson-ml/lib/python3.5/site-packages/matplotlib/contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
|
||
" s)\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Saving figure min_samples_leaf_plot\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x7f58dc978cf8>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.datasets import make_moons\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",
|
||
"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(\"제약 없음\", 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",
|
||
"\n",
|
||
"save_fig(\"min_samples_leaf_plot\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/haesun/anaconda3/envs/handson-ml/lib/python3.5/site-packages/matplotlib/contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
|
||
" s)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x7f58d43bf630>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"angle = np.pi / 180 * 20\n",
|
||
"rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n",
|
||
"Xr = X.dot(rotation_matrix)\n",
|
||
"\n",
|
||
"tree_clf_r = DecisionTreeClassifier(random_state=42)\n",
|
||
"tree_clf_r.fit(Xr, y)\n",
|
||
"\n",
|
||
"plt.figure(figsize=(8, 3))\n",
|
||
"plot_decision_boundary(tree_clf_r, Xr, y, axes=[0.5, 7.5, -1.0, 1], iris=False)\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/home/haesun/anaconda3/envs/handson-ml/lib/python3.5/site-packages/matplotlib/contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
|
||
" s)\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Saving figure sensitivity_to_rotation_plot\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x7f58d42bdba8>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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",
|
||
"save_fig(\"sensitivity_to_rotation_plot\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Regression trees"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 14,
|
||
"metadata": {},
|
||
"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": 15,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,\n",
|
||
" max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
|
||
" min_impurity_split=None, min_samples_leaf=1,\n",
|
||
" min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
|
||
" presort=False, random_state=42, splitter='best')"
|
||
]
|
||
},
|
||
"execution_count": 15,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"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": 16,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Saving figure tree_regression_plot\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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hpG5e9VlEImemY0A/wm8AngN8OfAzcAN7n5jlWUTEZFyKQNk2GgAIVIQM1sH7ALuAX4PuNXdP1xtqUREJARlgAwTXcIkUhB33w3sBy4G/gn4SO8yZna1mT1kZs+Z2XTgIoqISEmUATJMRqsugEhTmNm7gDe3fp31/qf3DgN/BbwFmAxVNhERKZcyQIaJBhAiBTCz3we+CHwVeB640sxudvcfdC/n7jtby68OX0oRESmDMkCGjS5hEsnJzH4T2AncD/wp8AngBWBLleUSEZHyKQNkGGkAIZKDmb0B+DfgAPBH7j7n7geB24A/NLPfrrSAIiJSGmWADCsNIEQyap2C/iZwBHi7u/+i6883AkeBv66ibCIiUi5lgAwz3QMhkpG7/5DkwUH9/nYYWB62RCIiEooyQIaZBhAiAZnZKMl+NwosM7OXAi+4+7FqSyYiImVTBkhTaAAhEtYngBu6fj8K7AHWVlIaEREJSRkgjaAnUYuIiIiISGq6iVpERERERFLTAEJERERERFLTAEJERERERFLTAEJERERERFLTAEJERERERFLTAEJERERERFLTAEJERERERFL7PxXpCt5us4xpAAAAAElFTkSuQmCC\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x7f58d42b7cc0>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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, \"깊이=0\", fontsize=15)\n",
|
||
"plt.text(0.01, 0.2, \"깊이=1\", fontsize=13)\n",
|
||
"plt.text(0.65, 0.8, \"깊이=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, \"깊이=2\", fontsize=13)\n",
|
||
"plt.title(\"max_depth=3\", fontsize=14)\n",
|
||
"\n",
|
||
"save_fig(\"tree_regression_plot\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 17,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"export_graphviz(\n",
|
||
" tree_reg1,\n",
|
||
" out_file=image_path(\"regression_tree.dot\"),\n",
|
||
" feature_names=[\"x1\"],\n",
|
||
" rounded=True,\n",
|
||
" filled=True\n",
|
||
" )"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/svg+xml": [
|
||
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
||
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
||
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
||
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
|
||
" -->\n",
|
||
"<!-- Title: Tree Pages: 1 -->\n",
|
||
"<svg width=\"462pt\" height=\"269pt\"\n",
|
||
" viewBox=\"0.00 0.00 462.00 269.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
||
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 265)\">\n",
|
||
"<title>Tree</title>\n",
|
||
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-265 458,-265 458,4 -4,4\"/>\n",
|
||
"<!-- 0 -->\n",
|
||
"<g id=\"node1\" class=\"node\">\n",
|
||
"<title>0</title>\n",
|
||
"<path fill=\"#e58139\" fill-opacity=\"0.325490\" stroke=\"#000000\" d=\"M266,-261C266,-261 184,-261 184,-261 178,-261 172,-255 172,-249 172,-249 172,-205 172,-205 172,-199 178,-193 184,-193 184,-193 266,-193 266,-193 272,-193 278,-199 278,-205 278,-205 278,-249 278,-249 278,-255 272,-261 266,-261\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"225\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">x1 <= 0.197</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"225\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.098</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"225\" y=\"-215.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 200</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"225\" y=\"-200.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.354</text>\n",
|
||
"</g>\n",
|
||
"<!-- 1 -->\n",
|
||
"<g id=\"node2\" class=\"node\">\n",
|
||
"<title>1</title>\n",
|
||
"<path fill=\"#e58139\" fill-opacity=\"0.780392\" stroke=\"#000000\" d=\"M202,-157C202,-157 128,-157 128,-157 122,-157 116,-151 116,-145 116,-145 116,-101 116,-101 116,-95 122,-89 128,-89 128,-89 202,-89 202,-89 208,-89 214,-95 214,-101 214,-101 214,-145 214,-145 214,-151 208,-157 202,-157\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"165\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">x1 <= 0.092</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"165\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.038</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"165\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 44</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"165\" y=\"-96.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.689</text>\n",
|
||
"</g>\n",
|
||
"<!-- 0->1 -->\n",
|
||
"<g id=\"edge1\" class=\"edge\">\n",
|
||
"<title>0->1</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M205.3538,-192.9465C200.381,-184.3271 194.9757,-174.9579 189.7852,-165.9611\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"192.7193,-164.0428 184.6904,-157.13 186.656,-167.5409 192.7193,-164.0428\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"178.2122\" y=\"-177.5761\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n",
|
||
"</g>\n",
|
||
"<!-- 4 -->\n",
|
||
"<g id=\"node5\" class=\"node\">\n",
|
||
"<title>4</title>\n",
|
||
"<path fill=\"#e58139\" fill-opacity=\"0.200000\" stroke=\"#000000\" d=\"M326,-157C326,-157 244,-157 244,-157 238,-157 232,-151 232,-145 232,-145 232,-101 232,-101 232,-95 238,-89 244,-89 244,-89 326,-89 326,-89 332,-89 338,-95 338,-101 338,-101 338,-145 338,-145 338,-151 332,-157 326,-157\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"285\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">x1 <= 0.772</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"285\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.074</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"285\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 156</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"285\" y=\"-96.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.259</text>\n",
|
||
"</g>\n",
|
||
"<!-- 0->4 -->\n",
|
||
"<g id=\"edge4\" class=\"edge\">\n",
|
||
"<title>0->4</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M244.6462,-192.9465C249.619,-184.3271 255.0243,-174.9579 260.2148,-165.9611\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"263.344,-167.5409 265.3096,-157.13 257.2807,-164.0428 263.344,-167.5409\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"271.7878\" y=\"-177.5761\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n",
|
||
"</g>\n",
|
||
"<!-- 2 -->\n",
|
||
"<g id=\"node3\" class=\"node\">\n",
|
||
"<title>2</title>\n",
|
||
"<path fill=\"#e58139\" stroke=\"#000000\" d=\"M86,-53C86,-53 12,-53 12,-53 6,-53 0,-47 0,-41 0,-41 0,-12 0,-12 0,-6 6,0 12,0 12,0 86,0 86,0 92,0 98,-6 98,-12 98,-12 98,-41 98,-41 98,-47 92,-53 86,-53\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"49\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.018</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"49\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 20</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"49\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.854</text>\n",
|
||
"</g>\n",
|
||
"<!-- 1->2 -->\n",
|
||
"<g id=\"edge2\" class=\"edge\">\n",
|
||
"<title>1->2</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M124.1027,-88.9777C112.6551,-79.4545 100.2313,-69.1191 88.8455,-59.6473\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"91.0797,-56.9532 81.1536,-53.2485 86.6029,-62.3345 91.0797,-56.9532\"/>\n",
|
||
"</g>\n",
|
||
"<!-- 3 -->\n",
|
||
"<g id=\"node4\" class=\"node\">\n",
|
||
"<title>3</title>\n",
|
||
"<path fill=\"#e58139\" fill-opacity=\"0.596078\" stroke=\"#000000\" d=\"M202,-53C202,-53 128,-53 128,-53 122,-53 116,-47 116,-41 116,-41 116,-12 116,-12 116,-6 122,0 128,0 128,0 202,0 202,0 208,0 214,-6 214,-12 214,-12 214,-41 214,-41 214,-47 208,-53 202,-53\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"165\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.013</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"165\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 24</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"165\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.552</text>\n",
|
||
"</g>\n",
|
||
"<!-- 1->3 -->\n",
|
||
"<g id=\"edge3\" class=\"edge\">\n",
|
||
"<title>1->3</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M165,-88.9777C165,-80.7364 165,-71.887 165,-63.5153\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"168.5001,-63.2484 165,-53.2485 161.5001,-63.2485 168.5001,-63.2484\"/>\n",
|
||
"</g>\n",
|
||
"<!-- 5 -->\n",
|
||
"<g id=\"node6\" class=\"node\">\n",
|
||
"<title>5</title>\n",
|
||
"<path fill=\"transparent\" stroke=\"#000000\" d=\"M326,-53C326,-53 244,-53 244,-53 238,-53 232,-47 232,-41 232,-41 232,-12 232,-12 232,-6 238,0 244,0 244,0 326,0 326,0 332,0 338,-6 338,-12 338,-12 338,-41 338,-41 338,-47 332,-53 326,-53\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"285\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.015</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"285\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 110</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"285\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.111</text>\n",
|
||
"</g>\n",
|
||
"<!-- 4->5 -->\n",
|
||
"<g id=\"edge5\" class=\"edge\">\n",
|
||
"<title>4->5</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M285,-88.9777C285,-80.7364 285,-71.887 285,-63.5153\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"288.5001,-63.2484 285,-53.2485 281.5001,-63.2485 288.5001,-63.2484\"/>\n",
|
||
"</g>\n",
|
||
"<!-- 6 -->\n",
|
||
"<g id=\"node7\" class=\"node\">\n",
|
||
"<title>6</title>\n",
|
||
"<path fill=\"#e58139\" fill-opacity=\"0.678431\" stroke=\"#000000\" d=\"M442,-53C442,-53 368,-53 368,-53 362,-53 356,-47 356,-41 356,-41 356,-12 356,-12 356,-6 362,0 368,0 368,0 442,0 442,0 448,0 454,-6 454,-12 454,-12 454,-41 454,-41 454,-47 448,-53 442,-53\"/>\n",
|
||
"<text text-anchor=\"middle\" x=\"405\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.036</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"405\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 46</text>\n",
|
||
"<text text-anchor=\"middle\" x=\"405\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.615</text>\n",
|
||
"</g>\n",
|
||
"<!-- 4->6 -->\n",
|
||
"<g id=\"edge6\" class=\"edge\">\n",
|
||
"<title>4->6</title>\n",
|
||
"<path fill=\"none\" stroke=\"#000000\" d=\"M327.3075,-88.9777C339.1499,-79.4545 352.0021,-69.1191 363.7805,-59.6473\"/>\n",
|
||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"366.1382,-62.2427 371.7376,-53.2485 361.7514,-56.7877 366.1382,-62.2427\"/>\n",
|
||
"</g>\n",
|
||
"</g>\n",
|
||
"</svg>\n"
|
||
],
|
||
"text/plain": [
|
||
"<graphviz.files.Source at 0x7f58d41eadd8>"
|
||
]
|
||
},
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import graphviz\n",
|
||
"with open(\"images/decision_trees/regression_tree.dot\") as f:\n",
|
||
" dot_graph = f.read()\n",
|
||
"dot = graphviz.Source(dot_graph)\n",
|
||
"dot.format = 'png'\n",
|
||
"dot.render(filename='regression_tree', directory='images/decision_trees', cleanup=True)\n",
|
||
"dot"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 19,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Saving figure tree_regression_regularization_plot\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<matplotlib.figure.Figure at 0x7f58d42b7400>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"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(\"제약 없음\", 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",
|
||
"save_fig(\"tree_regression_regularization_plot\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"source": [
|
||
"# Exercise solutions"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 1. to 6."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"See appendix A."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"source": [
|
||
"## 7."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"_Exercise: train and fine-tune a Decision Tree for the moons dataset._"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"a. Generate a moons dataset using `make_moons(n_samples=10000, noise=0.4)`."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Adding `random_state=42` to make this notebook's output constant:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.datasets import make_moons\n",
|
||
"\n",
|
||
"X, y = make_moons(n_samples=10000, noise=0.4, random_state=42)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"b. Split it into a training set and a test set using `train_test_split()`."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"\n",
|
||
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"c. Use grid search with cross-validation (with the help of the `GridSearchCV` class) to find good hyperparameter values for a `DecisionTreeClassifier`. Hint: try various values for `max_leaf_nodes`."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Fitting 3 folds for each of 294 candidates, totalling 882 fits\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[Parallel(n_jobs=-1)]: Done 882 out of 882 | elapsed: 1.7s finished\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"GridSearchCV(cv=None, error_score='raise',\n",
|
||
" estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n",
|
||
" max_features=None, max_leaf_nodes=None,\n",
|
||
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
|
||
" min_samples_leaf=1, min_samples_split=2,\n",
|
||
" min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
|
||
" splitter='best'),\n",
|
||
" fit_params=None, iid=True, n_jobs=-1,\n",
|
||
" param_grid={'min_samples_split': [2, 3, 4], 'max_leaf_nodes': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]},\n",
|
||
" pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
|
||
" scoring=None, verbose=1)"
|
||
]
|
||
},
|
||
"execution_count": 22,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.model_selection import GridSearchCV\n",
|
||
"\n",
|
||
"params = {'max_leaf_nodes': list(range(2, 100)), 'min_samples_split': [2, 3, 4]}\n",
|
||
"grid_search_cv = GridSearchCV(DecisionTreeClassifier(random_state=42), params, n_jobs=-1, verbose=1)\n",
|
||
"\n",
|
||
"grid_search_cv.fit(X_train, y_train)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n",
|
||
" max_features=None, max_leaf_nodes=17,\n",
|
||
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
|
||
" min_samples_leaf=1, min_samples_split=2,\n",
|
||
" min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
|
||
" splitter='best')"
|
||
]
|
||
},
|
||
"execution_count": 23,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"grid_search_cv.best_estimator_"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"d. Train it on the full training set using these hyperparameters, and measure your model's performance on the test set. You should get roughly 85% to 87% accuracy."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"By default, `GridSearchCV` trains the best model found on the whole training set (you can change this by setting `refit=False`), so we don't need to do it again. We can simply evaluate the model's accuracy:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.8695"
|
||
]
|
||
},
|
||
"execution_count": 24,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.metrics import accuracy_score\n",
|
||
"\n",
|
||
"y_pred = grid_search_cv.predict(X_test)\n",
|
||
"accuracy_score(y_test, y_pred)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 8."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"_Exercise: Grow a forest._"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"a. Continuing the previous exercise, generate 1,000 subsets of the training set, each containing 100 instances selected randomly. Hint: you can use Scikit-Learn's `ShuffleSplit` class for this."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.model_selection import ShuffleSplit\n",
|
||
"\n",
|
||
"n_trees = 1000\n",
|
||
"n_instances = 100\n",
|
||
"\n",
|
||
"mini_sets = []\n",
|
||
"\n",
|
||
"rs = ShuffleSplit(n_splits=n_trees, test_size=len(X_train) - n_instances, random_state=42)\n",
|
||
"for mini_train_index, mini_test_index in rs.split(X_train):\n",
|
||
" X_mini_train = X_train[mini_train_index]\n",
|
||
" y_mini_train = y_train[mini_train_index]\n",
|
||
" mini_sets.append((X_mini_train, y_mini_train))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"b. Train one Decision Tree on each subset, using the best hyperparameter values found above. Evaluate these 1,000 Decision Trees on the test set. Since they were trained on smaller sets, these Decision Trees will likely perform worse than the first Decision Tree, achieving only about 80% accuracy."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.8054494999999999"
|
||
]
|
||
},
|
||
"execution_count": 26,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.base import clone\n",
|
||
"\n",
|
||
"forest = [clone(grid_search_cv.best_estimator_) for _ in range(n_trees)]\n",
|
||
"\n",
|
||
"accuracy_scores = []\n",
|
||
"\n",
|
||
"for tree, (X_mini_train, y_mini_train) in zip(forest, mini_sets):\n",
|
||
" tree.fit(X_mini_train, y_mini_train)\n",
|
||
" \n",
|
||
" y_pred = tree.predict(X_test)\n",
|
||
" accuracy_scores.append(accuracy_score(y_test, y_pred))\n",
|
||
"\n",
|
||
"np.mean(accuracy_scores)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"c. Now comes the magic. For each test set instance, generate the predictions of the 1,000 Decision Trees, and keep only the most frequent prediction (you can use SciPy's `mode()` function for this). This gives you _majority-vote predictions_ over the test set."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 27,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"Y_pred = np.empty([n_trees, len(X_test)], dtype=np.uint8)\n",
|
||
"\n",
|
||
"for tree_index, tree in enumerate(forest):\n",
|
||
" Y_pred[tree_index] = tree.predict(X_test)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from scipy.stats import mode\n",
|
||
"\n",
|
||
"y_pred_majority_votes, n_votes = mode(Y_pred, axis=0)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"d. Evaluate these predictions on the test set: you should obtain a slightly higher accuracy than your first model (about 0.5 to 1.5% higher). Congratulations, you have trained a Random Forest classifier!"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 29,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"0.872"
|
||
]
|
||
},
|
||
"execution_count": 29,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"accuracy_score(y_test, y_pred_majority_votes.reshape([-1]))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.5.4"
|
||
},
|
||
"nav_menu": {
|
||
"height": "309px",
|
||
"width": "468px"
|
||
},
|
||
"toc": {
|
||
"navigate_menu": true,
|
||
"number_sections": true,
|
||
"sideBar": true,
|
||
"threshold": 6,
|
||
"toc_cell": false,
|
||
"toc_section_display": "block",
|
||
"toc_window_display": false
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 1
|
||
}
|