{ "cells": [ { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "import pandas as pd \n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
longitudelatitudehousing_median_agetotal_roomstotal_bedroomspopulationhouseholdsmedian_incomemedian_house_valueocean_proximity
0-122.2337.880.982119-0.804800-0.971082-0.974405-0.9770098.3252452600.03
1-122.2237.86-0.6070042.0458411.3506820.8614181.6699218.3014358500.03
2-122.2437.851.856137-0.535733-0.826120-0.820757-0.8436167.2574352100.03
3-122.2537.851.856137-0.624199-0.719181-0.766010-0.7337645.6431341300.03
4-122.2537.851.856137-0.462393-0.612242-0.759828-0.6291423.8462342200.03
\n", "
" ], "text/plain": [ " longitude latitude housing_median_age total_rooms total_bedrooms \\\n", "0 -122.23 37.88 0.982119 -0.804800 -0.971082 \n", "1 -122.22 37.86 -0.607004 2.045841 1.350682 \n", "2 -122.24 37.85 1.856137 -0.535733 -0.826120 \n", "3 -122.25 37.85 1.856137 -0.624199 -0.719181 \n", "4 -122.25 37.85 1.856137 -0.462393 -0.612242 \n", "\n", " population households median_income median_house_value ocean_proximity \n", "0 -0.974405 -0.977009 8.3252 452600.0 3 \n", "1 0.861418 1.669921 8.3014 358500.0 3 \n", "2 -0.820757 -0.843616 7.2574 352100.0 3 \n", "3 -0.766010 -0.733764 5.6431 341300.0 3 \n", "4 -0.759828 -0.629142 3.8462 342200.0 3 " ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data=pd.read_csv('processed_data.csv')\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "class LinearRegression:\n", " def __init__(self, learningRate, epochs):\n", " self.learningRate = learningRate\n", " self.epochs = epochs\n", " self.weights = None\n", " self.bias = 0\n", " self.cost_history = [] # Track cost over time\n", "\n", " def fit(self, X, Y):\n", " m, n = X.shape\n", " X = np.c_[np.ones(m), X] # Add bias term (column of ones)\n", " self.weights = np.zeros(n + 1)\n", "\n", " for _ in range(self.epochs):\n", " y_pred = np.dot(X, self.weights) # Predictions\n", " error = y_pred - Y # Error\n", " \n", " # Compute cost (Mean Squared Error)\n", " cost = (1 / (2 * m)) * np.sum(error ** 2)\n", " self.cost_history.append(cost) # Store cost\n", "\n", " # Compute gradients\n", " dw = (1 / m) * np.dot(X.T, error)\n", " self.weights -= self.learningRate * dw # Update weights\n", "\n", " def predict(self, X):\n", " X = np.c_[np.ones(X.shape[0]), X] # Add bias term for prediction\n", " return np.dot(X, self.weights)\n", "\n" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "train_X=data.drop(columns='median_house_value').values\n", "train_Y=data['median_house_value'].values" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "model=LinearRegression(learningRate=0.0001,epochs=1000)\n", "model.fit(train_X,train_Y)\n" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAArQAAAHYCAYAAAC84HtmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABnJUlEQVR4nO3deXhU1f0/8PedyR6SSMIyCSQsARKWqCwqKLKoZVMUq3WpC1irte5Sa8GlitriT62l1r1fBJWqtEUsrhWLQBVERdAYTEAWEyAxkBCSQJLJ3Ht+f+AMmcwkTDIzd+5neL+eJw+ZM3dmzsl7op85OfdcTSmlQEREREQklC3SHSAiIiIiCgYLWiIiIiISjQUtEREREYnGgpaIiIiIRGNBS0RERESisaAlIiIiItFY0BIRERGRaCxoiYiIiEg0FrREREREJBoLWiKiMJg1axY0TcOuXbsi3RUioqjHgpYoSmzcuBHXXnstBg4ciOTkZCQmJiI3NxdXXXUVVq5caUofHnjgAWiahtWrV3foce7ir62vBx54ICz9DcbixYuhaRoWL14c6a50yIEDB/Dwww9jzJgxyMjIQGxsLLp3745zzjkHf/3rX1FfXx/pLhIRdVhMpDtARMExDAN33nkn/vznPyMmJgZnnXUWzj//fMTGxmLHjh145513sGTJEjz44IO47777It3ddl177bXo3bu3T/uECRPM70yQ5s+fjzlz5qBXr16R7orHf//7X1xyySWorq7G4MGD8bOf/QwZGRmoqqrC2rVrceutt2LBggXYvn17pLtKRNQhLGiJhLv33nvx5z//GSeffDL+9a9/ITc31+v+hoYGPPXUU6iqqopQDwP3y1/+EqNHj450N0IiMzMTmZmZke6Gx1dffYXp06cDAJYsWYIrrrjC55jVq1dj7ty5ZneNiCh4iojE2rZtm7Lb7SojI0NVVFS0e2xjY6PX7f3796vbb79d9e3bV8XFxanu3burSy65RBUVFfk8tqamRt13331q8ODBKjk5WaWmpqq8vDw1a9YsVVpaqpRSavz48QqAz1efPn2OOY6ZM2cqAGr9+vXtHud+jfaeY+fOnZ62RYsWKQBq0aJF6sMPP1RnnHGGSkpKUunp6erqq69W+/fv9/tcX331lbriiitUr169VFxcnHI4HGry5MlqxYoVXq/l76u9/rgtXrxYnXba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Tz3Vqcfruo7ExETceuutOOecc/wes3PnTkybNg1nnnkmNm3ahLvvvhu33norli1bFkzXiXDGGWcAOLK/aKBSU1MBAD/88IPf+93t7uOAI8XrU089hT179mDLli146qmnkJGRgfvvvx+PPvpoZ7vfYe7ZOpfL5XOfv8Kqo9wnsHW08AtUamoqDMPAvn37fO6rrKyEYRheP/dQcb9PVq9eDcMwAn6cGf098cQTceKJJ2LFihWoq6tDXV0dVqxYgZNOOgkFBQVefQGAkSNHQh1ZLuf3q/WsKgBomuZ3bAD8jg3w//uRmpqKjIyMdl9/586dnfo5AB17/4W7L0TSHPcF7dSpU/Hwww/jpz/9qd/7nU4n7rrrLvTq1QvJyck47bTTvK6ClJycjGeffRbXXXedZxakteeeew45OTlYsGABBg8ejF/+8pf4xS9+4fdsXKKOmDVrFux2O1544YU2/8fs1tTUBADIz89HQkICPv/8cxw+fNjnuDVr1gCA3zP3NU3D4MGDcdNNN3muPrZixQrP/e6Z2kBmDTuja9euAHz/h28YhudPyMFw/2n6gw8+OOaxnRnr8OHDAcDvldTa+7kHa8CAARg3bhzKysrw0ksvtXus+30CmNffK6+8Eg0NDVi2bBmWLVuGhoYGXHnllV7HpKSkYPDgwfj2229DsszCvYvBunXrfO47fPiw3/fTaaedhqqqKmzbti3o1/enI++/cPeFSJrjvqA9lmuuuQaffPIJXn/9dXz99df42c9+hilTpnToPyLr16/3WRM1efJkfPHFF551X0SdMWDAANx1113Yv38/pk6d6ndGprGxEU888YTn8rFxcXG4/PLLsX//fsyfP9/r2A8//BDvvfceBgwY4JnV27lzJ7Zs2eLzvO4ZrMTERE9beno6AGD37t0hGV9ro0aNAgCfy80+8cQTIZmNmjlzJrp06YI//elPfteGtiykOzPWmTNnAgDmzZvn+ZM3cOTP3+4/HbuPCbUnn3wSiYmJuPnmm7F06VK/x/zvf//DWWedZXp/r7jiCthsNixZsgSvvPKKZ21ta7feeisOHz6M6667zu+f03fu3Ildu3YF9Jp9+vTBGWecgU2bNuFf//qX132PPfYYqqur/b4+APziF7/we6GSiooKfPvttwG9vj8def+Fuy9E0hz3a2jbs337drz22mvYvXs3srKyAAB3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gQO46qqrkJaWhrS0NFx11VWoqakJz6AUhdXrr7+uYmNj1d/+9je1ZcsWddttt6nk5GT1/fffR7prx73JkyerRYsWqW+++UZt3rxZnXvuuSonJ0fV19d7jnnkkUdUSkqKWrZsmSosLFSXXnqpyszMVLW1tZ5jbrjhBtWrVy+1cuVK9eWXX6qJEyeqk046SblcrkgM67j12Wefqb59+6oTTzxR3XbbbZ52Zmht1dXVqk+fPmrWrFlqw4YNaufOnerDDz9U3333necYZmhtDz/8sMrIyFBvv/222rlzp/rnP/+punTpohYsWOA5hhlay7vvvqvuuecetWzZMgVALV++3Ov+UOU1ZcoUNWzYMLVu3Tq1bt06NWzYMHXeeeeFZUwsaMPs1FNPVTfccINXW35+vpozZ06EekRtqaysVADUmjVrlFJKGYahHA6HeuSRRzzHNDY2qrS0NPXcc88ppZSqqalRsbGx6vXXX/ccs2fPHmWz2dT7779v7gCOY3V1dWrgwIFq5cqVavz48Z6Clhla3+9+9zs1duzYNu9nhtZ37rnnql/84hdebT/96U/VlVdeqZRihlbXuqANVV5btmxRANSnn37qOWb9+vUKgCouLg75OLjkIIycTic2btyISZMmebVPmjQJ69ati1CvqC0HDx4EAKSnpwMAdu7ciYqKCq/84uPjMX78eE9+GzduRHNzs9cxWVlZGDZsGDM20U033YRzzz0X55xzjlc7M7S+FStWYNSoUfjZz36GHj16YPjw4fjb3/7muZ8ZWt/YsWPx3//+F1u3bgUAfPXVV/j4448xbdo0AMxQmlDltX79eqSlpeG0007zHDN69GikpaWFJdOYkD8jeezfvx+6rqNnz55e7T179kRFRUWEekX+KKUwe/ZsjB07FsOGDQMAT0b+8vv+++89x8TFxaFr164+xzBjc7z++uv48ssv8fnnn/vcxwytb8eOHXj22Wcxe/Zs3H333fjss89w6623Ij4+HldffTUzFOB3v/sdDh48iPz8fNjtdui6jj/84Q+4/PLLAfD3UJpQ5VVRUYEePXr4PH+PHj3CkikLWhNomuZ1Wynl00aRdfPNN+Prr7/Gxx9/7HNfZ/JjxuYoKyvDbbfdhg8++AAJCQltHscMrcswDIwaNQp//OMfAQDDhw9HUVERnn32WVx99dWe45ihdS1duhRLlizB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CgoK8OWXX4b8+YmIOoMztEREYfbNN9/47HIAALm5uejevTuAI7OrZ511Fu677z7PLgfFxcVeW3fdf//9ePvttzFx4kT8/ve/R3p6Ov7+97/jnXfewaOPPurZleD222/H0qVLccEFF2DOnDk49dRT0dDQgDVr1uC8887DxIkTA+77119/jZtvvhk/+9nPMHDgQMTFxWHVqlX4+uuvMWfOnCB/MkREocGClogozNra6eBvf/sbfvnLXwIAzj//fAwdOhT33nsvSktLkZubi7///e+49NJLPcfn5eVh3bp1uPvuu3HTTTehoaEBgwcPxqJFizBr1izPcSkpKfj444/xwAMP4IUXXsC8efPQtWtXnHLKKbj++us71HeHw4Hc3Fw888wzKCsrg6Zp6N+/P/70pz/hlltu6fgPg4goDLhtFxFRhGmahptuuglPPfVUpLtCRCQS19ASERERkWgsaImIiIhINK6hJSKKMK78IiIKDmdoiYiIiEg0FrREREREJBoLWiIiIiISjQUtEREREYnGgpaIiIiIRGNBS0RERESisaAlIiIiItFY0BIRERGRaP8fEKQWGqyratYAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot_cost_history(model):\n", " plt.figure(figsize=(8, 5))\n", " plt.plot(range(len(model.cost_history)), model.cost_history, color='purple', linewidth=2)\n", " plt.xlabel(\"Epochs\", fontsize=12)\n", " plt.ylabel(\"Cost (MSE)\", fontsize=12)\n", " plt.title(\"Cost Function Convergence\", fontsize=14)\n", " plt.grid(True, linestyle=\"--\", alpha=0.6)\n", " plt.show()\n", "plot_cost_history(model)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "base", "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.12.4" } }, "nbformat": 4, "nbformat_minor": 2 }