{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "executionInfo": { "elapsed": 1661, "status": "ok", "timestamp": 1709602382539, "user": { "displayName": "Srivatsa Kundurthy", "userId": "03839108747452750167" }, "user_tz": 300 }, "id": "K15X0B8sJuou" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Intel MKL WARNING: Support of Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled only processors has been deprecated. Intel oneAPI Math Kernel Library 2025.0 will require Intel(R) Advanced Vector Extensions (Intel(R) AVX) instructions.\n", "Intel MKL WARNING: Support of Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) enabled only processors has been deprecated. Intel oneAPI Math Kernel Library 2025.0 will require Intel(R) Advanced Vector Extensions (Intel(R) AVX) instructions.\n" ] } ], "source": [ "# Imports!\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "# Import scikit-learn tools!\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "executionInfo": { "elapsed": 185, "status": "ok", "timestamp": 1709602456724, "user": { "displayName": "Srivatsa Kundurthy", "userId": "03839108747452750167" }, "user_tz": 300 }, "id": "6_STFD8GJuov", "outputId": "95d6caa4-d977-4d2e-f979-c8ad1bee8eb6" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
XY
00.5594460.712223
10.7614920.193319
20.2445321.534062
30.7716890.495752
40.3544721.937421
\n", "
" ], "text/plain": [ " X Y\n", "0 0.559446 0.712223\n", "1 0.761492 0.193319\n", "2 0.244532 1.534062\n", "3 0.771689 0.495752\n", "4 0.354472 1.937421" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Specify a seed so the numbers can be reproduced\n", "np.random.seed(1998)\n", "# Specify size of dataset, randomly generate points\n", "n = 100\n", "x = np.array([np.random.random() for a in range(100)])\n", "# Generate the true Y model with (normally distributed) noise (Y = -pi*x + e)\n", "y = -np.pi*x + np.e\n", "noise = np.random.normal(0,0.25,n)\n", "y += noise\n", "# Convert data into dataframe\n", "df = pd.DataFrame({'X':x,'Y':y})\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 472 }, "executionInfo": { "elapsed": 1028, "status": "ok", "timestamp": 1696454334469, "user": { "displayName": "Eric Guo", "userId": "14148159081345199792" }, "user_tz": 240 }, "id": "p4pDM3PYCxv6", "outputId": "aca17f03-d383-47fa-a229-096fb2c860d6" }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Y')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAHFCAYAAADxOP3DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABECUlEQVR4nO3de3hU5bn38d+EQwJsMhQQEiRqoIoEVBCKBEErZ+imul+6az1rq7vh4CmlVdQt0nY3pbWtpSoocmiLom8bVNxiCl7IQQ1FhCCUgBQ5m5QSJEGUAMl6/8g7aSaZ05pZs9asme/nuuaPrFmTedYSWTfPc9/34zEMwxAAAECKSnN6AAAAAE4iGAIAACmNYAgAAKQ0giEAAJDSCIYAAEBKIxgCAAApjWAIAACkNIIhAACQ0giGAABASiMYApBw/v3f/12dOnXSoUOHWrx3/PhxZWdn6+qrr1Z9fb0Do2tp9+7dat++vW6++eYW73322Wc6//zzddVVV6murs6B0QEIh2AIQMJ54YUX1Lp1a919990t3ps+fbpOnjyp3//+90pLS4y/wvr06aOf/exnWrZsmYqLi/3emzp1qo4fP67f//73atWqlUMjBBBKYvxNAgBNZGVl6dlnn9WqVav03HPPNR5/9dVXtWzZMv3yl7/UV7/6VQdH2NL999+va665RlOmTNHRo0clSX/605/08ssv63/+53906aWXOjxCAMEQDAFISN/+9rf1ne98RzNmzND+/ftVVVWlgoICjRkzRlOmTAn4mbNnz6pbt2667bbbWrx34sQJtWvXToWFhZKk+vp6/fSnP1WfPn3Url07derUSZdffrl++9vfRjVej8ejxYsX64svvlBBQYEqKys1ZcoUjRgxQg888EBUvxOAPTzsWg8gUR0/flz9+/fXpZdeqvPOO0+rVq3S9u3b1bNnz6CfKSws1Pz581VZWanMzMzG4/PmzdPUqVP10Ucf6bLLLtPPf/5zPfbYY3rsscd0zTXX6OzZs9q1a5dOnDihWbNmRT1m3/f07t1blZWV2rZtm3r37h317wMQfwRDABLaW2+9pYkTJ0qS/vjHP+rWW28Nef727dt1+eWX6/nnn9c999zTeNyXwLx582ZJ0qRJk3T48GFt3brV0vEahqG8vDzt2rVLTz75pH7wgx9Y+vsBWI9lMgAJbcKECRo6dKguvvjisIGQJF122WUaNGiQFi9e3HisvLxcmzZt0ne/+93GY0OGDNG2bds0depU/eUvf1FNTY0l4y0pKdGuXbuUlpamt99+25LfCSC+CIYAJLz09HS1bds24vO/+93vqrS0VLt27ZIkLV68WOnp6brpppsaz5k5c6aefPJJbdy4URMmTFCXLl00atSoxpmjaJw4cUJ33323vva1r+m5555TSUmJFi5cGPXvA2APgiEASeemm25Senq6lixZorq6Ov3xj3/UDTfcoK985SuN57Ru3VqFhYXasmWLjh8/rmXLlunQoUMaN26cvvjii6i+9957720so7/77rs1ceJEFRYW6vDhw1ZdGoA4IBgCkHS+8pWv6IYbbtAf/vAH/e///q8qKyv9lsia69Spk771rW9p2rRpOn78uPbv32/6O19//XUtXbpUP/nJT9S3b19J0vPPP6+0tDS/3CUAiYcEagAJ7+tf/7qOHTumHTt2RPyZVatWady4cY2VZwcOHPBr0jhp0iT1799fgwcP1nnnnacDBw7o8ccfl2EY2rNnj9q0aaN169Zp1KhRevzxx/X4448H/a5jx46pf//+6t27tzZs2OD3PUuWLNFdd92lF154Qd/73veiuHoA8cbMEICkNHr0aOXk5Ojw4cO64447WnSrvu6667R+/frG3kWPPfaYRo0apXXr1qlNmzaSGirD6urqwm77MXXqVJ08eVJLlixp8T133nln43JZoO1FADiPmSEAAJDSmBkCAAApjWAIAACkNIIhAACQ0giGAABASiMYAgAAKY1gCAAApLTWTg8g0dXX1+vTTz9Vx44d5fF4nB4OAACIgGEYOnnypHr06NGi/1dzBENhfPrpp8rJyXF6GAAAIAqHDh1q7EQfDMFQGB07dpTUcDMzMzMdHg0AAIhETU2NcnJyGp/joRAMheFbGsvMzCQYAgDAZSJJcSGBGgAApDSCIQAAkNIIhgAAQEojGAIAACnNNcHQvHnzdPnllzcmMufn5+utt94K+Zl169Zp0KBBysjIUK9evTR//nybRgsAANzCNcFQz5499fOf/1ybN2/W5s2bNXLkSF1//fX629/+FvD8ffv2aeLEiRoxYoS2bt2qRx55RPfdd5+Ki4ttHjkAAEhkHsMwDKcHEa3OnTvrl7/8pb73ve+1eO+hhx7SihUrVF5e3nisoKBA27ZtU2lpacTf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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Let's plot the data!\n", "plt.scatter(df['X'], df['Y'])\n", "\n", "plt.title('Y vs. X')\n", "plt.xlabel('X')\n", "plt.ylabel('Y')" ] }, { "cell_type": "markdown", "metadata": { "id": "fmH3Uy_iQuvx" }, "source": [ "## The Sklearn Pipeline\n", "\n", "1. Extract features + target\n", "\n", "2. Perform train-test split\n", "\n", "3. Instantiate your model\n", "\n", "4. Fit your model to the training data (model training)\n", "\n", "5. (Optional) Save your predictions -- useful if you need some accuracy metric against the known outputs\n", "\n", "6. Check accuracy" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 198, "status": "ok", "timestamp": 1696455111153, "user": { "displayName": "Eric Guo", "userId": "14148159081345199792" }, "user_tz": 240 }, "id": "f5OnoOcfJuox", "outputId": "cadaec84-fb91-4579-f2f7-f1457c330d5a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Score: 0.9415613958757892\n" ] } ], "source": [ "# Now let's train a linear regression model on our data (for now we will only train once, so we won't have a validation set)\n", "\n", "# Extract features and target\n", "X = df[['X']]\n", "Y = df['Y']\n", "\n", "# Split the data into a training set and test set using train_test_split\n", "train_x, test_x, train_y, test_y = train_test_split(X, Y, test_size=0.2, random_state=42)\n", "\n", "# Instantiate linear regression model\n", "model = LinearRegression()\n", "\n", "# Fit the linear regression model to our data\n", "model.fit(train_x, train_y)\n", "\n", "# Save test set predictions\n", "predictions = model.predict(test_x)\n", "\n", "# Print the R^2 value (how accurate was our model in predicting the y-values)?\n", "print(\"Score:\", model.score(test_x, test_y))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 472 }, "executionInfo": { "elapsed": 210, "status": "ok", "timestamp": 1696455120770, "user": { "displayName": "Eric Guo", "userId": "14148159081345199792" }, "user_tz": 240 }, "id": "qVSy0s6IwguT", "outputId": "044cb932-cb27-457d-dd39-1279edb12ad3" }, "outputs": [ { "data": { "image/png": "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Nm/ejO7duxdbCBand+/emD17NgDgm2++0Z7P2m+PUykIIhuzcuVKAUD8/fffxbZJSkoSAMTKlSu1sbCwMAFAfPbZZ7K2b731llAqlUKj0QghhIiOjhYAxLx582TtLl68KJydncWUKVP0nlOj0Yh79+6J5ORkAUD89ttvOueeOXNmiT7j3r17BQCxbt06ce/ePZGTkyP++usv0aBBAxEYGChu3rypbdu9e3fh6+srMjMzZccYO3asUCqV4saNG0IIId59910hSZI4efKkrF337t0FALF3715trH379gKA2L17t6ztnDlzhEKh0Ln269evFwDE9u3bhRBCfP755wKAuHXrVrGf8bnnnhNPPfXUI69D0Z91UlKSEEKImzdvCmdnZ9GrVy9Zu5SUFOHk5CQGDRqkjQ0bNkwAEL/88ousba9evUSDBg0eeV4h7l+Dhg0bao/VokULIYQQJ0+eFADEvn37xN9//63zc9a6dWvh6ekpsrOztbGCggIRFBQkfH19tT9nAwcOFM7OziItLU3W7oknnpB95pSUFGFvby/GjRsnyy87O1t4e3uLl156SRsr+jl7lEOHDgkA4r333ntku1atWglnZ2fZ9Wjfvr1Ou2HDhgl/f3/t82vXrgkAIiwsTKdtUX4TJ06UxX/66ScBQKxevVobK+4Y/v7+YtiwYdrnv/76q87PL9ke9gwRGahPnz6y540bN0Zubi7S09MBAFu3boUkSRg8eDAKCgq0D29vbzRp0kR2Oyk9PR2hoaHw8/ODvb09HBwc4O/vDwA6t22A+71Shhg4cCAcHBzg4uKCZ555BllZWdi2bRuqVq0KAMjNzcXu3bvRv39/uLi4yPLt1asXcnNzcejQIQD3eyyCgoIQGBgoO8crr7yi99xubm7o1KmTLLZ161YEBQXhqaeekp2re/fuslttTz/9NADgpZdewi+//ILLly/rHL9ly5Y4duwY3nrrLezYsQNZWVmPvR7R0dG4e/eu9jZJET8/P3Tq1Am7d++WxSVJQkhIiCzWuHFjJCcnP/ZcD3rttddw5MgRnDhxAsuXL0edOnXQrl07nXZ37tzB4cOH8cILL6By5crauJ2dHYYMGYJLly7h9OnTAIC9e/eic+fO8PLykrV7eBzSjh07UFBQgKFDh8quuVKpRPv27U02UFkIYdDMNEO8+uqrsucvvfQS7O3tsXfv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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Look at the output of our linear regression model vs the actual data (test set)\n", "\n", "# Plot Predictions\n", "plt.plot(test_x, predictions, c='black')\n", "\n", "# Plot Actual Data\n", "plt.scatter(test_x, test_y)\n", "\n", "plt.title(\"Linear Regression Model Output\")\n", "plt.xlabel(\"Test X Values\")\n", "plt.ylabel(\"Y Values (with Lin Regression Line)\")\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 133, "status": "ok", "timestamp": 1696455130070, "user": { "displayName": "Eric Guo", "userId": "14148159081345199792" }, "user_tz": 240 }, "id": "qCBvfUYhJuoy", "outputId": "765645e4-ad12-41a1-95c9-f38ebc3f0f00" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Learned Slope -3.1772421333971423\n", "Actual Slope -3.141592653589793\n" ] } ], "source": [ "# Look at the slope of our linear model vs the actual slope\n", "print(\"Learned Slope\", str(model.coef_[0]))\n", "\n", "print(\"Actual Slope\", str(-np.pi))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 180, "status": "ok", "timestamp": 1696455149061, "user": { "displayName": "Eric Guo", "userId": "14148159081345199792" }, "user_tz": 240 }, "id": "N0YrwHi_Juoy", "outputId": "8b8fc5cc-71f1-40ab-9a80-3f4f2c232ff6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Learned Y-Intercept 2.728412528588952\n", "Actual Y-Intercept 2.718281828459045\n" ] } ], "source": [ "# Look at the y-intercept of our model vs the actual intercept\n", "print(\"Learned Y-Intercept\", str(model.intercept_))\n", "print(\"Actual Y-Intercept\", str(np.e))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "executionInfo": { "elapsed": 142, "status": "ok", "timestamp": 1709602599569, "user": { "displayName": "Srivatsa Kundurthy", "userId": "03839108747452750167" }, "user_tz": 300 }, "id": "kFmLuKC5Juox" }, "outputs": [], "source": [ "# In the future: how to create a validation set (useful for the HW)\n", "not_testx, test_x, not_testy, test_y = train_test_split(df[['X']], df['Y'], test_size=0.1, random_state=42)\n", "train_x, valid_x, train_y, valid_y = train_test_split(not_testx, not_testy, test_size=0.1, random_state=42)" ] } ], "metadata": { "colab": { "provenance": [ { "file_id": "1sW0kgM_e4ZO06g8R1CpEi1R5yXiVUzcH", "timestamp": 1664683083019 } ] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.13" } }, "nbformat": 4, "nbformat_minor": 1 }