{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "**6장 – 결정 트리**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "_이 노트북은 6장에 있는 모든 샘플 코드와 연습문제 해답을 가지고 있습니다._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", "
\n", " 구글 코랩에서 실행하기\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 설정" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "먼저 몇 개의 모듈을 임포트합니다. 맷플롯립 그래프를 인라인으로 출력하도록 만들고 그림을 저장하는 함수를 준비합니다. 또한 파이썬 버전이 3.5 이상인지 확인합니다(파이썬 2.x에서도 동작하지만 곧 지원이 중단되므로 파이썬 3을 사용하는 것이 좋습니다). 사이킷런 버전이 0.20 이상인지도 확인합니다." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:07.215807Z", "iopub.status.busy": "2021-10-23T12:53:07.214689Z", "iopub.status.idle": "2021-10-23T12:53:08.708427Z", "shell.execute_reply": "2021-10-23T12:53:08.709400Z" } }, "outputs": [], "source": [ "# 파이썬 ≥3.5 필수\n", "import sys\n", "assert sys.version_info >= (3, 5)\n", "\n", "# 사이킷런 ≥0.20 필수\n", "import sklearn\n", "assert sklearn.__version__ >= \"0.20\"\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 as mpl\n", "import matplotlib.pyplot as plt\n", "mpl.rc('axes', labelsize=14)\n", "mpl.rc('xtick', labelsize=12)\n", "mpl.rc('ytick', labelsize=12)\n", "\n", "# 그림을 저장할 위치\n", "PROJECT_ROOT_DIR = \".\"\n", "CHAPTER_ID = \"decision_trees\"\n", "IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID)\n", "os.makedirs(IMAGES_PATH, exist_ok=True)\n", "\n", "def save_fig(fig_id, tight_layout=True, fig_extension=\"png\", resolution=300):\n", " path = os.path.join(IMAGES_PATH, fig_id + \".\" + fig_extension)\n", " print(\"그림 저장:\", fig_id)\n", " if tight_layout:\n", " plt.tight_layout()\n", " plt.savefig(path, format=fig_extension, dpi=resolution)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 결정 트리 학습과 시각화" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:08.716962Z", "iopub.status.busy": "2021-10-23T12:53:08.715975Z", "iopub.status.idle": "2021-10-23T12:53:08.967541Z", "shell.execute_reply": "2021-10-23T12:53:08.966581Z" } }, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(max_depth=2, random_state=42)" ] }, "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:] # 꽃잎 길이와 너비\n", "y = iris.target\n", "\n", "tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)\n", "tree_clf.fit(X, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**<그림 6-1. 붓꽃 결정 트리> 생성 코드**" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:08.975823Z", "iopub.status.busy": "2021-10-23T12:53:08.974778Z", "iopub.status.idle": "2021-10-23T12:53:09.073431Z", "shell.execute_reply": "2021-10-23T12:53:09.072533Z" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "Tree\n", "\n", "\n", "\n", "0\n", "\n", "petal length (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", "petal width (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": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from graphviz import Source\n", "from sklearn.tree import export_graphviz\n", "\n", "export_graphviz(\n", " tree_clf,\n", " out_file=os.path.join(IMAGES_PATH, \"iris_tree.dot\"),\n", " feature_names=iris.feature_names[2:],\n", " class_names=iris.target_names,\n", " rounded=True,\n", " filled=True\n", " )\n", "\n", "Source.from_file(os.path.join(IMAGES_PATH, \"iris_tree.dot\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 예측하기" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**식 6-1: 지니 불순도**\n", "\n", "$\n", "G_i = 1 - \\sum\\limits_{k=1}^{n}{{p_{i,k}}^2}\n", "$\n", "\n", "**식 6-3: 엔트로피 불순도**\n", "\n", "$\n", "H_i = -\\sum\\limits_{k=1 \\atop p_{i,k} \\ne 0}^{n}{{p_{i,k}}\\log_2(p_{i,k})}\n", "$\n", "\n", "\n", "**식 6-2: 분류에 대한 CART 비용 함수**\n", "\n", "$\n", "\\begin{split}\n", "&J(k, t_k) = \\dfrac{m_{\\text{left}}}{m}G_\\text{left} + \\dfrac{m_{\\text{right}}}{m}G_{\\text{right}}\\\\\n", "&\\text{여기에서 }\\begin{cases}\n", "G_\\text{left/right} \\text{는 왼쪽/오른쪽 서브셋의 불순도}\\\\\n", "m_\\text{left/right} \\text{는 왼쪽/오른쪽 서브셋의 샘플 수}\n", "\\end{cases}\n", "\\end{split}\n", "$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**<그림 6-2. 결정 트리의 결정 경계> 생성 코드**" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:09.079551Z", "iopub.status.busy": "2021-10-23T12:53:09.078548Z", "iopub.status.idle": "2021-10-23T12:53:10.623472Z", "shell.execute_reply": "2021-10-23T12:53:10.624564Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "그림 저장: decision_tree_decision_boundaries_plot\n" ] }, { "data": { "image/png": "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klOZNu2DGu2femrURjGIZDMlOJJ2jRptW6/tIkH55JOP+OWXVfTuvUfVtuOOO4tXXvmEt9+exb33PsuECc8yfPjlDbrOggVzeeaZ5CYXvXv35aWXPubVV2dw222PcMklp1BWFuo5veiiq7j99qE12l999YVcffWFSY1BJEhKcCTtOnUayiabNKmxbZNNmtCp09AoR4gE45lnRnHMMadH3d+hQxduv/0RnnzyAVasWA7A229P5MQT92XAgD4cf/zefPLJZAAmT57E4Yf35oorzqJfv5045pi+fPPNlwBcd90f+eabLzniiF256KITq87/yivPcfzxe7Pffp0YM+a+esV+4IH9adJkcwB23HEXwPnpp2UA9Oy5K8uWLWHOnG+q2p966gWceuoF9bqGSCbTIGNJu8qBxKqikkw3efIkBg26Mmabrl170KTJ5sye/TUtW27NvfcOZ8yY12jevAWzZs3k3HMP5/335wPw1VczuP76exg58nFeeGEMf/rTWbz88lRuvPF+brnlz7z88tQa516zZjVjx37IggVz6d+/FyeeeA5NmzZj2LDBTJnyTsR4HnjgBTp27Fpj29ixj9OhQ1fatm1ftW333ffmgw/epHPnHQAYMUKPpyS3pDXBMbOtgNFAP2ApMNTdn4rQbhhwNVBebfMu7j47HXFK6hUVHa+ERjJeSckCttmmqM527qF1nN555zXmz/+OU045oGrf+vXr+eGHUgA6ddqevfY6EIDjjjuT//u/QaxcuSLqeQcMOBWA9u07scUWLSkpWUDXrj0YNuyeuO9h8uT/MnLktTz++Os1trdq1YbFixfEfR6RbJPuHpz7gbVAEbAr8IqZfebuMyO0fdbdB6YzOMkMmiNHMkWjRk0oLy+L2ea7776mrGwNXbv2YMaMjznggN8ycuTjEdr9L4HrN656v8kmBaxfvx4g7h6c6dM/5IorBjJq1Et07dq9Rrvy8jK23HLrqs+lpYsAKCpqV+84RTJR2hIcM2sKnAD0cvdVwHtm9jJwJnBVuuKQzKY5ciSTdO++M7Nnf03r1m0j7l+wYC5XXXUeZ5xxEc2bt2D//ftxzz03MGvWTLp12wmAzz77uGqQ8rx53zFlyrv07bs/L730FN2770zz5i1o1qwFK1cujzuueHpwPvvsYy655BTuv/9f9Oq1+0b7v/32f5x55h+rPu+1V2iQ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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(\"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", "\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, \"Depth=0\", fontsize=15)\n", "plt.text(3.2, 1.80, \"Depth=1\", fontsize=13)\n", "plt.text(4.05, 0.5, \"(Depth=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": 5, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:10.632808Z", "iopub.status.busy": "2021-10-23T12:53:10.632121Z", "iopub.status.idle": "2021-10-23T12:53:10.651844Z", "shell.execute_reply": "2021-10-23T12:53:10.650809Z" } }, "outputs": [ { "data": { "text/plain": [ "array([[0. , 0.90740741, 0.09259259]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree_clf.predict_proba([[5, 1.5]])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:10.659356Z", "iopub.status.busy": "2021-10-23T12:53:10.658066Z", "iopub.status.idle": "2021-10-23T12:53:10.664741Z", "shell.execute_reply": "2021-10-23T12:53:10.665367Z" } }, "outputs": [ { "data": { "text/plain": [ "array([1])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree_clf.predict([[5, 1.5]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 규제 매개변수" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(회전 같은) 데이터셋의 작은 변화가 매우 다른 결정 트리를 만들었습니다.\n", "사이킷런에서 사용하는 CART 훈련 알고리즘은 확률적이기 때문에 동일한 데이터에서 같은 모델을 훈련하여 매번 매우 다른 모델을 만들 수 있습니다. 이를 확인하기 위해 `random_state`를 다른 값으로 지정해 보겠습니다:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:10.673648Z", "iopub.status.busy": "2021-10-23T12:53:10.671403Z", "iopub.status.idle": "2021-10-23T12:53:10.678032Z", "shell.execute_reply": "2021-10-23T12:53:10.677452Z" } }, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(max_depth=2, random_state=40)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tree_clf_tweaked = DecisionTreeClassifier(max_depth=2, random_state=40)\n", "tree_clf_tweaked.fit(X, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**<그림 6-8. 훈련 세트의 세부사항에 민감한 결정 트리> 생성 코드**" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:10.687273Z", "iopub.status.busy": "2021-10-23T12:53:10.686533Z", "iopub.status.idle": "2021-10-23T12:53:11.919984Z", "shell.execute_reply": "2021-10-23T12:53:11.921123Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "그림 저장: decision_tree_instability_plot\n" ] }, { "data": { "image/png": "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yy3XsvXWXenbtz93330jGzdu5OyzL8z4OiIiEg5KcMrEqlUrOPnkgzAzqqq60Lv3rpx00pmtlmowM26/fQq33fZr7r33jyxatJCtt96GAQP22SRJOP7406iq2opLL/0+a9as5qijTuS6625vOb7jjjvz85/fwMSJNzNp0i307Lljy+ukfDn//MvYuHEjt98+ns8+W85eew3m/vufpnv36rzeV0REio95urnRS8igQYP90UfnFDqM0BsypDfDh3+bK664odChiIhImevTx+a6++D4/ekm+hMREREpOUpwREREJHQ0BkfaLN9jaURERNpLPTgiIiISOqEaZGxm4XkYERERyYQGGYuIiEh5CNUYnP32G8Ts2U8WOgwREREJSEVF4iWC1IMjIiIioaMER0REREJHCY6IiIiEjhIcERERCR0lOCIiIhI6SnBEREQkdJTgiIiISOgowREREZHQUYIjIiIioaMER0REREInVEs1SOmor59Cbe14Gho+oUOHHejd+3Kqq08udFgiIhISSnAkcPX1U3jvvZ+yceNaABoaPua9934KoCRHRERyQq+oJHC1teNbkptmGzeupbZ2fIEiEhGRsFGCI4FraPikTftFRETaSgmOBK5Dhx3atF9ERKStlOBI4Hr3vpzNNuvUat9mm3Wid+/LCxSRiIiEjQYZS+CaBxKrikpERPIl0ATHzLYB7gaOAZYBl7v7XxK0GwdcATTE7B7k7h8GEafkX3X1yUpoREQkb4LuwZkArAeqgX2AaWb2hrvXJGj7N3c/M8jgpDhojhwREWmvwMbgmFlnYARwlbuvdveZwKPAWUHFIMWveY6choaPAW+ZI6e+fkqhQxMRkRIS5CDjfkCju8+L2fcGMDBJ+xPM7FMzqzGz8/MfnhQDzZEjIiK5EGSCUwWsjNu3AtgqQduHgD2A7sAPgF+Y2emJLmpmo81sjpnNWbp0eS7jlQLQHDkiIpILQSY4q4Eucfu6AKviG7r7O+6+yN2b3P0l4Cbg24ku6u53uvtgdx/cvXu3nActwdIcOSIikgtBJjjzgEoz2y1m395AogHG8RywvEQlRUVz5IiISC4EluC4+xfAFOAaM+tsZocA3wTuj29rZt80s64WcQAwFngkqFilcKqrT2a33W6gQ4cdAaNDhx3ZbbcbVEUlIiJtEnSZ+AXAPcASYDlwvrvXmNlQ4Al3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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, y, 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, \"Depth=0\", fontsize=15)\n", "plt.text(1.0, 1.80, \"Depth=1\", fontsize=13)\n", "\n", "save_fig(\"decision_tree_instability_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**<그림 6-3. min_samples_leaf 매개변수를 사용한 규제> 생성 코드**" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:11.926821Z", "iopub.status.busy": "2021-10-23T12:53:11.925080Z", "iopub.status.idle": "2021-10-23T12:53:14.297383Z", "shell.execute_reply": "2021-10-23T12:53:14.298691Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "그림 저장: min_samples_leaf_plot\n" ] }, { "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", "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n", "plt.sca(axes[0])\n", "plot_decision_boundary(deep_tree_clf1, Xm, ym, axes=[-1.5, 2.4, -1, 1.5], iris=False)\n", "plt.title(\"No restrictions\", fontsize=16)\n", "plt.sca(axes[1])\n", "plot_decision_boundary(deep_tree_clf2, Xm, ym, axes=[-1.5, 2.4, -1, 1.5], iris=False)\n", "plt.title(\"min_samples_leaf = {}\".format(deep_tree_clf2.min_samples_leaf), fontsize=14)\n", "plt.ylabel(\"\")\n", "\n", "save_fig(\"min_samples_leaf_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "데이터셋을 회전하면 완전히 다른 결정 경계를 만듭니다:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:14.304940Z", "iopub.status.busy": "2021-10-23T12:53:14.303197Z", "iopub.status.idle": "2021-10-23T12:53:14.786330Z", "shell.execute_reply": "2021-10-23T12:53:14.787259Z" } }, "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": "markdown", "metadata": {}, "source": [ "**<그림 6-7. 훈련 세트의 회전에 민감한 결정 트리> 생성 코드**" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:14.799508Z", "iopub.status.busy": "2021-10-23T12:53:14.798530Z", "iopub.status.idle": "2021-10-23T12:53:17.045378Z", "shell.execute_reply": "2021-10-23T12:53:17.046013Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "그림 저장: sensitivity_to_rotation_plot\n" ] }, { "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", "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n", "plt.sca(axes[0])\n", "plot_decision_boundary(tree_clf_s, Xs, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n", "plt.sca(axes[1])\n", "plot_decision_boundary(tree_clf_sr, Xsr, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n", "plt.ylabel(\"\")\n", "\n", "save_fig(\"sensitivity_to_rotation_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 회귀" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "간단한 선형 데이터셋을 준비합니다:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:17.055576Z", "iopub.status.busy": "2021-10-23T12:53:17.054630Z", "iopub.status.idle": "2021-10-23T12:53:17.072235Z", "shell.execute_reply": "2021-10-23T12:53:17.072916Z" } }, "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": "markdown", "metadata": {}, "source": [ "**코드 예제:**" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:17.082878Z", "iopub.status.busy": "2021-10-23T12:53:17.081654Z", "iopub.status.idle": "2021-10-23T12:53:17.086702Z", "shell.execute_reply": "2021-10-23T12:53:17.087430Z" } }, "outputs": [ { "data": { "text/plain": [ "DecisionTreeRegressor(max_depth=2, random_state=42)" ] }, "execution_count": 13, "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": "markdown", "metadata": {}, "source": [ "**<그림 6-5. 두 개의 결정 트리 회귀 모델의 예측> 생성 코드**" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:17.109083Z", "iopub.status.busy": "2021-10-23T12:53:17.107998Z", "iopub.status.idle": "2021-10-23T12:53:18.581377Z", "shell.execute_reply": "2021-10-23T12:53:18.582515Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "그림 저장: tree_regression_plot\n" ] }, { "data": { "image/png": "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4r28vJxbbrmF999/n+eeew4wHM2f/exnHHzwwRQVFXHsscfyl7/8pdt+w4YN46c//Slz585l0KBBlJaWMmXKFLZt2wZAXV0dEydOBGD48OEopRg2bFi3Y3zwwQeMHz+ekpISRo0axRNPPJHVuaxevZrt27fzb//2b53vlZSUMHHiRFasWJHVsQX3ee2113jttdf8NiMtme5pR6evDzE7duxIuS7pNSwqMvRz2zZL+pmunTAQdvuF4BAG/exR0MEO4GczklexCKx+ZpOfEeQlmxw6K7x3y9OdOWxe5Mslgww5yAMGDEi6bvfu3bqwsFDPnj1ba631ueeeq/fff3/9+9//Xq9cuVJfeumlOhKJdMvlHTp0qK6oqNCnnXaafvrpp/XChQt137599be//W2ttdbbtm3Tt956qwb0E088oevr6/Vrr72mte7KQT7qqKP0HXfcoVeuXKknTJige/TooT/++OPONtrb23Vra2vapa2trXP7u+++W0cikW7vaa31Lbfconv37m35egrekq7/5juELAd5zJgxlrZ/+47nbemn1XbS4Uf/c9J+Ib8JhX727avHgNZbtnjabLb6KSkWWfLmO12pCelmiAkivXr1Yr/99uPzzz/nhRde4JlnnqGuro7TTz8dgDPPPJPGxkZ+9atf8ac//alzv927d/PMM89QWloKGNHaiy66iPfee48jjjiCww8/HIDjjz9+n+gxwE9+8hMuueQSwHg8NHDgQJYvX8706dMBuPHGG7nhhhvS2j506FA2bNgAQFNTE6WlpfukifTr149du3axd+9eevbsaf0CCYJgCauPeV97u6vaihX9DPLjZDOE3X5BsER7u5FCFbJUTkmxyJKjju36wIOQb2wV40cWPP/88wwaNIhTTjmFtra2zuWMM86goaGh2z7jx4/vdI4BzjvvPLTW/P3vfzfV5plnntn5/4ABAzjggAP45JNPOt+rqanh73//e9pl2bJl2Zy2IAgucM0111ja/tgTuhxkK/pptZ2gEXb7BcES7e1cA6FzkCWCnAYztThHH931gTuVb+xVDdA9e/awefNmBg4cyKeffsqmTZvo0aPHPtslRmYPOOCAbq979+5NaWkpn332mal2y8vLu73u2bMne+JGsQ8aNGifNhJRSnX+369fP5qbm2lvb+9ma1NTE71795bosSB4REVFRef/ZnTs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\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", "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n", "plt.sca(axes[0])\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.sca(axes[1])\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", "save_fig(\"tree_regression_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**<그림 6-4. 회귀 결정 트리> 생성 코드**" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:18.594152Z", "iopub.status.busy": "2021-10-23T12:53:18.592439Z", "iopub.status.idle": "2021-10-23T12:53:18.607758Z", "shell.execute_reply": "2021-10-23T12:53:18.608846Z" } }, "outputs": [], "source": [ "export_graphviz(\n", " tree_reg1,\n", " out_file=os.path.join(IMAGES_PATH, \"regression_tree.dot\"),\n", " feature_names=[\"x1\"],\n", " rounded=True,\n", " filled=True\n", " )" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:18.614069Z", "iopub.status.busy": "2021-10-23T12:53:18.612469Z", "iopub.status.idle": "2021-10-23T12:53:18.703255Z", "shell.execute_reply": "2021-10-23T12:53:18.702383Z" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "Tree\n", "\n", "\n", "\n", "0\n", "\n", "x1 <= 0.197\n", "squared_error = 0.098\n", "samples = 200\n", "value = 0.354\n", "\n", "\n", "\n", "1\n", "\n", "x1 <= 0.092\n", "squared_error = 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", "squared_error = 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", "squared_error = 0.018\n", "samples = 20\n", "value = 0.854\n", "\n", "\n", "\n", "1->2\n", "\n", "\n", "\n", "\n", "\n", "3\n", "\n", "squared_error = 0.013\n", "samples = 24\n", "value = 0.552\n", "\n", "\n", "\n", "1->3\n", "\n", "\n", "\n", "\n", "\n", "5\n", "\n", "squared_error = 0.015\n", "samples = 110\n", "value = 0.111\n", "\n", "\n", "\n", "4->5\n", "\n", "\n", "\n", "\n", "\n", "6\n", "\n", "squared_error = 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": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Source.from_file(os.path.join(IMAGES_PATH, \"regression_tree.dot\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**<그림 6-6. 결정 트리 회귀 모델의 규제> 생성 코드**" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:18.716933Z", "iopub.status.busy": "2021-10-23T12:53:18.715830Z", "iopub.status.idle": "2021-10-23T12:53:20.950387Z", "shell.execute_reply": "2021-10-23T12:53:20.951554Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "그림 저장: tree_regression_regularization_plot\n" ] }, { "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", "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n", "\n", "plt.sca(axes[0])\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.sca(axes[1])\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": 18, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:20.960860Z", "iopub.status.busy": "2021-10-23T12:53:20.959219Z", "iopub.status.idle": "2021-10-23T12:53:20.965924Z", "shell.execute_reply": "2021-10-23T12:53:20.965104Z" } }, "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": 19, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:20.973986Z", "iopub.status.busy": "2021-10-23T12:53:20.973011Z", "iopub.status.idle": "2021-10-23T12:53:20.978422Z", "shell.execute_reply": "2021-10-23T12:53:20.977633Z" } }, "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": 20, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:20.986074Z", "iopub.status.busy": "2021-10-23T12:53:20.985159Z", "iopub.status.idle": "2021-10-23T12:53:42.687309Z", "shell.execute_reply": "2021-10-23T12:53:42.686455Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting 3 folds for each of 294 candidates, totalling 882 fits\n" ] }, { "data": { "text/plain": [ "GridSearchCV(cv=3, estimator=DecisionTreeClassifier(random_state=42),\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", " verbose=1)" ] }, "execution_count": 20, "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, verbose=1, cv=3)\n", "\n", "grid_search_cv.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:42.695023Z", "iopub.status.busy": "2021-10-23T12:53:42.693943Z", "iopub.status.idle": "2021-10-23T12:53:42.708483Z", "shell.execute_reply": "2021-10-23T12:53:42.708990Z" } }, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(max_leaf_nodes=17, random_state=42)" ] }, "execution_count": 21, "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": 22, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:42.714857Z", "iopub.status.busy": "2021-10-23T12:53:42.713944Z", "iopub.status.idle": "2021-10-23T12:53:42.718727Z", "shell.execute_reply": "2021-10-23T12:53:42.719390Z" } }, "outputs": [ { "data": { "text/plain": [ "0.8695" ] }, "execution_count": 22, "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": [ "_문제: 랜덤 포레스트를 만들어보세요._" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a. 이전 연습문제에 이어서, 훈련 세트의 서브셋을 1,000개 생성합니다. 각각은 무작위로 선택된 100개의 샘플을 담고 있습니다. 힌트: 사이킷런의 `ShuffleSplit`을 사용할 수 있습니다." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:42.727046Z", "iopub.status.busy": "2021-10-23T12:53:42.726143Z", "iopub.status.idle": "2021-10-23T12:53:43.198599Z", "shell.execute_reply": "2021-10-23T12:53:43.199627Z" } }, "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개의 결정 트리를 평가합니다. 더 작은 데이터셋에서 훈련되었기 때문에 이 결정 트리는 앞서 만든 결정 트리보다 성능이 떨어져 약 80%의 정확도를 냅니다." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:43.214688Z", "iopub.status.busy": "2021-10-23T12:53:43.213839Z", "iopub.status.idle": "2021-10-23T12:53:46.544035Z", "shell.execute_reply": "2021-10-23T12:53:46.544986Z" } }, "outputs": [ { "data": { "text/plain": [ "0.8054499999999999" ] }, "execution_count": 24, "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": 25, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:46.551441Z", "iopub.status.busy": "2021-10-23T12:53:46.548321Z", "iopub.status.idle": "2021-10-23T12:53:47.064461Z", "shell.execute_reply": "2021-10-23T12:53:47.065250Z" } }, "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": 26, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:47.082919Z", "iopub.status.busy": "2021-10-23T12:53:47.068344Z", "iopub.status.idle": "2021-10-23T12:53:47.330312Z", "shell.execute_reply": "2021-10-23T12:53:47.331351Z" } }, "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": 27, "metadata": { "execution": { "iopub.execute_input": "2021-10-23T12:53:47.343320Z", "iopub.status.busy": "2021-10-23T12:53:47.342621Z", "iopub.status.idle": "2021-10-23T12:53:47.354273Z", "shell.execute_reply": "2021-10-23T12:53:47.354743Z" } }, "outputs": [ { "data": { "text/plain": [ "0.872" ] }, "execution_count": 27, "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 }