{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "XjTc5n2flYUu" }, "source": [ "# 특성 공학과 규제" ] }, { "cell_type": "markdown", "metadata": { "id": "B8YOr2hElYUv" }, "source": [ "\n", " \n", "
\n", " 구글 코랩에서 실행하기\n", "
" ] }, { "cell_type": "markdown", "metadata": { "id": "fZwhQU2l8tI6" }, "source": [ "## 데이터 준비" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "id": "3kjaTfOqEVwY" }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "8qmTS1RzKRKT", "outputId": "62a1790e-34bf-4a28-f135-e66469a5f25b" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[[ 8.4 2.11 1.41]\n", " [13.7 3.53 2. ]\n", " [15. 3.82 2.43]\n", " [16.2 4.59 2.63]\n", " [17.4 4.59 2.94]\n", " [18. 5.22 3.32]\n", " [18.7 5.2 3.12]\n", " [19. 5.64 3.05]\n", " [19.6 5.14 3.04]\n", " [20. 5.08 2.77]\n", " [21. 5.69 3.56]\n", " [21. 5.92 3.31]\n", " [21. 5.69 3.67]\n", " [21.3 6.38 3.53]\n", " [22. 6.11 3.41]\n", " [22. 5.64 3.52]\n", " [22. 6.11 3.52]\n", " [22. 5.88 3.52]\n", " [22. 5.52 4. ]\n", " [22.5 5.86 3.62]\n", " [22.5 6.79 3.62]\n", " [22.7 5.95 3.63]\n", " [23. 5.22 3.63]\n", " [23.5 6.28 3.72]\n", " [24. 7.29 3.72]\n", " [24. 6.38 3.82]\n", " [24.6 6.73 4.17]\n", " [25. 6.44 3.68]\n", " [25.6 6.56 4.24]\n", " [26.5 7.17 4.14]\n", " [27.3 8.32 5.14]\n", " [27.5 7.17 4.34]\n", " [27.5 7.05 4.34]\n", " [27.5 7.28 4.57]\n", " [28. 7.82 4.2 ]\n", " [28.7 7.59 4.64]\n", " [30. 7.62 4.77]\n", " [32.8 10.03 6.02]\n", " [34.5 10.26 6.39]\n", " [35. 11.49 7.8 ]\n", " [36.5 10.88 6.86]\n", " [36. 10.61 6.74]\n", " [37. 10.84 6.26]\n", " [37. 10.57 6.37]\n", " [39. 11.14 7.49]\n", " [39. 11.14 6. ]\n", " [39. 12.43 7.35]\n", " [40. 11.93 7.11]\n", " [40. 11.73 7.22]\n", " [40. 12.38 7.46]\n", " [40. 11.14 6.63]\n", " [42. 12.8 6.87]\n", " [43. 11.93 7.28]\n", " [43. 12.51 7.42]\n", " [43.5 12.6 8.14]\n", " [44. 12.49 7.6 ]]\n" ] } ], "source": [ "df = pd.read_csv('https://bit.ly/perch_csv_data')\n", "perch_full = df.to_numpy()\n", "print(perch_full)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "id": "PsRC7rvE9SbL" }, "outputs": [], "source": [ "import numpy as np\n", "\n", "perch_weight = np.array(\n", " [5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0,\n", " 110.0, 115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0,\n", " 130.0, 150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0,\n", " 197.0, 218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0,\n", " 514.0, 556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0,\n", " 820.0, 850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0,\n", " 1000.0, 1000.0]\n", " )" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "id": "cRKkoWoZ9J0m" }, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "train_input, test_input, train_target, test_target = train_test_split(perch_full, perch_weight, random_state=42)" ] }, { "cell_type": "markdown", "metadata": { "id": "y5uMFE_8V1tx" }, "source": [ "## 사이킷런의 변환기" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "id": "EclugdXmSs-L" }, "outputs": [], "source": [ "from sklearn.preprocessing import PolynomialFeatures" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "V5is7cZhKbPU", "outputId": "a27d2b55-7547-4add-b3e9-3a97c23eb954" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[[1. 2. 3. 4. 6. 9.]]\n" ] } ], "source": [ "poly = PolynomialFeatures()\n", "poly.fit([[2, 3]])\n", "print(poly.transform([[2, 3]]))" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "bKXkK0oJc4nG", "outputId": "ee304884-059a-4e6a-c358-64530cb1129d" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[[2. 3. 4. 6. 9.]]\n" ] } ], "source": [ "poly = PolynomialFeatures(include_bias=False)\n", "poly.fit([[2, 3]])\n", "print(poly.transform([[2, 3]]))" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "id": "__kE6eJdNZfm" }, "outputs": [], "source": [ "poly = PolynomialFeatures(include_bias=False)\n", "\n", "poly.fit(train_input)\n", "train_poly = poly.transform(train_input)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "2a_lmkKle4kF", "outputId": "15ad4a84-a8e1-4079-8cc6-6bb9ef128e2f" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(42, 9)\n" ] } ], "source": [ "print(train_poly.shape)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "X6GUwfXTfKbl", "outputId": "a47e9c30-9730-497c-e897-8ff248cc9074" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array(['x0', 'x1', 'x2', 'x0^2', 'x0 x1', 'x0 x2', 'x1^2', 'x1 x2',\n", " 'x2^2'], dtype=object)" ] }, "metadata": {}, "execution_count": 40 } ], "source": [ "poly.get_feature_names_out()" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "id": "DJMPxe2mgbOo" }, "outputs": [], "source": [ "test_poly = poly.transform(test_input)" ] }, { "cell_type": "markdown", "metadata": { "id": "PdDAslHzNk3H" }, "source": [ "## 다중 회귀 모델 훈련하기" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "E9ygy-8WOvIP", "outputId": "73ec508e-d9f9-4147-bad6-21109aafd93d" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.9903183436982125\n" ] } ], "source": [ "from sklearn.linear_model import LinearRegression\n", "\n", "lr = LinearRegression()\n", "lr.fit(train_poly, train_target)\n", "print(lr.score(train_poly, train_target))" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GKKyfFcAd7zm", "outputId": "80944369-a45b-4e14-c38e-0652efe39723" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.9714559911594111\n" ] } ], "source": [ "print(lr.score(test_poly, test_target))" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "id": "2fDt5mrReMwU" }, "outputs": [], "source": [ "poly = PolynomialFeatures(degree=5, include_bias=False)\n", "\n", "poly.fit(train_input)\n", "train_poly = poly.transform(train_input)\n", "test_poly = poly.transform(test_input)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "hcM8R4VHSzR8", "outputId": "ab384f3c-04d9-41b3-b5c7-f6ac6de6df9e" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(42, 55)\n" ] } ], "source": [ "print(train_poly.shape)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "UffVFVTGP8xj", "outputId": "c76714a5-18eb-46a1-d29f-6f26c5a83a19" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.9999999999996433\n" ] } ], "source": [ "lr.fit(train_poly, train_target)\n", "print(lr.score(train_poly, train_target))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GtITdlYFg7AY", "outputId": "c2c167cf-e680-44a5-a7ff-71efe48b9a03" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "-144.40579436844948\n" ] } ], "source": [ "print(lr.score(test_poly, test_target))" ] }, { "cell_type": "markdown", "metadata": { "id": "K2YMPSelQBpO" }, "source": [ "## 규제" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "id": "hCC7wKy3QQrE" }, "outputs": [], "source": [ "from sklearn.preprocessing import StandardScaler\n", "\n", "ss = StandardScaler()\n", "ss.fit(train_poly)\n", "\n", "train_scaled = ss.transform(train_poly)\n", "test_scaled = ss.transform(test_poly)" ] }, { "cell_type": "markdown", "metadata": { "id": "qyLI7JQsJ7RQ" }, "source": [ "## 릿지" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "LdNuDNQGQipv", "outputId": "11558a6c-0c97-4b1f-f345-933018b18221" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.9896101671037343\n" ] } ], "source": [ "from sklearn.linear_model import Ridge\n", "\n", "ridge = Ridge()\n", "ridge.fit(train_scaled, train_target)\n", "print(ridge.score(train_scaled, train_target))" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "p5mXLecwhdnF", "outputId": "0e2ddf45-68a9-4f8b-8ab2-e4b9f5360087" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.9790693977615387\n" ] } ], "source": [ "print(ridge.score(test_scaled, test_target))" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "id": "wXd3_Kq6hlbM" }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "train_score = []\n", "test_score = []" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "id": "9MvIvQOrhfqC" }, "outputs": [], "source": [ "alpha_list = [0.001, 0.01, 0.1, 1, 10, 100]\n", "for alpha in alpha_list:\n", " # 릿지 모델을 만듭니다\n", " ridge = Ridge(alpha=alpha)\n", " # 릿지 모델을 훈련합니다\n", " ridge.fit(train_scaled, train_target)\n", " # 훈련 점수와 테스트 점수를 저장합니다\n", " train_score.append(ridge.score(train_scaled, train_target))\n", " test_score.append(ridge.score(test_scaled, test_target))" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 449 }, "id": "95DjrJxlhiow", "outputId": "a004ea2c-a338-448d-9dbd-2b68aff09892" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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REpRQBIREREpRQGplvH09OSFF17A09PT7FKcnj7rmqHPuWboc64Z+pxrRm34nDVIW0RERKQUtSCJiIiIlKKAJCIiIlKKApKIiIhIKQpIIiIiIqUoINVyt99+O82bN8dqtdK0aVMGDx7MoUOHzC7Lqezbt4+HHnqIiIgIvLy8iIyM5IUXXiA3N9fs0pzOK6+8Qs+ePfH29sbf39/scpzG1KlTadmyJVarlejoaNavX292SU7np59+4rbbbiM0NBSLxcLixYvNLskpTZo0iaioKBo2bEhwcDD9+/dnx44dptSigFTL9e7dmy+++IIdO3awYMEC9uzZw1133WV2WU5l+/bt2Gw23n//ff744w/+9a9/MX36dJ599lmzS3M6ubm53H333YwcOdLsUpzG/PnziY+P54UXXmDTpk106tSJ2NhYjhw5YnZpTiUzM5NOnToxdepUs0txaitWrGDUqFGsXbuWZcuWkZeXx0033URmZmaN16Lb/OuYr7/+mv79+5OTk4O7u7vZ5Titf/7zn0ybNo3ExESzS3FKs2fPZvTo0Zw8edLsUuq86OhooqKiePfddwFjncjw8HAef/xxxo4da3J1zslisbBo0SL69+9vdilO7+jRowQHB7NixQquu+66Gr22WpDqkOPHj/PJJ5/Qs2dPhaNqlp6eTkBAgNlliFxQbm4uGzduJCYmxrHPxcWFmJgY1qxZY2JlIlUjPT0dwJS/jxWQ6oC///3vNGjQgMaNG5OUlMRXX31ldklObffu3bzzzjs88sgjZpcickFpaWkUFBQQEhJSYn9ISAgpKSkmVSVSNWw2G6NHj+bqq6+mQ4cONX59BSQTjB07FovFcsHH9u3bHec/88wzbN68mf/+97+4uroyZMgQ1DN6cRX9nAGSk5Pp06cPd999N8OHDzep8rqlMp+ziMjFjBo1iq1bt/L555+bcn03U65azz311FMMGzbsgue0atXKsR0YGEhgYCCXXXYZ7du3Jzw8nLVr19KjR49qrrRuq+jnfOjQIXr37k3Pnj2ZMWNGNVfnPCr6OUvVCQwMxNXVldTU1BL7U1NTadKkiUlViVy6xx57jG+//ZaffvqJZs2amVKDApIJgoKCCAoKqtRzbTYbADk5OVVZklOqyOecnJxM79696dq1K7NmzcLFRY2r5XUp/z/LpfHw8KBr164kJCQ4BgzbbDYSEhJ47LHHzC1OpBLsdjuPP/44ixYtYvny5URERJhWiwJSLbZu3To2bNjANddcQ6NGjdizZw/PP/88kZGRaj2qQsnJyfTq1YsWLVrwxhtvcPToUccx/Su8aiUlJXH8+HGSkpIoKChgy5YtALRu3RofHx9zi6uj4uPjGTp0KN26daN79+5MmTKFzMxM4uLizC7NqZw+fZrdu3c7ft+7dy9btmwhICCA5s2bm1iZcxk1ahSffvopX331FQ0bNnSMpfPz88PLy6tmi7FLrfXbb7/Ze/fubQ8ICLB7enraW7ZsaX/00UftBw8eNLs0pzJr1iw7UOZDqtbQoUPL/Jx//PFHs0ur09555x178+bN7R4eHvbu3bvb165da3ZJTufHH38s8//doUOHml2aUznf38WzZs2q8Vo0D5KIiIhIKRpoISIiIlKKApKIiIhIKQpIIiIiIqUoIImIiIiUooAkIiIiUooCkoiIiEgpCkgiIiIipSggiYiIiJSigCQi9ca+ffuwWCyOJU7KY/bs2fj7+1dbTSJSOykgiYiIiJSigCQiIiJSigKSiDiVJUuWcM011+Dv70/jxo259dZb2bNnT5nnLl++HIvFwnfffceVV16J1WrlL3/5C1u3bj3n3KVLl9K+fXt8fHzo06cPhw8fdhzbsGEDN954I4GBgfj5+XH99dezadOmanuPIlL9FJBExKlkZmYSHx/PL7/8QkJCAi4uLtxxxx3YbLbzPueZZ57hzTffZMOGDQQFBXHbbbeRl5fnOJ6VlcUbb7zB3Llz+emnn0hKSuLpp592HD916hRDhw5l1apVrF27ljZt2tC3b19OnTpVre9VRKqPm9kFiIhUpQEDBpT4/aOPPiIoKIht27bh4+NT5nNeeOEFbrzxRgDmzJlDs2bNWLRoEffccw8AeXl5TJ8+ncjISAAee+wxJk6c6Hj+X//61xKvN2PGDPz9/VmxYgW33nprlb03Eak5akESEaeya9cu7r33Xlq1aoWvry8tW7YEICkp6bzP6dGjh2M7ICCAtm3b8ueffzr2eXt7O8IRQNOmTTly5Ijj99TUVIYPH06bNm3w8/PD19eX06dPX/CaIlK7qQVJRJzKbbfdRosWLZg5cyahoaHYbDY6dOhAbm5upV/T3d29xO8WiwW73e74fejQoRw7doy33nqLFi1a4OnpSY8ePS7pmiJiLgUkEXEax44dY8eOHcycOZNrr70WgFWrVl30eWvXrqV58+YAnDhxgp07d9K+fftyX/fnn3/mvffeo2/fvgAcOHCAtLS0SrwDEaktFJBExGk0atSIxo0bM2PGDJo2bUpSUhJjx4696PMmTpxI48aNCQkJ4bnnniMwMJD+/fuX+7pt2rRh7ty5dOvWjYyMDJ555hm8vLwu4Z2IiNk0BklEnIaLiwuff/45GzdupEOHDjz55JP885//vOjz/vd//5f/+Z//oWvXrqSkpPDNN9/g4eFR7ut++OGHnDhxgquuuorBgwfzxBNPEBwcfClvRURMZrGf3ZEuIlKPLF++nN69e3PixAktJyIiJagFSURERKQUBSQRERGRUtTFJiIiIlKKWpBERERESlFAEhERESlFAUlERESkFAUkERERkVIUkERERERKUUASERERKUUBSURERKQUBSQRERGRUv4fvtBquZTNRbkAAAAASUVORK5CYII=\n" }, "metadata": {} } ], "source": [ "plt.plot(np.log10(alpha_list), train_score)\n", "plt.plot(np.log10(alpha_list), test_score)\n", "plt.xlabel('alpha')\n", "plt.ylabel('R^2')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "5S5vhi-vhjzT", "outputId": "ac52eb28-1bf2-434f-d21f-b123a6d1f0cd" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.9903815817570367\n", "0.9827976465386928\n" ] } ], "source": [ "ridge = Ridge(alpha=0.1)\n", "ridge.fit(train_scaled, train_target)\n", "\n", "print(ridge.score(train_scaled, train_target))\n", "print(ridge.score(test_scaled, test_target))" ] }, { "cell_type": "markdown", "metadata": { "id": "jUph9pH_KA9_" }, "source": [ "## 라쏘" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Ymu-jmekh0IK", "outputId": "dab813ee-5531-4905-93b2-52d16c8e8b21" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.989789897208096\n" ] } ], "source": [ "from sklearn.linear_model import Lasso\n", "\n", "lasso = Lasso()\n", "lasso.fit(train_scaled, train_target)\n", "print(lasso.score(train_scaled, train_target))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "t3jO37UMh2iI", "outputId": "232674e2-4d08-4ae2-bba0-040a72a53e44" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.9800593698421883\n" ] } ], "source": [ "print(lasso.score(test_scaled, test_target))" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "uoL2oJ6Ih4Jw", "outputId": "30dffbb7-9b86-42e5-fa32-5953a4b8efa3", "scrolled": true }, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 1.878e+04, tolerance: 5.183e+02\n", " model = cd_fast.enet_coordinate_descent(\n", "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 1.297e+04, tolerance: 5.183e+02\n", " model = cd_fast.enet_coordinate_descent(\n" ] } ], "source": [ "train_score = []\n", "test_score = []\n", "\n", "alpha_list = [0.001, 0.01, 0.1, 1, 10, 100]\n", "for alpha in alpha_list:\n", " # 라쏘 모델을 만듭니다\n", " lasso = Lasso(alpha=alpha, max_iter=10000)\n", " # 라쏘 모델을 훈련합니다\n", " lasso.fit(train_scaled, train_target)\n", " # 훈련 점수와 테스트 점수를 저장합니다\n", " train_score.append(lasso.score(train_scaled, train_target))\n", " test_score.append(lasso.score(test_scaled, test_target))" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 449 }, "id": "7rkH8Dvzh9UI", "outputId": "a1b647d7-25d5-4206-edc8-1bf07a279d9d" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": {} } ], "source": [ "plt.plot(np.log10(alpha_list), train_score)\n", "plt.plot(np.log10(alpha_list), test_score)\n", "plt.xlabel('alpha')\n", "plt.ylabel('R^2')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "t4uFD9Flh_Dw", "outputId": "6946c4fd-97af-44b4-b99a-facb65d14661" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.9888067471131867\n", "0.9824470598706695\n" ] } ], "source": [ "lasso = Lasso(alpha=10)\n", "lasso.fit(train_scaled, train_target)\n", "\n", "print(lasso.score(train_scaled, train_target))\n", "print(lasso.score(test_scaled, test_target))" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "z_bQc3s8Uoai", "outputId": "5ad2a313-3880-4078-ac63-4019049b5ec4" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "40\n" ] } ], "source": [ "print(np.sum(lasso.coef_ == 0))" ] } ], "metadata": { "colab": { "name": "3-3 특성 공학과 규제.ipynb", "provenance": [] }, "kernelspec": { "display_name": "default:Python", "language": "python", "name": "conda-env-default-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.10" } }, "nbformat": 4, "nbformat_minor": 0 }