diff --git "a/Week6_\354\230\210\354\212\265\352\263\274\354\240\234_\352\271\200\354\204\270\354\227\260.ipynb" "b/Week6_\354\230\210\354\212\265\352\263\274\354\240\234_\352\271\200\354\204\270\354\227\260.ipynb" new file mode 100644 index 0000000..282eef3 --- /dev/null +++ "b/Week6_\354\230\210\354\212\265\352\263\274\354\240\234_\352\271\200\354\204\270\354\227\260.ipynb" @@ -0,0 +1,336 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 449 + }, + "id": "geKUkCCmK72T", + "outputId": "e7728e5a-9995-40f7-bfb9-b6260759c31c" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 3 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "np.random.seed(0)\n", + "# y = 4X + 6을 근사(w1=4, w0=6). 임의의 값은 노이즈를 위해 만듦.\n", + "X = 2 * np.random.rand(100,1)\n", + "y = 6 +4 * X+np.random.randn(100,1)\n", + "\n", + "# X, y 데이터 세트 산점도로 시각화\n", + "plt.scatter(X, y)" + ] + }, + { + "cell_type": "code", + "source": [ + "def get_cost(y, y_pred):\n", + " N = len(y)\n", + " cost = np.sum(np.square(y - y_pred))/N\n", + " return cost" + ], + "metadata": { + "id": "G_n_Zbw7QezA" + }, + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# w1 과 w0를 업데이트할 w1_update, w0_update를 반환.\n", + "def get_weight_updates(w1, w0, X, y, learning_rate=0.01):\n", + " N = len(y)\n", + " # 먼저 w1_update, w0_update를 각각 w1, w0의 shape와 동일한 크기를 가진 0 값으로 초기화\n", + " w1_update = np.zeros_like(w1)\n", + " w0_update = np.zeros_like(w0)\n", + " # 예측 배열 계산하고 예측과 실제 값의 차이 계산\n", + " y_pred = np.dot(X, w1 .T) + w0\n", + " diff = y-y_pred\n", + "\n", + " # w0_update를 dot 행렬 연산으로 구하기 위해 모두 1값을 가진 행렬 생성\n", + " w0_factors = np.ones((N, 1))\n", + "\n", + " # w1 과 w0을 업데이트할 w1_update와 w0_update 계산\n", + " w1_update = -(2/N)*learning_rate*(np.dot(X.T, diff))\n", + " w0_update = -(2/N)*learning_rate*(np.dot(w0_factors.T, diff))\n", + " return w1_update, w0_update" + ], + "metadata": { + "id": "lxMiMOjdRG-n" + }, + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# 입력 인자 iters로 주어진 횟수만큼 반복적으로 w1 과 w0를 업데이트 적용함.\n", + "def gradient_descent_steps(X, y, iters=10000):\n", + " # w0와 w1 을 모두 0으로 초기화.\n", + " w0 = np.zeros((1, 1))\n", + " w1 = np.zeros((1, 1))\n", + "\n", + " # 인자로 주어진 iters 만큼 반복적으로 get_weight_updates() 호출해 w1, w0 업데이트 수행.\n", + " for ind in range(iters):\n", + " w1_update, w0_update = get_weight_updates(w1, w0, X, y, learning_rate=0.01)\n", + " w1 = w1 - w1_update\n", + " w0 = w0 - w0_update\n", + "\n", + " return w1, w0" + ], + "metadata": { + "id": "53X6NZsHR3Ni" + }, + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def get_cost(y, y_pred):\n", + " N = len(y)\n", + " cost = np.sum(np.square(y - y_pred))/N\n", + " return cost\n", + "\n", + "\n", + "w1, w0 = gradient_descent_steps(X, y, iters=1000)\n", + "print(\"w1:{0: .3f} w0:{1: .3f}\".format(w1 [0, 0], w0[0, 0]))\n", + "y_pred = w1 [0, 0] * X + w0\n", + "print('Gradient Descent Total Cost:{0: .4f}'.format(get_cost(y, y_pred)))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7gpbk8xdSNaI", + "outputId": "fa9e0c82-7e10-4bb0-d8ff-12ee2a9aa004" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "w1: 4.022 w0: 6.162\n", + "Gradient Descent Total Cost: 0.9935\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "plt.scatter(X, y)\n", + "plt.plot(X, y_pred)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 449 + }, + "id": "Z1Wre8ZXSh-P", + "outputId": "b16522c4-c08c-485a-8209-43e14cacc9e2" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 10 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "def stochastic_gradient_descent_steps(X, y, batch_size=10, iters=1000):\n", + " w0 = np.zeros((1, 1))\n", + " w1 = np.zeros((1, 1))\n", + "\n", + " for ind in range(iters):\n", + " np.random.seed(ind)\n", + " # 전체 X, y 데이터에서 랜덤하게 batch_size만큼 데이터를 추출해 sample_X, sampler로 저장\n", + " stochastic_random_index = np.random.permutation(X.shape[0])\n", + " sample_X = X[stochastic_random_index[0:batch_size]]\n", + " sample_y = y[stochastic_random_index[0:batch_size]]\n", + " # 랜덤하게 batch_size만큼 추출된 데이터 기반으로 w1_update, w0_update 계산 후 업데이트\n", + " w1_update, w0_update = get_weight_updates(w1, w0, sample_X, sample_y)\n", + " w1 = w1 - w1_update\n", + " w0 = w0 - w0_update\n", + "\n", + "\n", + "\n", + " return w1, w0\n", + "\n" + ], + "metadata": { + "id": "kfujS4-lSn5V" + }, + "execution_count": 17, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "w1, w0 = stochastic_gradient_descent_steps(X, y, iters=1000)\n", + "print(\"w1:\", round(w1[0, 0], 3), \"w0:\", round(w0[0, 0], 3))\n", + "y_pred = w1 [0, 0] * X + w0\n", + "print('Stochastic Gradient Descent Total Cost:{0: .4f}'.format(get_cost(y, y_pred)))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8II9NGbRSvWM", + "outputId": "24d4ac38-b747-44ca-952f-f1e8418f3aa2" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "w1: 4.028 w0: 6.156\n", + "Stochastic Gradient Descent Total Cost: 0.9937\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.linear_model import LinearRegression\n" + ], + "metadata": { + "id": "nC-SNY0zXCk8" + }, + "execution_count": 23, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as pit\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "from scipy import stats\n", + "from sklearn.datasets import load_boston\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "%natplotlib inline\n", + "\n", + "# boston 데이터 세트 로드\n", + "boston = load_boston()\n", + "\n", + "# boston 데이터 세트 DataFrame 변환\n", + "bostonDF = pd.DataFrame(boston.data, columns = boston.feature_names)\n", + "\n", + "# boston 데이터 세트의 target 배열은 주택 가격임. 이를 PRICE 칼럼으로 DataFrame에 추가함.\n", + "bostonDF['PRICE'] = boston.target\n", + "print('Boston 데이터 세트 크기 :',bostonDF.shape)\n", + "bostonDF.head()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "JDaezx6gXGZp", + "outputId": "9e44801e-57a1-48fe-d870-a2ada6b9cf64" + }, + "execution_count": 26, + "outputs": [ + { + "output_type": "error", + "ename": "ImportError", + "evalue": "\n`load_boston` has been removed from scikit-learn since version 1.2.\n\nThe Boston housing prices dataset has an ethical problem: as\ninvestigated in [1], the authors of this dataset engineered a\nnon-invertible variable \"B\" assuming that racial self-segregation had a\npositive impact on house prices [2]. Furthermore the goal of the\nresearch that led to the creation of this dataset was to study the\nimpact of air quality but it did not give adequate demonstration of the\nvalidity of this assumption.\n\nThe scikit-learn maintainers therefore strongly discourage the use of\nthis dataset unless the purpose of the code is to study and educate\nabout ethical issues in data science and machine learning.\n\nIn this special case, you can fetch the dataset from the original\nsource::\n\n import pandas as pd\n import numpy as np\n\n data_url = \"http://lib.stat.cmu.edu/datasets/boston\"\n raw_df = pd.read_csv(data_url, sep=\"\\s+\", skiprows=22, header=None)\n data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])\n target = raw_df.values[1::2, 2]\n\nAlternative datasets include the California housing dataset and the\nAmes housing dataset. You can load the datasets as follows::\n\n from sklearn.datasets import fetch_california_housing\n housing = fetch_california_housing()\n\nfor the California housing dataset and::\n\n from sklearn.datasets import fetch_openml\n housing = fetch_openml(name=\"house_prices\", as_frame=True)\n\nfor the Ames housing dataset.\n\n[1] M Carlisle.\n\"Racist data destruction?\"\n\n\n[2] Harrison Jr, David, and Daniel L. Rubinfeld.\n\"Hedonic housing prices and the demand for clean air.\"\nJournal of environmental economics and management 5.1 (1978): 81-102.\n\n", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_4710/1638386788.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mseaborn\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mscipy\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mstats\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatasets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mload_boston\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mwarnings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mwarnings\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfilterwarnings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'ignore'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/sklearn/datasets/__init__.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(name)\u001b[0m\n\u001b[1;32m 159\u001b[0m \"\"\"\n\u001b[1;32m 160\u001b[0m )\n\u001b[0;32m--> 161\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mImportError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 162\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 163\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mglobals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mImportError\u001b[0m: \n`load_boston` has been removed from scikit-learn since version 1.2.\n\nThe Boston housing prices dataset has an ethical problem: as\ninvestigated in [1], the authors of this dataset engineered a\nnon-invertible variable \"B\" assuming that racial self-segregation had a\npositive impact on house prices [2]. Furthermore the goal of the\nresearch that led to the creation of this dataset was to study the\nimpact of air quality but it did not give adequate demonstration of the\nvalidity of this assumption.\n\nThe scikit-learn maintainers therefore strongly discourage the use of\nthis dataset unless the purpose of the code is to study and educate\nabout ethical issues in data science and machine learning.\n\nIn this special case, you can fetch the dataset from the original\nsource::\n\n import pandas as pd\n import numpy as np\n\n data_url = \"http://lib.stat.cmu.edu/datasets/boston\"\n raw_df = pd.read_csv(data_url, sep=\"\\s+\", skiprows=22, header=None)\n data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])\n target = raw_df.values[1::2, 2]\n\nAlternative datasets include the California housing dataset and the\nAmes housing dataset. You can load the datasets as follows::\n\n from sklearn.datasets import fetch_california_housing\n housing = fetch_california_housing()\n\nfor the California housing dataset and::\n\n from sklearn.datasets import fetch_openml\n housing = fetch_openml(name=\"house_prices\", as_frame=True)\n\nfor the Ames housing dataset.\n\n[1] M Carlisle.\n\"Racist data destruction?\"\n\n\n[2] Harrison Jr, David, and Daniel L. Rubinfeld.\n\"Hedonic housing prices and the demand for clean air.\"\nJournal of environmental economics and management 5.1 (1978): 81-102.\n\n", + "", + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n" + ], + "errorDetails": { + "actions": [ + { + "action": "open_url", + "actionText": "Open Examples", + "url": "/notebooks/snippets/importing_libraries.ipynb" + } + ] + } + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "Eom-8qVPY9RT" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file diff --git "a/Week6_\354\230\210\354\212\265\352\263\274\354\240\234_\352\271\200\354\204\270\354\227\260.pdf" "b/Week6_\354\230\210\354\212\265\352\263\274\354\240\234_\352\271\200\354\204\270\354\227\260.pdf" new file mode 100644 index 0000000..8c66e10 Binary files /dev/null and "b/Week6_\354\230\210\354\212\265\352\263\274\354\240\234_\352\271\200\354\204\270\354\227\260.pdf" differ