{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPython 3.7.3\n", "IPython 7.5.0\n", "\n", "numpy 1.16.3\n", "scipy 1.2.1\n", "sklearn 0.21.1\n", "pandas 0.24.2\n", "matplotlib 3.0.3\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -v -p numpy,scipy,sklearn,pandas,matplotlib" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**6장 – 결정 트리**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "_이 노트북은 6장에 있는 모든 샘플 코드와 연습문제 해답을 가지고 있습니다._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 설정" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "파이썬 2와 3을 모두 지원합니다. 공통 모듈을 임포트하고 맷플롯립 그림이 노트북 안에 포함되도록 설정하고 생성한 그림을 저장하기 위한 함수를 준비합니다:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# 파이썬 2와 파이썬 3 지원\n", "from __future__ import division, print_function, unicode_literals\n", "\n", "# 공통\n", "import numpy as np\n", "import os\n", "\n", "# 일관된 출력을 위해 유사난수 초기화\n", "np.random.seed(42)\n", "\n", "# 맷플롯립 설정\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", "# 그림을 저장할 폴드\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", " if tight_layout:\n", " plt.tight_layout()\n", " plt.savefig(image_path(fig_id) + \".png\", format='png', dpi=300)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 훈련과 시각화" ] }, { "cell_type": "code", "execution_count": 3, "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,\n", " random_state=42, splitter='best')" ] }, "execution_count": 3, "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": 4, "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": 5, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "Tree\n", "\n", "\n", "\n", "0\n", "\n", "꽃잎 길이 (cm) <= 2.45\n", "gini = 0.667\n", "samples = 150\n", "value = [50, 50, 50]\n", "class = setosa\n", "\n", "\n", "\n", "1\n", "\n", "gini = 0.0\n", "samples = 50\n", "value = [50, 0, 0]\n", "class = setosa\n", "\n", "\n", "\n", "0->1\n", "\n", "\n", "True\n", "\n", "\n", "\n", "2\n", "\n", "꽃잎 너비 (cm) <= 1.75\n", "gini = 0.5\n", "samples = 100\n", "value = [0, 50, 50]\n", "class = versicolor\n", "\n", "\n", "\n", "0->2\n", "\n", "\n", "False\n", "\n", "\n", "\n", "3\n", "\n", "gini = 0.168\n", "samples = 54\n", "value = [0, 49, 5]\n", "class = versicolor\n", "\n", "\n", "\n", "2->3\n", "\n", "\n", "\n", "\n", "\n", "4\n", "\n", "gini = 0.043\n", "samples = 46\n", "value = [0, 1, 45]\n", "class = virginica\n", "\n", "\n", "\n", "2->4\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 5, "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": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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)\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": [ "# 클래스와 클래스 확률을 예측하기" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0. , 0.90740741, 0.09259259]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree_clf.predict_proba([[5, 1.5]])" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree_clf.predict([[5, 1.5]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 훈련 세트에 민감함" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4.8, 1.8]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X[(X[:, 1]==X[:, 1][y==1].max()) & (y==1)] # 가장 너비가 큰 Iris-Versicolor" ] }, { "cell_type": "code", "execution_count": 10, "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,\n", " random_state=40, splitter='best')" ] }, "execution_count": 10, "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": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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": [ "# 회귀 트리" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# 2차식으로 만든 데이터셋 + 잡음\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": 16, "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": 16, "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": 17, "metadata": {}, "outputs": [ { "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": [ "
" ] }, "metadata": { "needs_background": "light" }, "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": 18, "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": 19, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "Tree\n", "\n", "\n", "\n", "0\n", "\n", "x1 <= 0.197\n", "mse = 0.098\n", "samples = 200\n", "value = 0.354\n", "\n", "\n", "\n", "1\n", "\n", "x1 <= 0.092\n", "mse = 0.038\n", "samples = 44\n", "value = 0.689\n", "\n", "\n", "\n", "0->1\n", "\n", "\n", "True\n", "\n", "\n", "\n", "4\n", "\n", "x1 <= 0.772\n", "mse = 0.074\n", "samples = 156\n", "value = 0.259\n", "\n", "\n", "\n", "0->4\n", "\n", "\n", "False\n", "\n", "\n", "\n", "2\n", "\n", "mse = 0.018\n", "samples = 20\n", "value = 0.854\n", "\n", "\n", "\n", "1->2\n", "\n", "\n", "\n", "\n", "\n", "3\n", "\n", "mse = 0.013\n", "samples = 24\n", "value = 0.552\n", "\n", "\n", "\n", "1->3\n", "\n", "\n", "\n", "\n", "\n", "5\n", "\n", "mse = 0.015\n", "samples = 110\n", "value = 0.111\n", "\n", "\n", "\n", "4->5\n", "\n", "\n", "\n", "\n", "\n", "6\n", "\n", "mse = 0.036\n", "samples = 46\n", "value = 0.615\n", "\n", "\n", "\n", "4->6\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 19, "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": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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": [ "# 연습문제 해답" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. to 6." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "부록 A 참조." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## 7." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "_문제: moons 데이터셋에 결정 트리를 훈련시키고 세밀하게 튜닝해보세요._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a. `make_moons(n_samples=1000, noise=0.4)`를 사용해 데이터셋을 생성합니다." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`random_state=42`를 지정하여 결과를 일정하게 만듭니다:" ] }, { "cell_type": "code", "execution_count": 21, "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. 이를 `train_test_split()`을 사용해 훈련 세트와 테스트 세트로 나눕니다" ] }, { "cell_type": "code", "execution_count": 22, "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. `DecisionTreeClassifier`의 최적의 매개변수를 찾기 위해 교차 검증과 함께 그리드 탐색을 수행합니다(`GridSearchCV`를 사용하면 됩니다). 힌트: 여러 가지 `max_leaf_nodes` 값을 시도해보세요." ] }, { "cell_type": "code", "execution_count": 23, "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)]: Using backend LokyBackend with 4 concurrent workers.\n", "[Parallel(n_jobs=-1)]: Done 882 out of 882 | elapsed: 2.5s finished\n" ] }, { "data": { "text/plain": [ "GridSearchCV(cv=3, error_score='raise-deprecating',\n", " estimator=DecisionTreeClassifier(class_weight=None,\n", " criterion='gini', max_depth=None,\n", " max_features=None,\n", " max_leaf_nodes=None,\n", " min_impurity_decrease=0.0,\n", " min_impurity_split=None,\n", " min_samples_leaf=1,\n", " min_samples_split=2,\n", " min_weight_fraction_leaf=0.0,\n", " presort=False, random_state=42,\n", " splitter='best'),\n", " iid='warn', n_jobs=-1,\n", " param_grid={'max_leaf_nodes': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n", " 13, 14, 15, 16, 17, 18, 19, 20, 21,\n", " 22, 23, 24, 25, 26, 27, 28, 29, 30,\n", " 31, ...],\n", " 'min_samples_split': [2, 3, 4]},\n", " pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n", " scoring=None, verbose=1)" ] }, "execution_count": 23, "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, cv=3, n_jobs=-1, verbose=1)\n", "\n", "grid_search_cv.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 24, "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,\n", " random_state=42, splitter='best')" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid_search_cv.best_estimator_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d. 찾은 매개변수를 사용해 전체 훈련 세트에 대해 모델을 훈련시키고 테스트 세트에서 성능을 측정합니다. 대략 85~87%의 정확도가 나올 것입니다." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "기본적으로 `GridSearchCV`는 전체 훈련 세트로 찾은 최적의 모델을 다시 훈련시킵니다(`refit=False`로 지정해서 바꿀 수 있습니다). 그래서 별도로 작업할 필요가 없습니다. 모델의 정확도를 바로 평가할 수 있습니다:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8695" ] }, "execution_count": 25, "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: 랜덤 포레스트를 만들어보세요._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a. 이전 연습문제에 이어서, 훈련 세트의 서브셋을 1,000개 생성합니다. 각각은 무작위로 선택된 100개의 샘플을 담고 있습니다. 힌트: 사이킷런의 `ShuffleSplit`을 사용할 수 있습니다." ] }, { "cell_type": "code", "execution_count": 26, "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. 앞에서 찾은 최적의 매개변수를 사용해 각 서브셋에 결정 트리를 훈련시킵니다. 테스트 세트로 이 1,000개의 결정 트리를 평가합니다. 더 작은 데이터셋에서 훈련되었기 때문에 이 결정 트리는 앞서 만든 결정 트리보다 성능이 떨어져 약8 0%의 정확도를 냅니다." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8054499999999999" ] }, "execution_count": 27, "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. 이제 마술을 부릴 차례입니다. 각 테스트 세트 샘플에 대해 1,000개의 결정 트리 예측을 만들고 다수로 나온 예측만 취합니다(사이파이의 `mode()` 함수를 사용할 수 있습니다). 그러면 테스트 세트에 대한 _다수결 예측_이 만들어집니다." ] }, { "cell_type": "code", "execution_count": 28, "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": 29, "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. 테스트 세트에서 이 예측을 평가합니다. 앞서 만든 모델보다 조금 높은(약 0.5~1.5% 정도) 정확도를 얻게 될 것입니다. 축하합니다. 랜덤 포레스트 분류기를 훈련시켰습니다!" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.872" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "accuracy_score(y_test, y_pred_majority_votes.reshape([-1]))" ] } ], "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.7.3" }, "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 }