diff --git a/README.md b/README.md index c1e8359..1829793 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,123 @@ -# Project 1 -Put your README here. Answer the following questions. +--- -* What does the model you have implemented do and when should it be used? -* How did you test your model to determine if it is working reasonably correctly? -* What parameters have you exposed to users of your implementation in order to tune performance? (Also perhaps provide some basic usage examples.) -* Are there specific inputs that your implementation has trouble with? Given more time, could you work around these or is it fundamental? +# ElasticNet Linear Regression + +## Project Overview +This project implements Linear Regression with ElasticNet Regularization, combining both L1 (Lasso) and L2 (Ridge) regularization to improve model generalization. The goal is to provide a robust machine learning model that prevents overfitting and adapts to datasets with multicollinearity or irrelevant features. The ElasticNet model has been built from the ground up using gradient descent for optimization, without relying on libraries like Scikit-learn or Statsmodels. + +## Features +- **ElasticNet Regularization**: Applies both L1 and L2 penalties to the regression coefficients. +- **Custom Gradient Descent**: Minimizes the ElasticNet cost function using batch gradient descent. +- **Configurable Hyperparameters**: Users can easily adjust the weight of L1 (lambda1) and L2 (lambda2) regularization, along with other training settings. + +## Setup + +### Prerequisites +To run the code, ensure you have the following Python packages installed: +- Python 3.x +- NumPy: For efficient matrix operations and linear algebra. +- Pandas (optional): For dataset handling. + +Install them via pip: + +```bash +pip install numpy pandas +``` + +### How to Run +1. **Download the Notebook**: Clone the repository or download the notebook file (ElasticNet.ipynb) to your local machine: + ```bash + git clone + cd + ``` + +2. **Run the Notebook**: Open the notebook in Jupyter or any Python IDE with notebook support and run each cell sequentially: + ```bash + jupyter notebook ElasticNet.ipynb + ``` + +3. **Input Data**: + - The notebook uses a dataset (`output.csv`). If you use a custom dataset, ensure it is loaded into a pandas DataFrame with numeric features and target values. + + +4. **Train the Model**: The code will: + - Load and preprocess the data. + - Initialize and train the ElasticNet model using gradient descent. + - Evaluate the model's performance. + - Compares the true and predicted values + - Plots the loss curvature. + +### Example +```python +# Model training example: +model = ElasticNet(alpha=0.5, lambda1=0.1, lambda2=0.1) +model.fit(X_train, y_train) +predictions = model.predict(X_test) +``` + +## Parameters +You can customize the following parameters for model tuning: +- `alpha`: Weighting between L1 and L2 regularization. +- `lambda1`: Controls the strength of L1 regularization (Lasso). +- `lambda2`: Controls the strength of L2 regularization (Ridge). +- `learning_rate`: Learning rate for gradient descent. +- `max_iterations`: Maximum number of gradient descent iterations. + +## Outputs +- **Training Metrics**: The notebook prints the cost function values over iterations, giving insight into convergence. +- **Model Predictions**: Compare predicted values with actual target values to evaluate model performance. + +## Notes on Performance +The ElasticNet model performs well when: +- There's multicollinearity between predictors. +- Some features are irrelevant, making L1 regularization useful for feature selection. + +### Limitations +The gradient descent method may be slow for large datasets. Improving the convergence with adaptive learning rates or alternative optimization techniques could be considered with more time. + +## How to Run the Example: +### Load the Data: +Ensure your dataset (`output.csv`) is in the correct format: numerical data where all columns except the last are features, and the last column is the target. + +### Train the Model: +The ElasticNet model is trained on your dataset using `fit(X, y)`. + +### Performance Metrics: +After training, the model is evaluated using the `evaluate_model()` function, which prints: +- Mean Squared Error (MSE). +- R-squared (R²). + +### Visualizations: +The `plot_results()` function generates two plots: +- A True vs Predicted values plot to see how well the model fits the data. +- A Loss over iterations plot to visualize model convergence. + +## Conclusion: +This updated code provides both performance metrics (MSE and R²) and visualizations (True vs Predicted values and Loss history). These enhancements give more insight into how the ElasticNet model performs and help in debugging or improving the model. + +--- + +# QUESTIONS: + +1. **What does the model do and when should it be used?** + The model implements ElasticNet Linear Regression, which combines L1 (Lasso) and L2 (Ridge) regularization. It is used to prevent overfitting in cases where data has multicollinearity (correlated features) or irrelevant features. The L1 part encourages sparse solutions (feature selection), while the L2 part stabilizes the regression for collinear features. + +2. **How was the model tested?** + The model was tested by: + - Splitting data into training and test sets. + - Evaluating the predictions against ground truth using mean squared error (MSE) and visual comparisons of predicted vs actual values. + - Monitoring the convergence of the cost function during gradient descent. + +3. **Exposed Parameters for Tuning Performance:** + Users can adjust the following parameters: + - `alpha`: Controls the balance between L1 and L2 regularization. + - `lambda1`: L1 regularization strength (Lasso). + - `lambda2`: L2 regularization strength (Ridge). + - `learning_rate`: Controls the step size in gradient descent. + - `max_iterations`: Limits the number of gradient descent iterations. + +4. **Troublesome Inputs and Possible Solutions:** + The model may struggle with: + - Large datasets: Gradient descent can be slow without further optimization techniques. + - Highly non-linear data: ElasticNet assumes linear relationships, so performance may degrade if the data is non-linear. Given more time, more efficient optimization techniques like stochastic gradient descent or adaptive learning rates could improve performance, or using kernel methods for non-linearity. diff --git a/elasticnet/models/ElasticNet.ipynb b/elasticnet/models/ElasticNet.ipynb new file mode 100644 index 0000000..2a011e3 --- /dev/null +++ b/elasticnet/models/ElasticNet.ipynb @@ -0,0 +1,192 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean Absolute Error (MAE): 28.7012\n", + "Mean Squared Error (MSE): 1213.5272\n", + "Root Mean Squared Error (RMSE): 34.8357\n", + "R-squared (R²): 0.9393\n", + "\n", + "Sample Predictions:\n", + "True Value: 437.476, Predicted Value: 426.544\n", + "True Value: 453.635, Predicted Value: 433.960\n", + "True Value: 195.139, Predicted Value: 244.573\n", + "True Value: 552.212, Predicted Value: 512.789\n", + "True Value: 415.833, Predicted Value: 407.564\n" + ] + }, + { + "data": { + "image/png": "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4u3tzaJFixItJF+hQgUA3njjDUJCQhKUS7hfUt/zpJo9ezbffPMNL7zwAoUKFeL69et8++23eHt7J0gqiqRrDlnzT+QpldiysrVr1zZKlSqVaH+z2Wy8+eabRo4cOQxPT08jJCTEOHbsmJEvXz6ja9euNn2vX79ujBgxwihcuLDh6upq5MiRw6hWrZrx2WefGTExMUmKr1OnTtYlah+0evVqo0WLFkZgYKDh6upqBAYGGh07djSOHDnyyPPmy5fvP5c7NozElwO+3/Hjx40uXboYAQEBhouLi5E7d26jadOmxsKFC236/f3330bt2rUNd3d3I3fu3Mb7779vTJ8+3QCMEydOWPvVrl3bqF27ts1jo6OjjbffftsoUKCA4eLiYgQEBBht2rSxWdo3LCzMqFChguHq6ppgKWB7x/goQ4cONQCjXbt2CY5dvXrVePnll40cOXIYXl5eRkhIiHHo0KEEvztr165NdMnl8ePHG7lz5zbc3NyM6tWrGzt27Ej0NYuJiTE++eQTo1SpUoabm5uRNWtWo0KFCsbo0aONyMhIwzCe7HdHREQkrZk5c6YBPHQ7ffq0YRiGsWvXLiMkJMTw8vIyPD09jbp16xphYWE25/rggw+MypUrG76+voaHh4dRvHhx48MPP7Teu12+fNno27evUbx4cSNz5syGj4+PUaVKFWP+/PlJivXPP/80qlevbnh4eBje3t5Gs2bNjAMHDiTaNzQ01AAMk8lkfQ4PSsq9Tvzrs3379iTF+LB7wG+//dYoWLCg4ezsnOBeZe3atUZISIjh4+NjuLu7G4UKFTK6detm7Nixw9qna9euRubMmRO95oEDB4z69esbXl5eRo4cOYxevXoZe/bsMQBj5syZ1n6xsbFGv379jJw5cxomk8nmPv7B+0DDSNp7/rDX58F7sl27dhkdO3Y08ubNa7i5uRl+fn5G06ZNbZ6jSEZgMowHxgSKiIiIiIiIiIikMNWUEhERERERERGRVKeklIiIiIiIiIiIpDolpUREREREREREJNUpKSUiIiIiIiIiIqlOSSkREREREREREUl1SkqJiIiIiIiIiEiqy+TIi5vNZkaNGsWPP/5IREQEgYGBdOvWjXfeeQeTyQSAYRi89957fPvtt1y7do3q1aszefJkihQpYj3PlStX6NevH7///jtOTk60bt2aL774Ai8vryTF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OnToYOzfv996PK+O2zAM448//jAqV65suLu7GxUrVjQmTpxoczyv/nxbuHChAdwwFsPI2593QkKC0adPH6NkyZKGh4eHUaZMGWPIkCE22zLn1c9c7l1emt9l19xu69atRqNGjQx3d3ejWLFixqhRo7JriLeVnfO8ZcuWGdWrVzfc3NyMMmXK2FzDkbJrzpdTx38rWTX/y8nvQ3bNBXPye2AY2TcvzMk/Gw0je+aJWfV3wWQYhnHv661EREREREREREQyL9/XlBIRERERERERkeynpJSIiIiIiIiIiGQ7JaVERERERERERCTbKSklIiIiIiIiIiLZTkkpERERERERERHJdkpKiYiIiIiIiIhItlNSSkREREREREREsp2SUiIiIiIiIiIiku2UlBIRuY3Q0FDGjBnj6DBERERE8gXNvUTyDyWlRMTuTCbTfz7efffdbImjSpUqvPzyyzc99sMPP+Du7s7Zs2ezJRYRERGRnKhr1660adMGgAcffJC+fftm27WnTJlCoUKFbmhfv349L730UrbFISKOo6SUiNjdyZMnrY8xY8bg4+Nj0zZw4EBrX8MwSEtLy5I4evTowbRp07h06dINxyZPnswTTzxBQEBAllxbREREJL9KTU29p9cXKVKEAgUK2CkaEcnJlJQSEbsLDg62Pnx9fTGZTNbne/bswdvbmz///JNatWrh7u7OqlWrbH5Ll6Fv3748+OCD1ufp6emMHDmS0qVL4+npSbVq1Zg5c+Yt43juuee4dOkSs2bNsmmPiYkhKiqKHj16cODAAVq3bk1QUBAFCxakTp06LF68+JbnPHToECaTiS1btljb4uLiMJlMREVFWdt27NhBy5YtKViwIEFBQXTu3NlmVdbMmTOpUqUKnp6e+Pv706xZM5KTk//7jRURERHJIl27dmX58uWMHTvWurr90KFDwO3nNQ8++CC9e/emb9++BAQEEBERAcBnn31GlSpV8PLyokSJErzyyiskJSUBEBUVRbdu3YiPj79hNf31t+8dOXKE1q1bU7BgQXx8fHj66ac5deqU9fi7775L9erV+eGHHwgNDcXX15dnnnmGxMTErH3TROSeKSklIg7xxhtvMGrUKHbv3k3VqlUz9ZqRI0fy/fffM2HCBHbu3Em/fv147rnnWL58+U37BwQE0Lp1ayZNmmTTPmXKFIoXL07z5s1JSkri0UcfZcmSJWzevJkWLVrw+OOPc+TIkbseW1xcHA899BA1atRgw4YNLFiwgFOnTvH0008DlpVkHTt2pHv37uzevZuoqCjatm2LYRh3fU0RERGRezF27FjCw8N58cUXravbS5Qocdt5TYapU6fi5ubG33//zYQJEwBwcnLi888/Z+fOnUydOpWlS5cyePBgABo0aHDDivprV9NnSE9Pp3Xr1pw/f57ly5ezaNEiDh48SIcOHWz6HThwgDlz5jB37lzmzp3L8uXLGTVqVBa9WyJiLy6ODkBE8qfhw4fzyCOPZLp/SkoKH374IYsXLyY8PByAMmXKsGrVKr7++muaNGly09f16NGDli1bEhMTQ+nSpTEMg6lTp9KlSxecnJyoVq0a1apVs/YfMWIEs2fP5vfff6d37953NbYvv/ySGjVq8OGHH1rbJk2aRIkSJdi3bx9JSUmkpaXRtm1bSpUqBVjqX4mIiIg4iq+vL25ubhQoUIDg4GBr++3mNeXLlwegXLlyfPzxxzbnvLY+VWhoKO+//z4vv/wyX331FW5ubjYr6m9lyZIlbN++nZiYGEqUKAHA999/z/3338/69eupU6cOYEleTZkyBW9vbwA6d+7MkiVL+OCDD+7tjRGRLKWVUiLiELVr176j/vv37+fixYs88sgjFCxY0Pr4/vvvOXDgwC1f98gjj1C8eHEmT54MWCY2R44coVu3bgAkJSUxcOBAKlWqRKFChShYsCC7d+++p5VSW7duZdmyZTZxVqxYEbD8Fq9atWo8/PDDVKlShaeeeopvvvmGCxcu3PX1RERERLLK7eY1GWrVqnXDaxcvXszDDz9MsWLF8Pb2pnPnzpw7d46LFy9m+vq7d++mRIkS1oQUQFhYGIUKFWL37t3WttDQUGtCCqBo0aKcPn36jsYqItlPK6VExCG8vLxsnjs5Od1w+9qVK1esf86oPzBv3jyKFStm08/d3f2W13FycqJr165MnTqVd999l8mTJ9O0aVPKlCkDwMCBA1m0aBGjR4+mbNmyeHp60r59+1sW6HRysuTyr4312jgzYn388cf56KOPbnh90aJFcXZ2ZtGiRaxevZq//vqLL774giFDhrB27VpKly59y7GIiIiIZLfbzWsyXD+3O3ToEI899hg9e/bkgw8+wM/Pj1WrVtGjRw9SU1PtXsjc1dXV5rnJZCI9Pd2u1xAR+1NSSkRyhCJFirBjxw6bti1btlgnGGFhYbi7u3PkyJFb3qp3K926deP9998nMjKS2bNn8+2331qP/f3333Tt2pUnn3wSsEy8Mop63ipOsNSFqlGjhjXOa9WsWZNZs2YRGhqKi8vNf8yaTCYaNmxIw4YNGTp0KKVKlWL27Nn079//jsYmIiIiYi9ubm6YzWabtszMa25m48aNpKen8+mnn1p/qTd9+vTbXu96lSpV4ujRoxw9etS6WmrXrl3ExcURFhaW6XhEJGfS7XsikiM89NBDbNiwge+//55//vmHYcOG2SSpvL29GThwIP369WPq1KkcOHCATZs28cUXXzB16tT/PHfp0qV56KGHeOmll3B3d6dt27bWY+XKlSMyMpItW7awdetWnn322f/8rZqnpyf169e3Fmlfvnw5b7/9tk2fXr16cf78eTp27Mj69es5cOAACxcupFu3bpjNZtauXcuHH37Ihg0bOHLkCJGRkZw5c4ZKlSrd5bsnIiIicu9CQ0NZu3Ythw4d4uzZs6Snp992XnMrZcuW5cqVK3zxxRccPHiQH374wVoA/drrJSUlsWTJEs6ePXvT2/qaNWtGlSpV6NSpE5s2bWLdunU8//zzNGnS5I7LQYhIzqOklIjkCBEREbzzzjsMHjyYOnXqkJiYyPPPP2/TZ8SIEbzzzjuMHDmSSpUq0aJFC+bNm5epW9569OjBhQsXePbZZ/Hw8LC2f/bZZxQuXJgGDRrw+OOPExERQc2aNf/zXJMmTSItLY1atWrRt29f3n//fZvjISEh/P3335jNZpo3b06VKlXo27cvhQoVwsnJCR8fH1asWMGjjz5K+fLlefvtt/n0009p2bLlHbxjIiIiIvY1cOBAnJ2dCQsLo0iRIhw5cuS285pbqVatGp999hkfffQRlStX5qeffmLkyJE2fRo0aMDLL79Mhw4dKFKkyA2F0sGyuvy3336jcOHCPPDAAzRr1owyZcrw66+/2n38IpL9TIb2IBcRERERERERkWymlVIiIiIiIiIiIpLtlJQSEREREREREZFsp6SUiIiIiIiIiIhkOyWlREREREREREQk2ykpJSIiIiIiIiIi2U5JKRERERERERERyXZKSomIiIiIiIiISLZTUkpERERERERERLKdklIiIiIiIiIiIpLtlJQSEREREREREZFsp6SUiIiIiIiIiIhkOyWlREREREREREQk2/0/Qu2N0rEgR7AAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "#Caution!! SK learn is only used for performance metrics not for training and predicting\n", + "#Custom methods are implemented for training and predicting\n", + "from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score\n", + "\n", + "class ElasticNetModel:\n", + " def __init__(self, alpha=1.0, l1_ratio=0.5, max_iter=7000, tol=1e-4):\n", + " self.alpha = alpha # Regularization strength\n", + " self.l1_ratio = l1_ratio # Ratio between L1 and L2 penalties\n", + " self.max_iter = max_iter # Maximum number of iterations for optimization\n", + " self.tol = tol # Tolerance for stopping criteria\n", + " self.coef_ = None # Coefficients of the model\n", + " self.intercept_ = None # Intercept of the model\n", + " self.loss_history = [] # List to store loss values over iterations\n", + "\n", + " def fit(self, X, y):\n", + " # Normalize features\n", + " feature_mean = np.mean(X, axis=0)\n", + " feature_std = np.std(X, axis=0)\n", + " X_normalized = (X - feature_mean) / feature_std\n", + "\n", + " # Normalize target variable\n", + " target_mean = np.mean(y)\n", + " y_normalized = y - target_mean\n", + "\n", + " # Initialize coefficients and intercept\n", + " num_samples, num_features = X_normalized.shape\n", + " self.coef_ = np.zeros(num_features)\n", + " self.intercept_ = target_mean\n", + "\n", + " # Gradient descent optimization loop\n", + " for iteration in range(self.max_iter):\n", + " y_predicted = X_normalized.dot(self.coef_) + self.intercept_\n", + "\n", + " # Compute gradient for coefficients\n", + " gradient = -2 * X_normalized.T.dot(y_normalized - y_predicted) / num_samples\n", + " l1_regularization = self.alpha * self.l1_ratio * np.sign(self.coef_)\n", + " l2_regularization = self.alpha * (1 - self.l1_ratio) * self.coef_\n", + "\n", + " # Update coefficients\n", + " new_coef = self.coef_ - self.tol * (gradient + l1_regularization + l2_regularization)\n", + "\n", + " # Calculate mean squared error for loss tracking\n", + " loss = mean_squared_error(y_normalized, y_predicted)\n", + " self.loss_history.append(loss)\n", + "\n", + " # Check for convergence\n", + " if np.max(np.abs(new_coef - self.coef_)) < self.tol:\n", + " print(f\"Converged after {iteration} iterations.\")\n", + " break\n", + " self.coef_ = new_coef\n", + "\n", + " return ElasticNetModelResults(self.coef_, self.intercept_, feature_mean, feature_std)\n", + "\n", + "class ElasticNetModelResults:\n", + " def __init__(self, coefficients, intercept, feature_mean, feature_std):\n", + " self.coef_ = coefficients\n", + " self.intercept_ = intercept\n", + " self.feature_mean = feature_mean\n", + " self.feature_std = feature_std\n", + "\n", + " def predict(self, X):\n", + " X_normalized = (X - self.feature_mean) / self.feature_std\n", + " return X_normalized.dot(self.coef_) + self.intercept_\n", + "\n", + "def load_data(filepath):\n", + " \"\"\"Load the dataset from a CSV file.\"\"\"\n", + " data = pd.read_csv(filepath)\n", + " X = data.iloc[:, :-1].values # Features\n", + " y = data.iloc[:, -1].values # Target variable\n", + " return X, y\n", + "\n", + "def evaluate_model(model_results, X, y_true):\n", + " \"\"\"Evaluate the model's performance.\"\"\"\n", + " y_predicted = model_results.predict(X)\n", + " mse = mean_squared_error(y_true, y_predicted)\n", + " rmse = np.sqrt(mse)\n", + " mae = mean_absolute_error(y_true, y_predicted)\n", + " r2 = r2_score(y_true, y_predicted)\n", + " return mae, mse, rmse, r2, y_predicted\n", + "\n", + "def plot_results(y_true, y_predicted, loss_history):\n", + " \"\"\"Visualize the model's predictions and loss over iterations.\"\"\"\n", + " plt.figure(figsize=(12, 5))\n", + "\n", + " # Plot true vs predicted values\n", + " plt.subplot(1, 2, 1)\n", + " plt.scatter(y_true, y_predicted, color=\"blue\", label=\"Predicted\")\n", + " plt.plot([min(y_true), max(y_true)], [min(y_true), max(y_true)], color=\"red\", lw=2, label=\"Ideal\")\n", + " plt.xlabel(\"True Values\")\n", + " plt.ylabel(\"Predicted Values\")\n", + " plt.title(\"True vs Predicted Values\")\n", + " plt.legend()\n", + "\n", + " # Plot loss over iterations\n", + " plt.subplot(1, 2, 2)\n", + " plt.plot(loss_history, label=\"Loss (MSE)\")\n", + " plt.xlabel(\"Iteration\")\n", + " plt.ylabel(\"Loss (MSE)\")\n", + " plt.title(\"Loss over Iterations\")\n", + " plt.legend()\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + "if __name__ == \"__main__\":\n", + " # Load the dataset from a CSV file\n", + " X, y = load_data(\"../tests/output.csv\")\n", + " \n", + " # Initialize the ElasticNet model with specified parameters\n", + " model = ElasticNetModel(alpha=0.1, l1_ratio=0.5)\n", + " \n", + " # Fit the model to the data\n", + " model_results = model.fit(X, y)\n", + " \n", + " # Evaluate the model's performance\n", + " mae, mse, rmse, r2, y_predicted = evaluate_model(model_results, X, y)\n", + " print(f\"Mean Absolute Error (MAE): {mae:.4f}\")\n", + " print(f\"Mean Squared Error (MSE): {mse:.4f}\")\n", + " print(f\"Root Mean Squared Error (RMSE): {rmse:.4f}\")\n", + " print(f\"R-squared (R²): {r2:.4f}\")\n", + " \n", + " # Display sample predictions\n", + " print(\"\\nSample Predictions:\")\n", + " for i in range(5):\n", + " print(f\"True Value: {y[i]:.3f}, Predicted Value: {y_predicted[i]:.3f}\")\n", + " \n", + " # Visualize the results\n", + " plot_results(y, y_predicted, model.loss_history)\n" + ] + } + ], + "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.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/elasticnet/models/ElasticNet.py b/elasticnet/models/ElasticNet.py deleted file mode 100644 index 017e925..0000000 --- a/elasticnet/models/ElasticNet.py +++ /dev/null @@ -1,17 +0,0 @@ - - -class ElasticNetModel(): - def __init__(self): - pass - - - def fit(self, X, y): - return ElasticNetModelResults() - - -class ElasticNetModelResults(): - def __init__(self): - pass - - def predict(self, x): - return 0.5 diff --git a/elasticnet/tests/ExampleTest.ipynb b/elasticnet/tests/ExampleTest.ipynb new file mode 100644 index 0000000..2941450 --- /dev/null +++ b/elasticnet/tests/ExampleTest.ipynb @@ -0,0 +1,293 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ElasticNet Model Implementation for King County House Sales dataset\n", + "\n", + "This code implements a custom ElasticNet regression model using Python. It combines both L1 (Lasso) and L2 (Ridge) regularization techniques, providing a flexible approach to linear regression that can handle datasets with multicollinearity and high dimensionality.\n", + "\n", + "##### Load a dataset using openML from SKlearn datasets ( King County House Sales dataset: data_id=42165)\n", + "- The below line in the code loads the data\n", + "- X, y = load_openml_data(dataset_id=42165)\n", + "\n", + "### Key Features of the ElasticNet Model\n", + "\n", + "1. **Data Preprocessing**:\n", + " - Removes rows with NaN values.\n", + " - Identifies and removes outliers using the Interquartile Range (IQR) method.\n", + " - Normalizes the features and the target variable to improve convergence during training.\n", + "\n", + "2. **Model Training**:\n", + " - The model is fit using gradient descent, iteratively updating coefficients to minimize the Mean Squared Error (MSE).\n", + " - Convergence is checked based on the change in coefficients, allowing for early stopping when improvements become negligible.\n", + "\n", + "3. **Prediction**:\n", + " - The model provides predictions based on normalized input data, scaling the new data using the mean and standard deviation calculated during training.\n", + "\n", + "4. **Evaluation**:\n", + " - Model performance is evaluated using metrics such as Mean Absolute Error (MAE), Mean Squared Error (MSE), Root Mean Squared Error (RMSE), and R-squared (R²).\n", + " - Predictions are cleaned of NaN values to ensure accurate evaluation.\n", + "\n", + "5. **Visualization**:\n", + " - Results can be visualized using scatter plots comparing true versus predicted values and a plot showing the loss (MSE) over the iterations.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removing rows with NaN values: 339 rows removed.\n", + "Shapes after NaN removal - X: (1121, 37), y: (1121,)\n", + "Shapes after outlier removal - X: (1071, 37), y: (1071,)\n", + "Removing NaN values from evaluation: 339 rows removed.\n", + "Mean Absolute Error (MAE): 23163.5932\n", + "Mean Squared Error (MSE): 1705696757.1841\n", + "Root Mean Squared Error (RMSE): 41300.0818\n", + "R-squared (R²): 0.7522\n", + "\n", + "Sample Predictions:\n", + "True Value: 208500.000, Predicted Value: 214327.599\n", + "True Value: 181500.000, Predicted Value: 188750.706\n", + "True Value: 223500.000, Predicted Value: 222498.641\n", + "True Value: 140000.000, Predicted Value: 187357.946\n", + "True Value: 250000.000, Predicted Value: 277962.108\n", + "Lengths - True Values: 1460, Predicted Values: 1121\n", + "Warning: Lengths of true and predicted values differ. Adjusting to match.\n" + ] + }, + { + "data": { + "image/png": "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4pavM5G8RMv0RPIZNzc3+vTpc9u3X7p0KU2bNqVQoUKcPXvWemndujVms5ktW7bc8LY+Pj60a9eOJUuW2OzStnjxYho1akSZMmUA8PPzA+Cbb77J1JKy661bt46iRYtStGhR6tSpw9KlS3n66ad58803beZ16tTJuhwO4Pz58/z444888cQTXLx40frYzp07R3BwMH///TcnTpwALA0uGzVqRIMGDay3L1q0aKZ6KH399dcUKVKEIUOGpLvu2nLwjORWjACFChXi4Ycf5ttvv7V+w2kYBosWLaJ+/fpUrlwZwKbS6sqVK5w7d46KFSvi5+fH3r17M3Vft7J06VKqVatG1apVbV53Dz74IACbNm0C7vy1IyIiklVms5l169bx2GOP2bQjKF68OE8++STbtm0jNjYWsLxPHThwgL///jvDc3l4eODq6kpYWBgXLlzIdAyRkZHs27eP3r174+/vbx2vXbs2Dz30EKtXr7aOde3aldOnT9ssg1u2bBkpKSl07doVyNrnjVTPPPMMzs7OmY45M9avX090dDTdu3e3ef93dnamYcOG1vf/az333HPpxq79rBIXF8fZs2d54IEHMAyDX375JctxZeVnnmrAgAE2n/OaNm2K2Wzmv//+A9I+w3z//fcZtkgQyWuUjBLJZ0qWLHlHDbX//vtv1qxZY032pF5at24NWEqMb6Zr164cO3aM8PBwAA4fPsyePXusH35S5zRu3Jj+/ftTrFgxunXrxpIlSzKdXGjYsCHr169nw4YNbN++nbNnz/L555+nW55Wvnx5m+N//vkHwzB4/fXX0z2+sWPH2jy+//77j0qVKqW77ypVqtwyvsOHD1OlSpXb2pElt2JM1aNHD+Li4vjmm28A2L59O0ePHrVJaF2+fJkxY8ZYe4gVKVKEokWLEh0dTUxMTJYfY0b+/vtvDhw4kO4xpybEUh/znb52RCR3bdmyhUceeYQSJUpgMpmsS24zKyEhgd69e1OrVi0KFCjAY489luG8sLAw7rvvPmufw3nz5t1x7CKpzpw5Q3x8fIbvr9WqVSMlJYVjx44BMGHCBKKjo6lcuTK1atXi5Zdf5rfffrPOd3Nz48033+SHH36gWLFiNGvWjGnTphEVFXXTGFITGjeK4ezZs9Yvltq2bYuvr691eRhYvhisW7eu9X01K583Ul3/uSo7pCbtHnzwwXRxrFu3Ll0MBQoUyLBfVUREhDVR5+3tTdGiRa3LFG/ns0pWfuapUr90TVWoUCEAa9KxefPmdOrUifHjx1OkSBE6duzI3Llz0/XGFMkr1DNKJJ/JbL+gVGaz2eY4JSWFhx56iJEjR2Y4P/VDzI088sgjeHp6smTJEh544AGWLFmCk5OTtXFlaoxbtmxh06ZNrFq1ijVr1rB48WIefPBB1q1bd8tv3YoUKWJNjt3M9c9FasJixIgRBAcHZ3ibihUr3vK8OSm3Y+zQoQO+vr4sXLiQJ598koULF+Ls7Ey3bt2sc4YMGcLcuXMZNmwYQUFB+Pr6YjKZ6Nat2y2TQDeqBDObzTY/55SUFGrVqsXbb7+d4fzSpUsDd/7aEZHcFRcXR506dejbt6+1P15WmM1mPDw8eOGFF/j6668znHPkyBHat2/PwIED+fLLL9m4cSP9+/enePHiN/x/VCSnNGvWjMOHD/PNN9+wbt06PvnkE9555x1mz55N//79ARg2bBiPPPIIK1euZO3atbz++utMmTKFH3/8kXvvvfeOY3Bzc+Oxxx5jxYoVfPjhh5w6dYqffvqJyZMnW+fczueNrH7GzIzUOBYsWEBgYGC666//Ys/NzQ0nJ9t6C7PZzEMPPcT58+d55ZVXqFq1Kl5eXpw4cYLevXvn2hdWN/oMkrpawGQysWzZMnbs2MF3333H2rVr6du3LzNmzGDHjh14e3vnSpwiuUXJKBEBLN/OREdH24wlJSURGRlpM1ahQgUuXbqUqWRPRry8vOjQoQNLly7l7bffZvHixTRt2pQSJUrYzHNycqJVq1a0atWKt99+m8mTJ/Pqq6+yadOm277vW0kts3ZxcbnlfZQtWzbDEvtDhw7d8n4qVKjAzp07uXLlCi4uLhnOuVGSJrdiTOXm5kbnzp35/PPPOXXqFEuXLuXBBx+0+UC4bNkyevXqxYwZM6xjCQkJ6V5PGcnodQeWb3ivLXuvUKECv/76K61atbrlUkZ7vHZE5Pa0a9eOdu3a3fD6xMREXn31Vb766iuio6OpWbMmb775pnW3TS8vL0JDQwH46aefMvz/ZPbs2ZQvX976f1S1atXYtm0b77zzjpJRki2KFi2Kp6dnhu+vf/75J05OTtYvTQD8/f3p06cPffr04dKlSzRr1oxx48ZZk1Fged976aWXeOmll/j777+pW7cuM2bM4IsvvsgwhrJlywIZv8f/+eefFClSBC8vL+tY165dmT9/Phs3buSPP/7AMAybKvWsfN7IDjd6b69QoQIAAQEBtx3H/v37+euvv5g/fz49e/a0jl+7g+Gt4rheVn/mWdGoUSMaNWrEpEmTWLhwIT169GDRokU2rw+RvEDL9EQEsLzZX9/v6eOPP05XGfXEE08QHh7O2rVr050jOjqa5OTkW95X165dOXnyJJ988gm//vqrzYcfsPQpuF7dunUBcrRUOSAggBYtWvDRRx+lS8IBNtvvPvzww+zYsYOff/7Z5vovv/zylvfTqVMnzp49y/vvv5/uutRvx1J3f7n+F6vcivFaPXr04MqVKzz77LOcOXMmXc8pZ2dnmx5gAO+99166105GKlSowI4dO0hKSrKOff/99+lK25944glOnDjBnDlz0p3j8uXL1qUH9nrtiEjOeP755wkPD2fRokX89ttvdOnShbZt296w305GwsPD0/0SGxwcbF0uLnKnnJ2dadOmDd988w1Hjx61jp86dYqFCxfSpEkTfHx8AMuuxtfy9vamYsWK1veo+Ph4EhISbOZUqFCBggUL3vR9rHjx4tStW5f58+fbfHb4/fffWbduHQ8//LDN/NatW+Pv78/ixYtZvHgxDRo0sFlml5XPG9khNVF2/eee4OBgfHx8mDx5coZ9lDITR2pF0rWfVQzDYNasWZmOI6NzZvZnnlkXLlxI93lKn2EkL1NllIgA0L9/fwYOHEinTp146KGH+PXXX1m7di1FihSxmffyyy/z7bff0qFDB3r37k29evWIi4tj//79LFu2jKNHj6a7zfUefvhhChYsyIgRI3B2dqZTp04210+YMIEtW7bQvn17ypYty+nTp/nwww8pVaoUTZo0yfbHfq0PPviAJk2aUKtWLZ555hnuueceTp06RXh4OMePH+fXX38FYOTIkSxYsIC2bdsydOhQvLy8+PjjjylbtqxN74eM9OzZk88//5zhw4fz888/07RpU+Li4tiwYQODBg2iY8eOeHh4UL16dRYvXkzlypXx9/enZs2a1KxZM1divFbz5s0pVaoU33zzDR4eHumW0nTo0IEFCxbg6+tL9erVCQ8PZ8OGDRQuXPiW5+7fvz/Lli2jbdu2PPHEExw+fJgvvvjC+k1oqqeffpolS5YwcOBANm3aROPGjTGbzfz5558sWbKEtWvX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iqlTp1KpUiUMw2D+/Pl07NiRX375hRo1atzwdkePHmXEiBE0bdo03XXTpk3j3XffZf78+ZQvX57XX3+d4OBgDh48iLu7e04+HBERcVD6PTZ/cXJyonz58ri6ut7ReUyGYRjZFJPcQmxsLL6+vsTExGS4e0xkZCTR0dEEBATg6empZMZdxjAM4uPjOX36NH5+fhQvXtzeIYmISC651Xu8o/D392f69On069cvw+vNZjPNmjWjb9++bN26lejoaGtllGEYlChRgpdeeokRI0YAEBMTQ7FixZg3bx7dunXLVAx3y3MlIiKZo99j84+UlBROnjyJi4sLZcqUSfezzsp7vCqjHITZbLb+Ay5cuLC9w5Hb5OHhAcDp06cJCAjQkj0REXEIZrOZpUuXEhcXR1BQ0A3nTZgwgYCAAPr168fWrVttrjty5AhRUVG0bt3aOubr60vDhg0JDw/PdDJKRETyDv0em/8ULVqUkydPkpycjIuLy22fR8koB5G6ttbT09POkcidSv0ZXrlyRckoERGxq/379xMUFERCQgLe3t6sWLGC6tWrZzh327ZtfPrpp+zbty/D66OiogAoVqyYzXixYsWs12UkMTGRxMRE63FsbGwWH4WIiDgq/R6b/6QuzzObzXeUjNJueg5GJY13P/0MRUTEUVSpUoV9+/axc+dOnnvuOXr16sXBgwfTzbt48SJPP/00c+bMoUiRItkaw5QpU/D19bVeSpcuna3nFxER+9PvQPlHdv2sVRklIiIikke5urpSsWJFAOrVq8euXbuYNWsWH330kc28w4cPc/ToUR555BHrWEpKCgAFChTg0KFDBAYGAnDq1CmbvoinTp2ibt26N4xh9OjRDB8+3HocGxurhJSIiEg+p8oouWv07t2bxx57zHrcokULhg0blutxhIWFYTKZtFuEiIjcdVJSUmyWzKWqWrUq+/fvZ9++fdbLo48+SsuWLdm3bx+lS5emfPnyBAYGsnHjRuvtYmNj2blz5037ULm5ueHj42NzEREREVuffvopbdq0sWsMZ8+eJSAggOPHj+f4fSkZJXesd+/emEwmTCaT9RvYCRMmkJycnKP3u3z5ct54441MzVUCSURE8pvRo0ezZcsWjh49yv79+xk9ejRhYWH06NEDgJ49ezJ69GgA3N3dqVmzps3Fz8+PggULUrNmTVxdXTGZTAwbNoyJEyfy7bffsn//fnr27EmJEiVsviwSERG5G1xf7GBPCQkJvP7664wdO9Y6Nm7cOEwmE23btk03f/r06ZhMJlq0aGEdi4+PZ/To0VSoUAF3d3eKFi1K8+bN+eabb6xzWrRoYf3d/drLwIEDAShSpAg9e/a0iSOnaJleHmM2w9atEBkJxYtD06aQGz2027Zty9y5c0lMTGT16tUMHjwYFxcX64fcVElJSdaGZ3fK398/W84jIiKSF50+fZqePXsSGRmJr68vtWvXZu3atTz00EMARERE4OSUte8lR44cSVxcHAMGDCA6OpomTZqwZs0a3N3dc+IhiIiI5AvLli3Dx8eHxo0b24wXL16cTZs2cfz4cUqVKmUd/+yzzyhTpozN3IEDB7Jz507ee+89qlevzrlz59i+fTvnzp2zmffMM88wYcIEm7FrG9D36dOHevXqMX369Bz9nVuVUXnI8uVQrhy0bAlPPmn5s1w5y3hOc3NzIzAwkLJly/Lcc8/RunVrvv32W2u2edKkSZQoUYIqVaoAcOzYMZ544gn8/Pzw9/enY8eOHD161Ho+s9nM8OHD8fPzo3DhwowcORLDMGzu8/pleomJibzyyiuULl0aNzc3KlasyKeffsrRo0dp2bIlAIUKFcJkMtG7d2/AslxhypQplC9fHg8PD+rUqcOyZcts7mf16tVUrlwZDw8PWrZsaROniIjcZWJi7B1Brkl9D0xMTOT06dNs2LDBmogCS9XwvHnzbnj7efPmsXLlSpsxk8nEhAkTiIqKIiEhgQ0bNlC5cuUcegQiIiL2s3nzZho0aICbmxvFixdn1KhRNqt/li1bRq1atfDw8KBw4cK0bt2auLg4wPIe26BBA7y8vPDz86Nx48b8999/N7yvRYsW2fRtTBUQEECbNm2YP3++dWz79u2cPXuW9u3b28z99ttv+d///sfDDz9MuXLlqFevHkOGDKFv37428zw9PQkMDLS5XLuEvkaNGpQoUYIVK1Zk7QnLIiWj8ojly6FzZ7h+aeeJE5bx3EhIXcvDw4OkpCQANm7cyKFDh1i/fj3ff/89V65cITg4mIIFC7J161Z++uknvL29adu2rfU2M2bMYN68eXz22Wds27aN8+fP3/IfQ8+ePfnqq6949913+eOPP/joo4/w9vamdOnSfP311wAcOnSIyMhIZs2aBVh2+Pn888+ZPXs2Bw4c4MUXX+Spp55i8+bNgCVpFhISwiOPPMK+ffvo378/o0aNyqmnTUREckpSEjz3HDRokK8SUvlJsjmFDQdPsfKXEySbU+wdjohIvmUYBvFJyXa5XF/AcLtOnDjBww8/zP3338+vv/5KaGgon376KRMnTgQgMjKS7t2707dvX/744w/CwsIICQnBMAySk5N57LHHaN68Ob/99hvh4eEMGDDgprvQbdu2jfr162d4Xd++fW2+PPrss8/o0aNHuhVHgYGBrF69mosXL97x42/QoAFbt2694/PcjJbp5QFmMwwdChn9uzMMMJlg2DDo2DHnl+wZhsHGjRtZu3YtQ4YM4cyZM3h5efHJJ59Y/7F88cUXpKSk8Mknn1j/Qc6dOxc/Pz/CwsJo06YNM2fOZPTo0YSEhAAwe/Zs1q5de8P7/euvv1iyZAnr16+ndevWANxzzz3W61PLCwMCAvDz8wMslVSTJ09mw4YN1sar99xzD9u2beOjjz6iefPmhIaGUqFCBWbMmAFYtsjev38/b775ZjY+ayIikqNSv5nZscNy3LMnrFxpeYOUPKX/57sBaFa5KP5e2dMWQEREsubyFTPVx9z4d7ecdHBCMJ6ud57m+PDDDyldujTvv/8+JpOJqlWrcvLkSV555RXGjBlDZGQkycnJhISEULZsWQBq1aoFwPnz54mJiaFDhw5UqFABgGrVqt3wvqKjo4mJiaFEiRIZXt+hQwcGDhzIli1bqFevHkuWLGHbtm189tlnNvM+/vhjevToQeHChalTpw5NmjShc+fO6Zb+ffjhh3zyySc2Yx999JG1pyRAiRIl+OWXXzL5bN0eVUblAVu3pq+IupZhwLFjlnk55fvvv8fb2xt3d3fatWtH165dGTduHGD5R3lt1vbXX3/ln3/+oWDBgnh7e+Pt7Y2/vz8JCQkcPnyYmJgYIiMjadiwofU2BQoUuGGmGGDfvn04OzvTvHnzTMf8zz//EB8fz0MPPWSNw9vbm88//5zDhw8D8Mcff9jEAdx0xyAREXEwW7bAffelJaLc3ODxx5WIyoMKODvh7mL5aBuXmLObqIiISN72xx9/EBQUZFPN1LhxYy5dusTx48epU6cOrVq1olatWnTp0oU5c+Zw4cIFwFII0bt3b4KDg3nkkUeYNWsWkZGRN7yvy5cvA9yw/6KLiwtPPfUUc+fOZenSpVSuXJnatWunm9esWTP+/fdfNm7cSOfOnTlw4ABNmzZNt+lXjx49bHbPTd1B91oeHh7Ex8dn7sm6TaqMygNu8rq+rXm3o2XLloSGhuLq6kqJEiUoUCDtpeXl5WUz99KlS9SrV48vv/wy3XmKFi16W/fv4eGR5dtcunQJgFWrVlGyZEmb69zc3G4rDhERcRCGAe++Cy+9ZCkhBihbFr7+GurVs29skmO83VxIuJLIxQQlo0RE7MXDxZmDE4Ltdt+5wdnZmfXr17N9+3bWrVvHe++9x6uvvsrOnTspX748c+fO5YUXXmDNmjUsXryY1157jfXr19OoUaN05ypcuDAmk8mazMpI3759adiwIb///nu6HlDXcnFxoWnTpjRt2pRXXnmFiRMnMmHCBF555RVrgYivry8VK1a86eM7f/78bf9unlmqjMoDihfP3nm3w8vLi4oVK1KmTBmbRFRG7rvvPv7++28CAgKoWLGizcXX1xdfX1+KFy/Ozp07rbdJTk5mz549NzxnrVq1SElJsfZ6ul7qPzxz6i8kQPXq1XFzcyMiIiJdHKVLlwYs5ZQ///yzzbl2pH67LiIijikuDp56yrJGPfX//datYfduJaLyOG83yy8hcUlKRomI2IvJZMLTtYBdLjfry5QV1apVIzw83KYH1U8//UTBggWtu9qZTCYaN27M+PHj+eWXX3B1dbXpc3zvvfcyevRotm/fTs2aNVm4cGGG9+Xq6kr16tU5ePDgDeOpUaMGNWrU4Pfff+fJJ5/M9OOoXr06ycnJJCQkZPo2AL///jv33ntvlm6TVUpG5QFNm0KpUjdecWAyQenSlnmOoEePHhQpUoSOHTuydetWjhw5QlhYGC+88ALHr643HDp0KFOnTmXlypX8+eefDBo0iOjo6Bues1y5cvTq1Yu+ffuycuVK6zmXLFkCQNmyZTGZTHz//fecOXOGS5cuUbBgQUaMGMGLL77I/PnzOXz4MHv37uW9996z7lYwcOBA/v77b15++WUOHTrEwoULb7rzkIiI2Nnhw/DAA3DtB75Ro2DNGihSxH5xSa7wdrd8IXZJlVEiIpIJMTEx6ZasHTt2jEGDBnHs2DGGDBnCn3/+yTfffMPYsWMZPnw4Tk5O7Ny5k8mTJ7N7924iIiJYvnw5Z86coVq1ahw5coTRo0cTHh7Of//9x7p16/j7779v2jcqODiYbdu23TTWH3/8kcjISGsP5Ou1aNGCjz76iD179nD06FFWr17N//73P1q2bGmzW158fDxRUVE2l2ursuLj49mzZw9t2rTJ2pOZRUpG5QHOznB1c7h0CanU45kzc755eWZ5enqyZcsWypQpQ0hICNWqVaNfv34kJCRY/5G89NJLPP300/Tq1YugoCAKFizI448/ftPzhoaG0rlzZwYNGkTVqlV55plnrFtrlixZkvHjxzNq1CiKFSvG888/D8Abb7zB66+/zpQpU6hWrRpt27Zl1apVlC9fHoAyZcrw9ddfs3LlSurUqcPs2bOZPHlyDj47IiJy21avhvr14bffLMfe3pZleVOmOM6boOQor6tNay+pZ5SIiGRCWFgY9957r81l/PjxlCxZktWrV/Pzzz9Tp04dBg4cSL9+/XjttdcA8PHxYcuWLTz88MNUrlyZ1157jRkzZtCuXTs8PT35888/6dSpE5UrV2bAgAEMHjyYZ5999oZx9OvXj9WrVxNzkx1/vby8bpiIAktCa/78+bRp04Zq1aoxZMgQgoODrQUaqebMmUPx4sVtLt27d7de/80331CmTBma5nA1i8nIrr0P5ZZiY2Px9fUlJibGJjMJkJCQwJEjRyhfvvwNG5fdyvLlll31rm1mXrq0JRF1dVM6yQXZ8bMUEZEsSEmBiRNh3Li0rWWrVIEVK+Am30Jmp5u9x4utnHyu+s/fxYY/TjMlpBbdG5TJ1nOLiEh6+t0n+3Tp0oX77ruP0aNH2zWORo0a8cILL9xwOeDNfuZZeY9XA/M8JCQEOna07JoXGWnpEdW0qb4MFhGRPCw6Gp5+Gr7/Pm3s8cdh3jxQUijf8XKzfLTVbnoiInK3mT59Ot99951dYzh79iwhISE2lVI5RcmoPMbZGVq0sHcUIiIiueD33y2Jp3/+sRybTDBpkqVHVDY1MJW7i/fVZJR20xMRkbtNuXLlGDJkiF1jKFKkCCNHjsyV+1IySkRERO4+ixdD374QH2859veHr76CHG62KY7NW5VRIiIidwU1MBcREZG7R3IyjBgB3bqlJaLuvRf27FEiSqzJKDUwFxERcWyqjBIREZG7w+nT0LUrhIWljfXsCbNng4eH3cISx+GlZJSIiMhdQZVRIiIi4vh27oR69dISUQUKwAcfWBqVKxElV3m7KxklImIPKSkp9g5BcomRunPxHVJllIiIiDi2OXPg+echKclyXLw4LFsGDzxg37jE4RRMrYxSA3MRkVzh6uqKk5MTJ0+epGjRori6umLSJiJ5lmEYnDlzBpPJhIuLyx2dS8koERERcUwJCTBkCHzySdpYkyawdCkEBtovLnFYWqYnIpK7nJycKF++PJGRkZw8edLe4UguMJlMlCpVCmdn5zs6j5JRIiIi4niOHYNOnWDXrrSxF16At96CO/wmTvIuLdMTEcl9rq6ulClThuTkZMxms73DkRzm4uJyx4koUDJKckGLFi2oW7cuM2fOdOhzioiIg9i0CZ54As6etRx7eMDHH8NTT9k3LnF4qbvpxSkZJSKSq1KXbd3p0i3JP9TAXO5Y7969eeyxx+wdhoiI3O0Mw1L51Lp1WiKqfHnYvl2JKMkUby3TExERuSuoMkpERETs79Il6NvX0g8qVdu28OWX4O9vv7jkrpLaM+qK2SAx2YxbgTtfRiAiIiLZT5VRkq3i4uLo2bMn3t7eFC9enBkzZqSbk5iYyIgRIyhZsiReXl40bNiQsNStuoFz587RvXt3SpYsiaenJ7Vq1eKrr77KxUchIiK56q+/oGFD20TU66/D998rESVZkloZBdpRT0RExJEpGSXZ6uWXX2bz5s188803rFu3jrCwMPbu3Wsz5/nnnyc8PJxFixbx22+/0aVLF9q2bcvff/8NQEJCAvXq1WPVqlX8/vvvDBgwgKeffpqff/7ZHg9JRERy0rffwv33w8GDlmMfH/jmG5gwAbKhOabkL85OJjxcLK+buEQ10RUREXFUWqbnyOrXh6io3L/fwEDYvTvLN7t06RKffvopX3zxBa1atQJg/vz5lCpVyjonIiKCuXPnEhERQYkSJQAYMWIEa9asYe7cuUyePJmSJUsyYsQI622GDBnC2rVrWbJkCQ0aNLjDByciIg7BbIZx42DixLSx6tVhxQqoXNluYcndz9u9AJevmLmYeMXeoYiIiMgNKBnlyKKi4MQJe0eRaYcPHyYpKYmGDRtax/z9/alSpYr1eP/+/ZjNZipf94tGYmIihQsXBsBsNjN58mSWLFnCiRMnSEpKIjExEU9Pz9x5ICIikrPOn4cePWDNmrSxLl3gs8/A29t+cUme4O1WgDMXE1UZJSIi4sCUjHJkgYF57n4vXbqEs7Mze/bswfm65RfeV38BmT59OrNmzWLmzJnUqlULLy8vhg0bRlJSUo7FJSIiueTXX+Hxx+HIEcuxkxO8+Sa89BKYTPaNTfKEtB31VBklIiLiqOzaM6pcuXKYTKZ0l8GDBwOW3kGDBw+mcOHCeHt706lTJ06dOmVzjoiICNq3b4+npycBAQG8/PLLJCfbNqwMCwvjvvvuw83NjYoVKzJv3rx0sXzwwQeUK1cOd3d3GjZsmK4/UWZiyXa7d8Px47l/uY0legAVKlTAxcWFnTt3WscuXLjAX3/9ZT2+9957MZvNnD59mooVK9pcAq8mwX766Sc6duzIU089RZ06dbjnnntsziEiInepL76AoKC0RFSRIrB+PYwYoUSUZBsvN8uXXZdUGSUiIuKw7JqM2rVrF5GRkdbL+vXrAejSpQsAL774It999x1Lly5l8+bNnDx5kpCQEOvtzWYz7du3Jykpie3btzN//nzmzZvHmDFjrHOOHDlC+/btadmyJfv27WPYsGH079+ftWvXWucsXryY4cOHM3bsWPbu3UudOnUIDg7m9OnT1jm3ikUslU39+vXj5Zdf5scff+T333+nd+/eODmlvcwqV65Mjx496NmzJ8uXL+fIkSP8/PPPTJkyhVWrVgFQqVIl1q9fz/bt2/njjz949tlncz7xJyIiOefKFRg6FJ5+Gi5ftozdfz/s2QMPPmjf2CTP8XZzAbSbnoiIiCOz6zK9okWL2hxPnTqVChUq0Lx5c2JiYvj0009ZuHAhD179oDp37lyqVavGjh07aNSoEevWrePgwYNs2LCBYsWKUbduXd544w1eeeUVxo0bh6urK7Nnz6Z8+fLMmDEDgGrVqrFt2zbeeecdgoODAXj77bd55pln6NOnDwCzZ89m1apVfPbZZ4waNSpTsYjF9OnTuXTpEo888ggFCxbkpZdeIiYmxmbO3LlzmThxIi+99BInTpygSJEiNGrUiA4dOgDw2muv8e+//xIcHIynpycDBgzgscceS3ceERG5C0RFwRNPwNataWP9+sH774O7u/3ikjzL2y11Nz0lo0RERByVw/SMSkpK4osvvmD48OGYTCb27NnDlStXaN26tXVO1apVKVOmDOHh4TRq1Ijw8HBq1apFsWLFrHOCg4N57rnnOHDgAPfeey/h4eE250idM2zYMOv97tmzh9GjR1uvd3JyonXr1oSHhwNkKpaMJCYmkpiYaD2OjY29/SfIgV277NHb25sFCxawYMEC69jLL79sM9/FxYXx48czfvz4DM/n7+/PypUrb3qfYWFhtxuuiIjklvBw6NQJIiMtx66uliTUM8/YNy7J07zdLR9vLyoZJSIi4rDsukzvWitXriQ6OprevXsDEBUVhaurK35+fjbzihUrRlRUlHXOtYmo1OtTr7vZnNjYWC5fvszZs2cxm80Zzrn2HLeKJSNTpkzB19fXeilduvStnwgREZG7nWFAaCg0b56WiCpZErZsUSJKcpzX1QbmqowSERFxXA6TjPr0009p164dJUqUsHco2Wb06NHExMRYL8eOHbN3SCIiIjnr8mXo0wcGDbL0igJLUmrPHmjY0L6xSb5QMHU3PfWMEhERcVgOsUzvv//+Y8OGDSxfvtw6FhgYSFJSEtHR0TYVSadOnbLuuhYYGJhu17vURtfXzrm++fWpU6fw8fHBw8MDZ2dnnJ2dM5xz7TluFUtG3NzccHNzy+SzICIicpc7ehRCQuCXX9LGhg+HN9+EAg7xkUPygdTKqEuqjBIREXFYDlEZNXfuXAICAmjfvr11rF69eri4uLBx40br2KFDh4iIiCAoKAiAoKAg9u/fb7Pr3fr16/Hx8aF69erWOdeeI3VO6jlcXV2pV6+ezZyUlBQ2btxonZOZWERERPK19euhXr20RJSnJ3z1FcyYoUSU5CpvJaNEREQcnt0/HaakpDB37lx69epFgWs+rPr6+tKvXz+GDx+Ov78/Pj4+DBkyhKCgIGvD8DZt2lC9enWefvpppk2bRlRUFK+99hqDBw+2ViQNHDiQ999/n5EjR9K3b19+/PFHlixZwqpVq6z3NXz4cHr16kX9+vVp0KABM2fOJC4uzrq7XmZiERERyZcMw1L59OqrkJJiGatYEZYvh1q17Bub5EsF3ZWMEhERcXR2T0Zt2LCBiIgI+vbtm+66d955BycnJzp16kRiYiLBwcF8+OGH1uudnZ35/vvvee655wgKCsLLy4tevXoxYcIE65zy5cuzatUqXnzxRWbNmkWpUqX45JNPCA4Ots7p2rUrZ86cYcyYMURFRVG3bl3WrFlj09T8VrFkl5TUD/Jy19LPUETyjdhY6N0bVqxIG+vQARYsgOs2/RDJLWpgLiIi4vhMhmEY9g4iv4iNjcXX15eYmBh8fHxsrktJSeHvv//G2dmZokWL4urqislkslOkcjsMwyApKYkzZ85gNpupVKkSTk4OsRJWRCT7/fknPP645U8AkwnGjYPXXoN8+H/fzd7jxVZOP1e/RFzg8Q+3U9LPg59GPZjt5xcREZGMZeU93u6VUWLh5ORE+fLliYyM5OTJk/YOR+6Ap6cnZcqUUSJKRPKu5cuhVy+4dMly7OcHX3wB1/R+FLGX1J5RcUmqjBIREXFUSkY5EFdXV8qUKUNycjJms9ne4chtcHZ2pkCBAqpqE5G8yWy2VD5NnZo2VquWZZlehQr2i0vkGt6pPaMSkjEMQ+/JIiIiDkjJKAdjMplwcXHBxcXF3qGIiIikOXsWnnzSsmtequ7dYc4c8PKyX1wi10ntGZWcYpCYnIK7i7OdIxIREZHraR2RiIiI3NzevVC/floiytkZ3nkHvvxSiShxON6uad+1XkzQUj0RERFHpGSUiIiI3Nj8+fDAA/Dff5bjgADYuBGGDbM0LRdxME5OJmvfqIsJV+wcjYiIiGREySgRERFJLykJBg2C3r0hMdEy1qiRpUqqeXO7hiZyKwXdU5NRqowSERFxREpGiYiIiK0TJ6BFCwgNTRsbOBDCwqBkSXtFJZJpPu6W3ptKRomIiDgmNTAXERGRNFu3QpcucOqU5djNzZKU6tPHvnGJZEFaZZSW6YmIiDgiVUaJiIgIGAa8+y48+GBaIqpMGfjpJyWi5K6TmoyKVTJKRETEIakySkREJL+Lj4dnnoGFC9PGWrWCRYugSBH7xSVymwpqmZ6IiIhDU2WUiIhIfvbvvxAUZJuIeuUVWLNGiSi5a/l4pFZGKRklIiLiiFQZJSIikl/98AM8+SRER1uOvb1h3jzo1MmeUYncsbTKKC3TExERcUSqjBIREclvUlLgjTegffu0RFTlyrBzpxJRkiekNTBXZZSIiIgjUmWUiIhIfhITA08/Dd99lzbWsSN8/jn4+NgvLpFspMooERERx6bKKBERkfzi99/h/vvTElEmE0yaBMuXKxGVB4WGhlK7dm18fHzw8fEhKCiIH3744Ybzly9fTv369fHz88PLy4u6deuyYMECmzm9e/fGZDLZXNq2bZvTDyXLfFJ307usyigRERFHpMooERGR/GDJEujbF+LiLMf+/pam5cHB9o1LckypUqWYOnUqlSpVwjAM5s+fT8eOHfnll1+oUaNGuvn+/v68+uqrVK1aFVdXV77//nv69OlDQEAAwde8Ttq2bcvcuXOtx25ubrnyeLLCJ7UyKlGVUSIiIo5IySgREZG8LDkZRo+Gt95KG6tb11INVb683cKSnPfII4/YHE+aNInQ0FB27NiRYTKqRYsWNsdDhw5l/vz5bNu2zSYZ5ebmRmBgYI7EnF3UM0pERMSxaZmeiIhIXnX6NLRpY5uIevpp+OknJaLyGbPZzKJFi4iLiyMoKOiW8w3DYOPGjRw6dIhmzZrZXBcWFkZAQABVqlThueee49y5czc9V2JiIrGxsTaXnJbWM0rJKBEREUekyigREZG86OefLTvjHT9uOS5QAGbOhEGDLL2iJF/Yv38/QUFBJCQk4O3tzYoVK6hevfoN58fExFCyZEkSExNxdnbmww8/5KGHHrJe37ZtW0JCQihfvjyHDx/mf//7H+3atSM8PBxnZ+cMzzllyhTGjx+f7Y/tZtIqo65gGAYmveZFREQciskwDMPeQeQXsbGx+Pr6EhMTg48axYqISE755BMYPBiSkizHgYGwbBk0bmzfuPIwR32PT0pKIiIigpiYGJYtW8Ynn3zC5s2bb5iQSklJ4d9//+XSpUts3LiRN954g5UrV6Zbwpfq33//pUKFCmzYsIFWrVplOCcxMZHExETrcWxsLKVLl87R5+piwhVqjVsHwB8T2uLhmnGiTERERLJPVj4PqTJKREQkr0hMhCFDYM6ctLHGjWHpUihe3H5xid24urpSsWJFAOrVq8euXbuYNWsWH330UYbznZycrPPr1q3LH3/8wZQpU26YjLrnnnsoUqQI//zzzw2TUW5ubrne5NzLtQBOJkgxLIkpJaNEREQci3pGiYiI5AXHjkGzZraJqCFD4McflYgSq5SUFJsqpTudf/z4cc6dO0dxB3uNOTmZ8HazfOcaq75RIiIiDkeVUSIiIne7TZuga1c4c8Zy7O4OH39saVYu+dbo0aNp164dZcqU4eLFiyxcuJCwsDDWrl0LQM+ePSlZsiRTpkwBLL2d6tevT4UKFUhMTGT16tUsWLCA0NBQAC5dusT48ePp1KkTgYGBHD58mJEjR1KxYkWb3fYcRUF3F2ITkrmYcMXeoYiIiMh1lIwSERG5WxkGvP02vPIKmM2WsXLlYPlyuPdeu4Ym9nf69Gl69uxJZGQkvr6+1K5dm7Vr11obkkdERODklFYkHxcXx6BBgzh+/DgeHh5UrVqVL774gq5duwLg7OzMb7/9xvz584mOjqZEiRK0adOGN954I9eX4WVGWhNzVUaJiIg4GjUwz0WO2txURETuQpcuQb9+sGRJ2lhwMCxcCP7+9osrn9J7fObl1nP1xOxwfj56ng+evI/2tR1rGaGIiEhelJX3ePWMEhERudv8/Tc0amSbiHr1VVi1Sokokat8PFJ7RmmZnoiIiKPRMj0REZG7yXffwVNPQWys5bhgQViwADp2tG9cIg6moLsLgHpGiYiIOCBVRomIiNwNUlJg7Fh49NG0RFT16rBrlxJRIhlQzygRERHHpcooERERR3fhgqUaavXqtLHOneGzzyyVUSKSjpJRIiIijkuVUSIiIo7s11+hfv20RJSTE0ybZukXpUSUyA2lLtNTzygRERHHo8ooERERR7VwIfTvD5cvW46LFIFFi6BVK/vGJXIX8ElNRl1WZZSIiIijUWWUiIiIo7lyBYYNgx490hJR9evDnj1KRIlkUtoyPVVGiYiIOBpVRomIiDiSqCh44gnYujVtrG9f+OADcHe3X1widxn1jBIREXFcSkaJiIg4ivBwS2Pykyctxy4u8P778MwzYDLZNzaRu0xqz6iLiaqMEhERcTRapiciImJvhgGhodC8eVoiqmRJ2LIFBgxQIkrkNvioMkpERMRhqTJKRETEni5fhkGDYN68tLHmzWHxYihWzG5hidztfDyuVkYlJGMYBiYldUVERByGKqNERETs5b//oEkT20TUiy/C+vVKRIncodSeUeYUg/gks52jERERkWspGSUiImIP69dDvXqwd6/l2NMTFi6Et9+29IoSkTvi4eKMi7OlGirmsvpGiYiIOBIlo0RERHKTYcCbb0LbtnDunGWsQgXYsQO6d7dvbCJ5iMlkwvfqUj0lo0RERByL3ZNRJ06c4KmnnqJw4cJ4eHhQq1Ytdu/ebb3eMAzGjBlD8eLF8fDwoHXr1vz999825zh//jw9evTAx8cHPz8/+vXrx6VLl2zm/PbbbzRt2hR3d3dKly7NtGnT0sWydOlSqlatiru7O7Vq1WL16tU212cmFhERkRu6eBG6dIFRoyAlxTLWvj3s3g21atk3NpE8yEfJKBEREYdk12TUhQsXaNy4MS4uLvzwww8cPHiQGTNmUKhQIeucadOm8e677zJ79mx27tyJl5cXwcHBJCQkWOf06NGDAwcOsH79er7//nu2bNnCgAEDrNfHxsbSpk0bypYty549e5g+fTrjxo3j448/ts7Zvn073bt3p1+/fvzyyy889thjPPbYY/z+++9ZikVERCRDf/4JDRrA11+njY0bB99+C35+9opKJE9TZZSIiIhjMhmGYdjrzkeNGsVPP/3E1q1bM7zeMAxKlCjBSy+9xIgRIwCIiYmhWLFizJs3j27duvHHH39QvXp1du3aRf369QFYs2YNDz/8MMePH6dEiRKEhoby6quvEhUVhaurq/W+V65cyZ9//glA165diYuL4/vvv7fef6NGjahbty6zZ8/OVCy3Ehsbi6+vLzExMfj4+Nz+EyciIneXFSugVy9LZRSAry988QV06GDfuCTb6D0+83Lzueo992fCDp1hWufaPFG/dI7el4iISH6Xlfd4u1ZGffvtt9SvX58uXboQEBDAvffey5w5c6zXHzlyhKioKFq3bm0d8/X1pWHDhoSHhwMQHh6On5+fNREF0Lp1a5ycnNi5c6d1TrNmzayJKIDg4GAOHTrEhQsXrHOuvZ/UOan3k5lYREREbJjN8L//QUhIWiKqZk3LsjwlokRynLUyKl6VUSIiIo7Ersmof//9l9DQUCpVqsTatWt57rnneOGFF5g/fz4AUVFRABS7bnvrYsWKWa+LiooiICDA5voCBQrg7+9vMyejc1x7Hzeac+31t4rleomJicTGxtpcREQknzh3Dtq1gylT0sa6dbM0Kq9Y0X5xieQjWqYnIiLimArY885TUlKoX78+kydPBuDee+/l999/Z/bs2fTq1cueoWWLKVOmMH78eHuHISIiuW3vXks11H//WY6dneGtt2DoUDCZ7BubSD7ip2SUiIiIQ7JrZVTx4sWpXr26zVi1atWIiIgAIDAwEIBTp07ZzDl16pT1usDAQE6fPm1zfXJyMufPn7eZk9E5rr2PG8259vpbxXK90aNHExMTY70cO3Ysw3kiIpKHzJ8PjRunJaICAmDjRhg2TIkokVym3fREREQck12TUY0bN+bQoUM2Y3/99Rdly5YFoHz58gQGBrJx40br9bGxsezcuZOgoCAAgoKCiI6OZs+ePdY5P/74IykpKTRs2NA6Z8uWLVy5kvZBZP369VSpUsW6c19QUJDN/aTOSb2fzMRyPTc3N3x8fGwuIiKSRyUlweDB0Ls3pO6y2rAh7NkDzZvbNTSR/ErL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ba+kFpG70IMPPpipeT/++GOWz202m1m6dClxcXEEBQVl6jbx8fFcuXIFf39/m/GwsDACAgIoVKgQDz74IBMnTrTZBfBuUaygOwAX4q+QmGzGrYC+WREREcktmU5GnTx5EhcXl5yMRUQkf/n6a8uOeZcuWY79/GDhQmjXzp5RiYidhIWFUbZsWdq3b59tn7n2799PUFAQCQkJeHt7s2LFCqpXr56p277yyiuUKFGC1q1bW8fatm1LSEgI5cuX5/Dhw/zvf/+jXbt2hIeH2/S3ulZiYiKJiWlL4WJjY+/sQWUTP08XXAs4kZScwunYREr7a6dCERGR3JLpZJQSUSIi2SQ52VL5NG1a2ljt2pb+UBUq2C8uEbGrN998k7lz57J06VJ69OhB375977gavUqVKuzbt4+YmBiWLVtGr1692Lx58y0TUlOnTmXRokWEhYXh7u5uHe/WrZv177Vq1aJ27dpUqFCBsLAwWrVqleG5pkyZwvjx4+/oceQEk8lEoI87EefjiYpNUDJKREQkFznMGpCpU6diMpkYNmyYdSwhIYHBgwdTuHBhvL296dSpE6dOnbK5XUREBO3bt8fT05OAgABefvllkpOTbeaEhYVx33334ebmRsWKFZk3b166+//ggw8oV64c7u7uNGzYMN3uMZmJRUTkls6ehbZtbRNRTz4J4eFKRInkcy+//DIHDx5k5cqVXLx4kcaNG9OgQQNmz55929VErq6uVKxYkXr16jFlyhTq1KnDrNTtUW/grbfeYurUqaxbt47atWvfdO4999xDkSJF+Oeff244Z/To0cTExFgvx44du63HkhMCfSyJtsgY9Y0SERHJTQ6RjNq1axcfffRRug88L774It999x1Lly5l8+bNnDx5kpBrtuwym820b9+epKQktm/fzvz585k3bx5jxoyxzjly5Ajt27enZcuW7Nu3j2HDhtG/f3/Wrl1rnbN48WKGDx/O2LFj2bt3L3Xq1CE4OJjTp09nOhYRkVvaswfq1YONGy3HBQrArFnwxRfgqW/kRcQiKCiIOXPmEBkZyeDBg/nss88oUaJEtixvS0lJsVkyd71p06bxxhtvsGbNGurXr3/L8x0/fpxz585RvHjxG85xc3PDx8fH5uIoivlaklGnlIwSERHJXYadXbx40ahUqZKxfv16o3nz5sbQoUMNwzCM6Ohow8XFxVi6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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score\n", + "from sklearn.datasets import fetch_openml\n", + "\n", + "class ElasticNetModel:\n", + " def __init__(self, alpha=1.0, l1_ratio=0.5, max_iter=10000, tol=1e-4):\n", + " self.alpha = alpha\n", + " self.l1_ratio = l1_ratio\n", + " self.max_iter = max_iter\n", + " self.tol = tol\n", + " self.coef_ = None\n", + " self.intercept_ = None\n", + " self.loss_history = [] \n", + "\n", + " def fit(self, X, y):\n", + " # Start by removing any rows with NaN values\n", + " X, y = self.remove_nan_values(X, y)\n", + " print(f\"Shapes after NaN removal - X: {X.shape}, y: {y.shape}\")\n", + "\n", + " # remove outliers\n", + " X, y = self.remove_outliers(X, y)\n", + " print(f\"Shapes after outlier removal - X: {X.shape}, y: {y.shape}\")\n", + "\n", + " # Normalize the features\n", + " X_mean = np.mean(X, axis=0)\n", + " X_std = np.std(X, axis=0)\n", + " X_norm = (X - X_mean) / X_std\n", + "\n", + " # Normalize the target variable\n", + " y_mean = np.mean(y)\n", + " y_norm = y - y_mean\n", + "\n", + " n_samples, n_features = X_norm.shape\n", + " self.coef_ = np.zeros(n_features)\n", + " self.intercept_ = y_mean\n", + "\n", + " # Iteratively update coefficients\n", + " for iteration in range(self.max_iter):\n", + " y_pred = X_norm.dot(self.coef_) + self.intercept_\n", + " \n", + " # Check for NaN predictions\n", + " if np.isnan(y_pred).any():\n", + " print(\"NaN values found in predictions during training!\")\n", + " break\n", + "\n", + " # Compute the gradient\n", + " gradient = -2 * X_norm.T.dot(y_norm - y_pred) / n_samples\n", + " l1_term = self.alpha * self.l1_ratio * np.sign(self.coef_)\n", + " l2_term = self.alpha * (1 - self.l1_ratio) * self.coef_\n", + "\n", + " new_coef = self.coef_ - self.tol * (gradient + l1_term + l2_term)\n", + "\n", + " # Calculate loss (Mean Squared Error)\n", + " loss = mean_squared_error(y_norm, y_pred)\n", + " self.loss_history.append(loss)\n", + "\n", + " # Check for convergence\n", + " if np.max(np.abs(new_coef - self.coef_)) < self.tol:\n", + " print(f\"Converged after {iteration} iterations.\")\n", + " break\n", + " \n", + " self.coef_ = new_coef\n", + "\n", + " return ElasticNetModelResults(self.coef_, self.intercept_, X_mean, X_std)\n", + "\n", + " def remove_outliers(self, X, y):\n", + " # Using the IQR method to filter out outliers\n", + " Q1 = np.percentile(y, 25)\n", + " Q3 = np.percentile(y, 75)\n", + " IQR = Q3 - Q1\n", + " lower_bound = Q1 - 1.5 * IQR\n", + " upper_bound = Q3 + 1.5 * IQR\n", + "\n", + " mask = (y >= lower_bound) & (y <= upper_bound)\n", + " return X[mask], y[mask]\n", + "\n", + " def remove_nan_values(self, X, y):\n", + " # Remove any rows containing NaN values\n", + " nan_mask = np.isnan(X).any(axis=1) | np.isnan(y)\n", + " print(f\"Removing rows with NaN values: {np.sum(nan_mask)} rows removed.\")\n", + " return X[~nan_mask], y[~nan_mask]\n", + "\n", + "class ElasticNetModelResults:\n", + " def __init__(self, coef_, intercept_, X_mean, X_std):\n", + " self.coef_ = coef_\n", + " self.intercept_ = intercept_\n", + " self.X_mean = X_mean\n", + " self.X_std = X_std\n", + "\n", + " def predict(self, X):\n", + " X_norm = (X - self.X_mean) / self.X_std\n", + " return X_norm.dot(self.coef_) + self.intercept_\n", + "\n", + "def load_openml_data(dataset_id):\n", + " # Load the dataset from OpenML\n", + " dataset = fetch_openml(data_id=dataset_id, as_frame=True)\n", + " X = dataset.data.select_dtypes(include=[np.number]).values # Only keep numeric columns\n", + " y = dataset.target.values\n", + " return X, y\n", + "\n", + "def evaluate_model(model_results, X, y_true):\n", + " y_pred = model_results.predict(X)\n", + "\n", + " # Clean NaN entries from both y_true and y_pred\n", + " y_true_cleaned, y_pred_cleaned = remove_nan_in_evaluation(y_true, y_pred)\n", + "\n", + " if y_pred_cleaned is None or y_true_cleaned is None:\n", + " print(\"Evaluation failed due to NaN values.\")\n", + " return None, None, None, None, None\n", + "\n", + " mse = mean_squared_error(y_true_cleaned, y_pred_cleaned)\n", + " rmse = np.sqrt(mse)\n", + " mae = mean_absolute_error(y_true_cleaned, y_pred_cleaned)\n", + " r2 = r2_score(y_true_cleaned, y_pred_cleaned)\n", + " return mae, mse, rmse, r2, y_pred_cleaned\n", + "\n", + "def remove_nan_in_evaluation(y_true, y_pred):\n", + " # Clean NaN entries for proper evaluation\n", + " valid_mask = ~np.isnan(y_true) & ~np.isnan(y_pred)\n", + " print(f\"Removing NaN values from evaluation: {len(y_true) - np.sum(valid_mask)} rows removed.\")\n", + " \n", + " y_true_cleaned = y_true[valid_mask]\n", + " y_pred_cleaned = y_pred[valid_mask]\n", + "\n", + " if len(y_true_cleaned) == 0 or len(y_pred_cleaned) == 0:\n", + " return None, None\n", + "\n", + " return y_true_cleaned, y_pred_cleaned\n", + "\n", + "def plot_results(y_true, y_pred, loss_history):\n", + " plt.figure(figsize=(12, 5))\n", + "\n", + " # True vs Predicted values\n", + " plt.subplot(1, 2, 1)\n", + "\n", + " print(f\"Lengths - True Values: {len(y_true)}, Predicted Values: {len(y_pred)}\")\n", + " \n", + " if len(y_true) != len(y_pred):\n", + " print(\"Warning: Lengths of true and predicted values differ. Adjusting to match.\")\n", + " min_length = min(len(y_true), len(y_pred))\n", + " y_true = y_true[:min_length]\n", + " y_pred = y_pred[:min_length]\n", + "\n", + " plt.scatter(y_true, y_pred, color=\"blue\", label=\"Predicted\")\n", + " plt.plot([min(y_true), max(y_true)], [min(y_true), max(y_true)], color=\"red\", lw=2, label=\"Ideal\")\n", + " plt.xlabel(\"True Values\")\n", + " plt.ylabel(\"Predicted Values\")\n", + " plt.title(\"True vs Predicted Values\")\n", + " plt.legend()\n", + "\n", + " # Loss over iterations\n", + " plt.subplot(1, 2, 2)\n", + " plt.plot(loss_history, label=\"Loss (MSE)\")\n", + " plt.xlabel(\"Iteration\")\n", + " plt.ylabel(\"Loss (MSE)\")\n", + " plt.title(\"Loss over Iterations\")\n", + " plt.legend()\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + "if __name__ == \"__main__\":\n", + " # Load a dataset (King County House Sales dataset: data_id=42165)\n", + " X, y = load_openml_data(dataset_id=42165)\n", + " \n", + " # Initialize the model\n", + " model = ElasticNetModel(alpha=0.1, l1_ratio=0.5)\n", + " \n", + " # Train the model\n", + " model_results = model.fit(X, y)\n", + " \n", + " # Evaluate the model\n", + " mae, mse, rmse, r2, y_pred = evaluate_model(model_results, X, y)\n", + " \n", + " if mae is not None:\n", + " print(f\"Mean Absolute Error (MAE): {mae:.4f}\")\n", + " print(f\"Mean Squared Error (MSE): {mse:.4f}\")\n", + " print(f\"Root Mean Squared Error (RMSE): {rmse:.4f}\")\n", + " print(f\"R-squared (R²): {r2:.4f}\")\n", + " \n", + " # Display some predictions\n", + " print(\"\\nSample Predictions:\")\n", + " for i in range(min(5, len(y_pred))):\n", + " print(f\"True Value: {y[i]:.3f}, Predicted Value: {y_pred[i]:.3f}\")\n", + " \n", + " # Visualize the results\n", + " plot_results(y, y_pred, model.loss_history)\n", + " else:\n", + " print(\"Evaluation failed due to NaN values.\")\n" + ] + } + ], + "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.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/elasticnet/tests/output.csv b/elasticnet/tests/output.csv new file mode 100644 index 0000000..d1b933c --- /dev/null +++ b/elasticnet/tests/output.csv @@ -0,0 +1,1001 @@ +x_0,x_1,x_2,y +61.57629548024328,57.42262956352919,51.954357918992855,437.47606824004623 +0.6389541503153517,55.02923925747931,96.83384323137952,453.6345346694695 +39.80596964013506,1.5837404203920213,24.37524127943822,195.13870898340014 +94.64502965362777,89.60113086608169,47.3786886796417,552.2122819175025 +11.715694941545262,7.880772165597405,98.27875382541298,415.832595765848 +6.445594702461765,48.94832501798708,40.900673508384024,246.65923088134468 +76.51031831615323,7.251445258539457,49.84804689970339,391.84159269687046 +86.25962294794826,41.19743952053114,77.68112004500055,572.7375441637982 +54.47093632764787,18.730947963123512,77.32371231265284,459.358087284504 +25.159650904702325,60.58925090420178,28.002219561369913,260.51726210574526 +99.71978486341023,31.69303981656485,31.138550673377054,415.8985720299077 +47.556020360673614,37.414348501551174,67.46321017607036,432.07779420539225 +57.27699780386274,41.655607588603516,17.196685931917376,271.8290497564594 +14.552960828573081,26.564585589291255,96.28119523522768,442.7652082020883 +48.36528177585648,45.978993132567204,64.46518214272754,435.356833311516 +37.90392957616409,64.10683833872261,98.45336294804396,565.9725880717899 +53.270902008419455,35.65367786179473,52.088909820906494,384.84467157166165 +50.52707781449857,29.19917310125547,19.05075235022995,243.12717000080127 +71.25623641895541,49.697984886100876,25.55243584369653,350.69692467132626 +76.62684198771916,91.71403929046573,58.37082896796478,551.9454641116281 +5.825757427284839,54.9434881583388,64.58856288878553,343.06054880722843 +81.20723925834481,14.960361218993102,86.47217100917113,555.1263538322853 +56.3590342748421,43.98403859493154,1.0325516833156745,211.09225228306798 +18.33754213751966,27.82441856015263,92.83803977348084,440.4247286379258 +38.48670453027273,54.13937147837519,63.42932885932765,418.6122684124888 +76.40753824578357,15.916238646959947,12.62995951180972,263.0331872131814 +67.19282790710461,16.498671891439663,94.46507406508987,552.4887895376883 +38.231844833458815,73.82423813730807,22.188314088151483,290.5251550381876 +29.02158587118314,91.82661676614936,18.06951721686105,279.7754424675108 +42.27193858264927,92.61933756864232,23.09412808499528,332.405869284034 +62.50582712147502,16.79471182235289,20.435676971181728,259.41515019498047 +23.81521960345041,91.57244716544501,10.296134402033253,236.0698061244649 +51.14161063694457,17.934877078460488,21.1883403732127,236.14188743714362 +5.240181732077009,25.106751553228435,3.5504644914942762,63.78177570851229 +13.28486272550764,33.60896609157366,66.85578315424574,338.81502890138665 +21.17228618139886,21.00800428211873,82.97929750954498,400.42419930068047 +77.2761153352822,62.98772790807402,35.85605619166149,423.3719725910865 +25.816676885791278,81.47004347329563,62.99884493369509,426.5576621081875 +11.250044239669489,4.707708191196469,4.364056061564736,52.24134399640415 +29.412458386252773,64.7727423902135,31.102195645476105,289.5096274624663 +96.07948310070826,40.66061518400529,96.6394443738537,669.3110742974362 +82.20668751511774,25.285792983195922,61.16536746345847,476.38964625419925 +17.247419401529353,70.21737712967365,9.277695254975459,184.75886518294996 +72.32404135607722,82.14566958634303,67.01507743501132,558.3736103462644 +6.546769239258198,20.535280324474325,6.050240598840928,70.09901956478086 +81.68511521950099,0.16099705274870146,42.94259812755617,368.2332296696756 +35.392257165813525,18.894269110234863,70.26255881384918,383.5723899480876 +93.55447342947886,9.382614935780275,35.679039830605,382.9421663285656 +59.05956941959868,98.14303939458017,5.147878868607981,314.4340676817623 +68.18697747810826,40.35567863407954,64.65532619900445,476.9467038928 +78.94227195314028,96.76396501615977,50.36589746876407,534.1922558695305 +63.938323188435156,66.73069051972736,86.76610132264726,590.5015159336602 +0.08554671093591315,97.58090034836242,4.109736763679606,162.7024328681543 +91.45046164507637,78.4316230796012,14.940346898169743,403.57462756790466 +90.6535931223241,32.14692998936275,10.822669319745648,316.08622812365235 +17.140385160199457,3.274817137380248,50.30624708192954,239.19435321991125 +14.906006852316423,41.709581085511026,40.87075954682123,255.90218093421316 +15.902859770059175,15.359600176721822,58.04944572077987,284.3517379864846 +4.86089114188143,57.13965272334739,74.62519716616686,381.27515544309364 +67.7648788217097,38.84772723563948,3.0416428946015595,239.96011269942437 +11.483607565548992,19.508095547093486,29.755612983718216,171.25432921110777 +8.366799971084603,20.560450462750126,40.02630063070908,204.6023713655822 +54.01994544641469,94.75404466170467,27.36288386732504,382.0099048380676 +11.395114412589058,52.76501884814419,66.69486950768092,361.618445558868 +45.91929468143646,51.952058764580734,90.94305219570911,538.6892932867609 +39.2830195941146,84.20398171788365,24.54243345927608,318.39408425478155 +76.50179115004721,34.94131433810923,56.862666355985326,459.5043923924541 +68.39038072296017,46.080605752776385,3.2676221360315783,253.03787672561376 +83.02098173609204,2.604424392795046,57.68990565109201,429.9367615260054 +32.32110589236407,44.9522197299771,61.37523922226384,381.52374218410955 +27.665223971773855,16.82726923588673,25.009304491632424,189.52383763777758 +56.42635291146105,4.4158625971582595,53.34002864547256,350.40944311687423 +17.056326864307923,9.892743496516266,16.445864822530076,120.63493874466326 +95.89968529096299,70.94980365377648,8.90241992886277,380.72153347940014 +60.66088238866496,99.2211279728472,77.33603993316105,594.8145188330093 +69.96466456876834,45.10860823760774,77.53683223761207,537.7814969486664 +8.017590331452162,9.228425884824777,62.11606888381483,270.8339499654083 +51.36613321725254,28.21867098046521,41.12195020606273,327.4585031585724 +86.31483267482668,50.414640073433404,73.20145886526491,570.243713595713 +10.866394200952879,24.150951392659124,83.43185838480464,380.8692850154596 +58.1441348286011,4.928606921652157,57.93978428251645,373.9062720662206 +88.13819708759337,14.925708813069871,50.11300819857033,434.0134750267657 +22.581335465773954,35.31812053861829,43.880823305475744,277.1881443997184 +5.762119766462359,68.87137070135081,91.16579445151974,464.03048497181004 +96.21490390910479,96.66836865700166,49.26574351390659,572.918820226979 +77.43041743796871,84.42733361414247,66.53619937576448,573.3479926916812 +7.635780795499159,19.52070171579916,21.352373097704447,130.5699566864206 +61.519479080302276,73.08649103595519,43.69495556752989,430.7886010912475 +75.52282709569924,92.56393695430492,59.410104449527665,553.9986518153003 +80.91301906468416,41.75469444507519,92.05133575291624,615.5290639844507 +56.69530899220282,20.64473363242476,98.93215426272096,550.272295539655 +45.56155859806969,6.16676898446592,58.247352677375886,344.41110148012893 +8.85350567319806,96.53824473438624,67.78562178323834,425.98978779264223 +63.01738184003073,77.54408298173536,96.61445571934146,642.1631237304169 +81.11088014729351,90.32718730988368,63.64333767372577,580.0190592606361 +29.623330137305416,74.03432546070803,14.291145462647204,240.59180803900705 +98.69860903509523,26.37508801492142,34.396303620612166,417.6035092836526 +46.686751893137156,45.14022689532443,92.89292242622975,538.8625873927529 +37.28137561363586,60.60455118576225,39.04261708703095,332.46308367294637 +98.64608099619738,82.12407530686444,33.95592288432647,499.4207330815191 +85.24362240309942,39.94374018669934,69.13112129260155,536.6280370193903 +70.80025675399413,78.11360645448015,98.82687948777925,669.7643279019693 +1.440914320423392,2.465934333098063,62.936630645650936,247.28636298629868 +98.94563557658097,59.54082745428617,52.850764975264234,538.1386305357485 +51.043188859580766,9.16477018983125,84.74359905422544,464.5802964478041 +53.42931099425158,51.834972730712096,43.55510417082079,376.7004985486015 +41.87070611530014,11.27760327231785,24.202471783990042,214.0491466369104 +40.38226166020253,17.500400019311524,8.595251213238054,161.37482252220116 +35.07897691207005,66.76420424537369,38.787147044234075,335.85389534184327 +61.57040373009002,58.10103071718429,80.82444322390747,548.1795219044957 +45.25549447297378,2.486246514100976,74.70946451253026,402.0537066037973 +31.77918495664941,21.90265665723753,25.18469639608245,208.8978755708121 +86.11522094153199,11.667781763455531,81.35183188994938,541.4836848926307 +6.085443334299468,28.422780704449245,93.4495292828715,412.7851422237448 +98.75868974828347,67.62859633259689,55.029253410709785,557.9258523727266 +45.4220277137243,30.026718663044647,51.05591850883039,353.49575442973844 +20.074003596924094,39.20642123053225,6.910351548753447,135.0941737018977 +21.03893552372381,81.84015073944448,74.57840391719282,459.3833960820836 +41.69481093882275,99.58648223873612,15.652580837648944,313.75074849418814 +90.11204429400348,20.442490134888303,64.23484161370781,500.7670018815041 +63.783630265993985,14.5921651659081,76.85787123539546,473.72821021707847 +14.933565542222894,52.87214919454976,75.3316816522166,404.0766052069944 +78.96245434018539,55.44793249777368,98.39042045895788,654.6721848298944 +68.13309508928079,24.80180255505409,79.2436153523046,508.4477093703103 +74.22528431003114,67.62139051064288,26.610393173425962,389.29202318971716 +30.59957749086729,63.158894037897426,81.72264910464929,482.7742632294035 +74.5925747016872,42.285989088983754,86.83816529296327,580.5272442105158 +62.515363339484345,10.41376069305564,65.50356926580679,421.5188897184039 +41.498314155832915,95.71596621707862,45.85958209797247,422.8779776312066 +29.581534367814143,61.72509718384681,26.97179446184442,270.0708019015827 +36.48936071626924,10.78712383344712,46.44385567641082,284.28541297688326 +29.766794132953265,73.08894998935061,28.934754380577886,295.5313672994228 +52.40579559380395,23.43941079130809,69.54076100052744,430.9123644343909 +15.700094802947696,60.38953432446152,72.72604528677222,407.29342325127897 +89.53952713619533,99.55469732291718,72.04126885470478,647.4256479078015 +84.9593425750609,40.62926815018433,52.711785306609215,474.37706139831306 +38.59347458586152,95.00133688007821,92.18943966234967,590.3044590287327 +57.55265677198971,26.424854304054712,51.463818307427765,379.1071381167945 +79.44262121064963,9.149940582974159,80.4160979174861,518.0231454163787 +79.11115826734294,84.51345415777244,85.85071287730727,651.0706175610973 +58.25635777475625,27.730615528046066,94.16254915509639,545.1984553558302 +59.50139769083429,43.79236354568189,96.85374492137171,584.000611213174 +10.603929268969214,29.019800025739784,80.21492951364915,375.62769153766914 +5.877803821654437,20.894686828454923,83.76166318121507,364.8448634015578 +66.49931164247324,6.46095956575512,88.9073473820341,513.9903104107372 +61.373942541965974,80.04148776181853,7.31452306096484,301.78460132884027 +54.41984511976834,44.98109749356822,58.91359017054732,427.8926862140628 +88.590429038708,83.90872217804292,48.146681079486406,530.8667106325881 +47.1838842355807,82.47947308438887,54.00025861050857,447.83764853788375 +8.672979929598268,25.968586979549357,32.43442197898081,184.05106217053117 +64.22945499036271,36.54024906150468,79.5122333536902,517.848187766823 +21.900875941363683,15.432157761341614,94.4496750941518,437.3033927483062 +70.96766484270537,71.84370051091753,51.6363712667554,482.2301388527687 +39.37526106095225,23.22177339107958,1.6908873819704517,140.72963531302955 +19.594730721125288,61.332132464665825,81.05748870437111,449.264718929267 +59.85422754549593,4.840450321735412,92.25401016438711,507.829932227612 +27.190291590738557,98.06114891819934,60.279147584998185,444.9108541858658 +96.16612088767475,31.5598543309598,78.41140931345329,586.6522900262464 +38.451881233021915,19.099540733334596,28.222395278967483,232.39802322453917 +95.7595266870109,58.41307696327019,4.826444554897313,346.1836309372894 +40.12408853403103,69.82250379546582,71.22896900869446,475.9358733687581 +67.92174998561103,53.36634025244834,59.24797332943429,475.36349520977336 +22.110059628780764,80.09045168557593,14.009556863361727,229.03690863045827 +41.07751711850361,59.10767111873094,4.86341877310813,210.51945833986824 +72.39944711653463,54.59673174630411,23.437885122719205,352.77644639996663 +42.85503586545343,86.1106258080735,56.24106879363101,451.0206376502072 +38.85720353579592,49.961930821987444,9.494331311456971,208.62325685532463 +82.579213404937,15.09366556596714,86.30264016087438,557.6177969683214 +19.464126018015413,86.08848982163268,18.47570551557989,248.95299450640948 +89.38978725967598,95.49174447754353,20.324440402268184,444.0334252055892 +14.66853182354736,38.24226230657588,75.62943599374704,382.14679207197196 +90.25971558165877,8.035640328976934,85.90809967440246,564.3609360507081 +30.586937825417195,0.09305565925823434,80.73585411852501,383.5101368930646 +71.12568575359417,35.7945310043719,10.929311077946513,273.71628559210177 +4.7631267671072735,87.91864662489766,5.205205898694587,164.47146526979822 +73.95247664448469,90.73228122903944,79.67609249228221,624.0143082283449 +25.326413410532922,73.18174299045903,15.299044978247045,232.48984679369602 +31.08954135699885,22.03502141098368,92.46190803942962,462.65544395655814 +37.213275329826864,30.371755030174153,27.57507288352509,243.57792405269527 +34.93243313583617,31.934053261240148,32.81172028161007,260.017774055877 +84.0791394232329,51.24545794436508,89.88767291792739,629.1426680131754 +11.297150955522506,93.70930890087403,7.803849218011538,198.35421199434998 +24.925301862077365,31.42352942124752,13.463109468601731,161.68151618553813 +59.03905865832995,45.53749813373676,30.773415887920276,334.30685500749337 +61.29101992289377,17.043727210093095,76.16667631227499,468.5381896694149 +54.67883514136428,69.16448379833282,68.33882894595712,500.0103189435722 +21.077276702469515,32.76337066410421,39.1845526471114,250.7559313885022 +51.21795080913352,23.422806178469735,68.87767744289164,424.77166612584136 +12.585402639166777,9.102321918840817,27.270251717074355,150.2282643573871 +37.447404209938526,6.244708067809257,64.66480581594531,349.1631620865001 +88.09707137151189,78.95584442347727,4.010897739249996,354.2410255955857 +2.7438544196192516,23.337463678838954,24.51251867383235,136.1986911601413 +47.96655094307455,5.3111902448987,37.44465296426623,270.70965526313 +22.564539018552587,40.646223452797734,23.74500091484222,207.77499188739392 +44.209335550713256,71.76600087054733,44.44796551085837,387.56454807723503 +4.57466372971902,12.94137629172134,8.936049285614601,65.78537736751656 +20.89796857613865,11.751449551273751,8.36151740145591,101.56516412220657 +44.50989727435608,21.969110225172706,44.61652742519527,313.81644700928166 +58.18754240381849,50.78683492772107,27.08863691247053,325.0174295816575 +13.973357735206681,60.856947576461316,50.276187113135705,317.984288734419 +39.281483732796204,70.4284149585444,23.68310653069704,294.5570152469076 +14.964530672253339,33.86530769749505,58.97020973649444,313.43474373686337 +5.220419933031428,3.9581318785992026,28.611162454282514,128.26142944080945 +37.114889207275084,50.84866269375413,0.2608826148403187,170.18804517978384 +73.95228169274179,45.885614681811774,63.28642789701166,494.864476952743 +36.77748467037665,0.945743646364472,30.43910349704526,208.40137295892313 +65.37446350009051,65.58936204014695,55.847648959467975,474.268008742823 +59.59061839986441,87.11443641395226,97.73818054537617,651.2689697917527 +70.28447456225621,91.55238119968779,11.967818946859488,358.49562978222997 +72.57234508378015,79.32355404358759,25.5472568048577,398.14207075821986 +36.420518749669874,8.85977016288033,61.07308121914461,336.3310515919005 +48.5564122805564,84.4232771941394,73.45246376563198,527.7346130258483 +15.621634121642069,70.25849036782034,45.485732224937216,319.19387130562916 +6.985945593648191,0.30517490506989375,19.3962319159929,92.4857785760625 +86.8043132979439,96.95614907509837,6.543118388075753,387.08540642677747 +74.23149574349945,69.85259245276478,76.84971623665969,583.8088216246284 +80.84284025518139,74.34881620390433,12.907614169002002,363.4558601647145 +63.727553431075194,94.07012990239352,65.93884619991175,551.8217984442539 +57.25262860788332,20.886884677326723,97.16971183128777,544.5151537243269 +43.59100906950585,63.13959903185251,73.58735389878817,483.6958396913049 +31.14402270181076,77.40165549238704,56.293628351982605,408.875962864354 +92.57545373553292,20.33105768183976,12.771337119619396,311.7437621111084 +98.40679037520927,13.198830639689552,30.877284012856,382.8173107461356 +89.89577584534324,8.808073549457951,73.83950350983582,519.4830597308265 +82.72213848515617,99.25704896451887,83.62978361040129,674.0691462247989 +35.66883928094453,28.380208896749615,7.651355416644456,160.78370361167214 +59.22054295840963,56.31073903978508,83.58962063798504,551.2103776078236 +28.98747567261558,18.54966619773235,2.6563809150185747,110.54895234214831 +33.62630382452632,16.790730406995003,41.99287830695984,269.41314129853083 +30.6022678814163,61.362545440443014,72.51543107221673,444.8373995003407 +44.94320437631419,68.063173354617,90.14791002086665,557.7353931787401 +13.286986571628889,51.1284880020365,53.11469097425564,311.9557722131636 +12.517182183807407,33.512596014017014,16.485497958457106,144.727167845526 +27.421478636216857,14.871443972494037,55.81935905934512,303.60603517500897 +89.18700593262552,55.78655867012704,85.31489666031281,630.8923038014981 +71.59637465807035,59.17180538590062,58.6491195487564,490.7536354037875 +63.32686777730817,73.79467136088816,27.11345034544469,372.79395256801894 +88.2745532987105,32.562062032169145,85.44871290133214,594.3555286591346 +94.8679901278386,45.99847741747548,67.13709549234606,561.5088032791309 +19.06133422609715,64.71745785759288,11.505510017558063,188.35091936035826 +87.30038023214279,52.331625257232,87.82232049941597,630.9307564651424 +0.027960436165619384,76.06674872361404,44.783649314117525,284.16221721358545 +15.266319979175213,57.11479284783205,29.206788621832004,235.87563043999538 +31.898751401280034,9.403710989161118,58.37615641575289,317.0994151911138 +50.2295055546314,44.518646504773315,86.11285624028416,520.4687285016574 +27.82166438459226,31.3365199337282,21.672714747730183,198.683415001814 +39.76450484477726,79.10131596141808,28.60805191120851,327.6048093625042 +48.635913298916236,59.53423793983023,49.390220366177694,398.23427930458973 +40.13572871478054,78.22938834358,36.81859295949225,358.56596175589465 +33.17562573818195,94.80014582582317,89.18033923262321,564.6150649822121 +80.4536450699601,8.278304014586801,47.96318232246808,396.6437573829047 +40.82782041936205,90.13057603757309,25.169708260102276,334.31684166378994 +41.455676854402604,74.83488376332303,27.673512445189218,321.72882546691494 +12.579091102612006,60.673030721782126,4.0031079102334495,137.86588013414868 +1.2413296230335602,41.239526640166076,15.35194050196582,124.10681694827562 +60.17031797148024,0.941591053915769,51.126443091607875,346.84519516672594 +80.98312459062018,15.278077536455347,66.9950435012416,479.8836499858365 +92.75580363438154,4.263369683127349,0.7647966729408151,241.24337213950238 +92.1890787695519,40.54748074076867,45.11128033333457,463.68244064163 +89.01450737061253,94.82293580279632,36.064066278449424,502.13478136977756 +55.65952798446858,62.5319853372561,16.086994074181472,294.16993334472437 +99.4653227357194,34.01055244160195,58.93055970311592,524.7330455239945 +11.366258640650972,45.58139408084288,64.62408626942508,342.8786194486785 +24.071612251888663,34.661299659472455,27.12755142861233,215.83227221560009 +47.5120356671474,59.90338465708594,99.66877494202703,587.3123575976688 +46.590261206145954,15.70305308568657,16.031258262856994,201.64064659928948 +24.71140344840298,46.03873303677022,38.354771614384845,277.3017639582881 +31.323542719726284,93.48246059620459,0.5277036164733295,221.47625889677838 +9.994064308733952,87.1404883582813,70.55877249347243,424.9129648761901 +26.543387202932355,96.05223673609595,5.651881716528429,233.01660981337443 +69.93677131805129,23.33119402162126,66.50968952299424,462.87423626085587 +94.67934281815123,17.399931924558487,33.9961920413007,392.47077690441523 +47.15029470008118,76.11127028993299,66.0163447400837,484.6372648664305 +12.165630176772668,75.67623780875402,12.436522123661186,191.15776297783842 +91.33817151733162,62.725812972293724,84.723312180211,644.5954761136602 +28.29607460674214,55.32401536587038,50.35794852814783,345.20910885469533 +49.77667088436293,58.89261800568881,60.815450139897955,444.4500498572962 +40.76992902482998,41.530149394802464,51.92174200316531,361.79997069549796 +59.30844365051472,15.397187286065206,85.248022063466,495.7072219622272 +32.07578714341833,54.576745792480764,83.12361144999538,478.2856393969025 +16.14939415800627,45.80124757984664,15.331889191984882,168.42243807590864 +38.04618300711071,55.521801884037004,3.3421395397923104,191.30947774679512 +51.542649551313936,48.674552906747195,37.24293189707873,344.6607300953361 +37.52935118136252,86.98044337461045,75.36559153168886,511.0838591497686 +72.43284363059595,18.237678160047498,74.6101869107397,492.43551468225763 +58.891640221964515,86.79477658642834,55.54592872726736,489.00995598425396 +91.97624951113671,9.943914490612006,23.39118162308954,333.6662295808463 +90.53138641313313,77.58128980182838,38.10703955498279,487.8276426057777 +5.587217887435703,15.86717824024657,31.248663357945293,156.85923232071488 +68.17922639595693,96.03179433883443,21.737693067811314,397.2030010651934 +55.85467062198185,46.54539361239348,99.01852990912717,586.00029478511 +50.9829911968253,91.78694316672264,16.19242698827469,327.94624686951767 +37.34444636675516,8.49911719893397,34.66023461298672,237.511091855884 +78.77446451045644,5.865205969510267,96.74142683721617,573.9859617798394 +76.00665822058826,41.825888443028994,26.489969860658913,353.9671735226225 +54.58313544751079,11.97823042778211,54.73527324294635,363.11582288488285 +3.0282180329712527,65.96762078352195,6.920788570911496,132.86131762681956 +90.12538275460307,50.19853626829543,3.6496534489929067,314.7262545423402 +33.89058230666355,98.7692155144302,99.49618256249155,611.372443229212 +60.33636025465719,23.53057396758992,7.9652012873345885,217.43412258841286 +75.70856773614165,84.8238447406061,49.00962605368681,503.6827261004593 +48.21571222560033,47.323109299556485,45.531889641603584,364.4695349364321 +88.77987513904817,86.24674352235424,86.70268284719756,681.3009841206849 +56.180077279408614,11.448959458564655,85.17058605246532,482.0574681156002 +57.48853884039767,47.17943756832026,29.19915677245706,325.85723173438106 +7.6165045044206625,58.035218806956756,53.200918417473275,308.8018157005731 +20.296722269861245,71.77696758947586,20.02280608685181,233.86076610050463 +81.77744353862036,12.929815014979273,7.0660117554687485,252.08078662761284 +3.7217936350579572,2.5343406313842354,9.66570921863491,49.66272192130536 +66.22034280903696,92.64619503970172,13.888471278598946,357.9006514896121 +3.160076791065558,6.145258057513924,77.03856100632795,310.64117059085294 +12.039908510605724,49.130274020305485,88.5766322208974,440.3538322062226 +38.02862319962894,32.624332431023404,39.940811823690325,295.9531499111726 +0.6395597965172528,27.771309537240995,90.29774107397496,386.7159059923095 +76.25466597373794,82.90934318585886,38.22364119529741,460.3541550275963 +57.49782877523367,58.95864408794803,82.41704413193509,546.0912789632204 +56.22910441883532,67.63787796527461,58.94206008255901,467.29091616872086 +27.51761361296151,10.824103348665515,1.0873891963018023,89.6048932351032 +0.8357086729913421,90.89532975351243,42.850561102026234,301.98077523233275 +39.71971815148429,46.949542576176306,49.60410894884677,359.6749384745855 +33.35771236298175,66.53011159182948,57.49581668942921,402.0031785756974 +19.78853985603417,89.78286843718921,47.24292019636533,364.20025915582977 +71.68692391146338,33.02611141743979,31.926376323899564,350.58056436884164 +55.00315532196266,36.915083004760405,8.001723876111111,223.27682017050662 +26.317757477546742,79.3509920688063,57.42460154867545,404.01559394431587 +4.15583060143706,72.34547271829622,5.54224776446941,140.63116233628105 +64.17122848208292,22.369896748517736,94.94301067034301,554.8002191443156 +67.94423790430312,73.89856659777479,0.26478471645668966,281.9537313302363 +98.37646632572837,91.93954720058866,80.53534573765067,690.9768774669348 +37.68353155984686,24.34958845316697,68.5977044703143,393.02162159157183 +52.55230517990874,14.493839855496116,23.74489503339381,244.04337508798258 +51.9570682619663,54.93152712084299,12.840625096607772,261.7278354464567 +18.811796765784017,47.610009664636955,75.45716154531684,406.3784149365586 +12.999702434692207,68.2851913250015,61.212510236626514,368.2956921968945 +78.53079876585466,34.116787701349615,70.6624740403448,516.28104021267 +57.11752214861573,11.243740909517452,59.44179268821641,385.830519824967 +64.48615819344934,40.69301237125873,16.36974966491457,285.1210414235421 +87.50766500721977,88.51507609915701,98.77574911100821,727.353941649632 +34.36741372459595,93.80552467290441,97.6422395602586,597.3710455539706 +19.571219867432276,61.03877506606034,27.80769778333707,246.9798773295942 +59.64993099532862,35.24091567982227,73.96871850680942,483.28040676570197 +19.545438619337062,82.6946716976864,7.040189218935633,200.18892791709948 +8.440700817179202,16.843335080592137,87.89083137072531,380.6700661122279 +1.6031705972415544,7.559484303511999,94.09709787734258,373.7414069583627 +82.45774318561922,11.050776323895162,58.79322576399585,447.4157447751916 +59.13651595881444,42.90361920220235,30.810399156042735,329.7318007088768 +6.423810481174053,93.62903233697085,22.287601081609164,241.53264038582572 +36.82974572988581,50.861070015491464,76.27162460909398,458.6992071158205 +49.78629044921815,58.67038362614097,3.6427473601604365,227.18284160877232 +63.04360754213319,47.83657949739716,7.0389539097876375,255.9347978718559 +54.50882368633055,57.31313825757886,7.708269627905262,251.79958207492527 +4.518531815594084,84.01990557300766,66.09541423386332,389.4530773364601 +58.2129211451329,79.41009145306028,34.144037725880004,395.17882236487173 +31.131497540928276,23.266514804161375,50.82541213666219,305.65581097887633 +24.395429295527105,80.87688100327705,7.469298944961111,211.27541426921337 +27.392018301032152,75.68477011624184,30.000242212543704,296.7115687517634 +61.77196627772005,60.98741994368575,88.05725141324893,581.7006652064246 +54.73988858592338,13.078949136493312,97.22163024007651,525.7349421374092 +21.00224734393742,8.930031041727526,32.20332612793313,189.0885187553767 +29.157069140295366,29.177782766000583,17.267371804750063,183.48180803743446 +18.381723723532495,91.51910091413382,90.81711013385875,529.4583813527526 +16.83609944275657,86.13502787869467,60.724655848193244,401.8046989877967 +15.420585521875662,91.1371676349693,70.65507767333646,444.1677946958223 +43.51747352587778,67.7211714776331,77.88681992382747,506.3118273224191 +41.43380743347619,48.636730156745266,36.23559997023597,314.4024682238836 +91.99853996309929,15.636735845723083,1.911665167697929,260.4439954028799 +60.10662434896307,47.19100479724872,38.42439871694566,368.33780312112174 +50.19604987957577,4.036642467312889,62.429811798991395,369.16819961726526 +85.08686162014953,25.222377083428093,35.680626408019066,387.08631337705066 +41.31868883110516,56.49655196099697,17.85761520170285,257.574281917077 +94.87854216817337,64.47147315541262,80.98414790394976,642.9308607247738 +23.865422906284806,54.785422198184996,76.91590470501906,435.5158302362375 +23.838347393299475,4.029581880433531,13.489418810649923,116.55636115270643 +15.839798458931387,97.30513491798281,8.903522015497256,219.8260917127788 +14.362624315205796,4.376776242382451,10.291188160194785,83.35486295932306 +21.808968290857187,73.8297210792463,22.175596040586765,250.11932171319387 +45.86705256760419,46.886128935175556,95.5976046190137,549.2825354972277 +57.503914019158174,1.8021645374394324,41.57951232693339,304.34008142668006 +88.32725323883885,5.86451199356679,54.83130006920691,438.72307522972756 +84.01367808559037,82.88834123645915,51.47716458126489,530.4503078931418 +78.1887239932415,78.49980695181495,10.114480933480063,351.8382698116898 +16.557886419848412,55.861446225925434,96.53983849432683,491.94714124850657 +22.864719279869473,9.453617589682672,20.180375122912476,148.08175807026942 +64.16213437969562,11.98544088627852,42.82620319663222,341.78141669184726 +98.48118831206725,46.57450657571247,54.941378519380144,525.8397828484005 +0.5174437686903954,78.87467467535521,44.112627173801464,288.0718808373659 +65.2254787439329,92.01978303787108,93.84248051546204,658.4756447930099 +9.318059409136115,99.76351127242779,63.75205365131057,415.4791866543648 +83.84105337915372,34.12074863275735,43.832939162396244,426.8930856854389 +80.84599254024963,41.31010592941745,22.068331447207466,348.9081999006826 +50.72046169458404,28.202490125328584,22.250156070596205,253.83409810781228 +24.655195457453182,17.671305091598878,9.756541890163529,125.7527475123346 +3.4675273271418283,95.54039652151893,3.786454091479463,166.56142164979647 +52.85987389334817,26.767055181555698,10.29338288383025,211.09426094645025 +57.927262583237585,44.20833883999647,78.9765062257451,511.15607284996145 +94.89830454726881,1.2191117352123748,20.75795331441067,318.3801331057654 +76.08796587131806,5.987710324115492,61.82535902202818,434.30611234774835 +74.74886943842975,80.43699938701657,42.20187169381242,467.4505433118363 +29.723207524668492,71.33720979215767,57.580148566988456,400.1905932717288 +5.009419793222591,58.42230138182229,3.57288542016444,114.0353631735533 +62.204349899102006,94.39582878537401,50.186672126654585,488.4469489242942 +6.280466026219056,4.5257364141474525,3.0483979705505426,33.99667981489443 +31.67223693937029,1.0832787840467373,59.405919551355815,306.8352559669178 +7.356435244356918,7.213666757192849,94.41365594706139,388.2099842870278 +84.77574611528311,54.26589842063313,95.423600531576,656.5751606004776 +54.514571542933446,66.99951717768664,44.74841555469982,407.2994147456868 +7.8016835597985885,5.441740425304631,74.07171272991776,308.83969285446574 +93.52472394040548,55.350662632764745,99.36549816673991,695.1717556887787 +72.58765665117379,58.964005736752725,64.16637006115234,513.8017611798049 +73.13702166225708,56.343750433326676,63.23088398177003,508.39384527303343 +95.82599620833787,4.718150966403911,12.83975601703461,295.9380548412108 +77.66842163418244,94.0097201796852,71.76933571796636,608.9131331089487 +85.24555701641833,49.64639209282722,51.0219561243258,482.40094591626575 +69.26412573315126,46.197997607865396,41.93168895102756,403.04044788622656 +99.27187894058062,70.57341636419214,99.06719775014665,731.2528189139642 +26.749094439760835,99.35280787916632,87.76006110917749,549.9174515624768 +36.41633450773393,85.10635705643045,96.59023435453253,586.2389898814166 +72.92900430053027,62.672731460535424,50.89255298712827,470.75939009504015 +15.828447625129217,6.196085469189272,79.59597255877803,351.5642119135765 +64.120017832042,59.572809692075154,98.7549308938994,625.6034827539585 +90.90637030711888,64.95071120818517,22.956546900259468,412.6941707524605 +8.26829396197427,89.13646998486614,14.723034154907467,211.2688999673529 +93.17463030393485,77.12743836439772,93.39290311035178,703.3852527015707 +65.31296081864174,25.637236519190697,30.293415798929136,316.98586880339485 +71.13032236954948,10.643326974228618,45.80080895794475,368.0839101042538 +89.96118759657598,94.60134337847215,90.66517959069068,711.8191858440924 +78.22783045729075,51.0532109696068,25.019878545433027,367.1228789177854 +8.105028723431806,5.0339257210258666,6.008741834669163,51.07766666386308 +47.03928721416711,55.239721299693834,36.87159111144932,340.9938267958988 +12.504404926605538,9.810381215765885,31.161581067807543,164.35635638978263 +73.03314777032767,93.92680611590158,75.55891681126545,610.3287642690183 +5.241821485474373,73.44226017896507,95.51601813291556,487.3214717564231 +19.913780027217065,34.09042988058384,28.30533698409066,210.01579098096113 +56.65490029081144,94.16959418562247,74.90865672452401,568.4497032351719 +19.576648530331543,34.055735749000085,34.0378163659753,229.5592878854361 +34.12490328758966,74.59946995894225,46.19864896401565,373.1803007817409 +22.070867046967468,44.28700571224881,92.16303502818852,473.0780211451514 +50.33021344464777,12.31256643810843,8.724052145957195,178.00013155047932 +16.077926487268424,91.28966506338178,36.15923668687956,314.75175552842796 +57.83392357230829,64.58238840250146,42.15554487366524,401.83272737509475 +60.0578337039701,56.096394227003344,75.52436002058252,521.3746888145624 +89.0263406960818,68.78697254196425,19.461054659245335,400.4116830344226 +92.53171091582688,73.76838237198558,32.08936303721175,463.98007617552275 +50.13428823380909,29.441730112473774,35.34853980066862,304.36874114922745 +84.1229821728315,72.24279263063136,51.33810998477214,514.4465797012314 +50.12565712028499,11.728324989400496,81.27620463072502,451.986326041856 +29.522749904666203,62.465237182449314,81.66744770366476,478.2581534471069 +56.81600747830527,66.48947792045139,56.041724882953936,455.20339951781403 +76.18073258352415,68.79987697302495,86.06074616846755,621.3691144708577 +66.77797456553182,88.44201850292401,98.2664876190901,672.9129211599328 +74.96668126363625,37.29911512615579,59.491800177799995,470.6413520564794 +37.39824650822566,75.97858098524499,17.590484649529646,274.1376696942164 +75.35791573058434,88.29167456626226,52.223795466541766,519.9729777575675 +28.9575822494744,98.81224203728465,86.98209434881261,551.6280719060821 +72.67291654383776,79.16948806634907,82.5960484593728,614.347681895328 +51.94526065455577,48.34184297926291,16.316702996969724,264.5237020371679 +37.12379021123644,16.126032347176288,73.98027454872945,398.0697798528 +46.82826691311579,81.55584135913548,8.993816331475578,273.8690546335618 +1.702717566986367,16.559233283067552,15.210848307277669,87.11785916950865 +84.39527096281242,26.515086431571,96.48436838415161,617.762268935608 +76.39780106854855,3.5949648192482586,94.79660775537533,557.3435559435178 +10.955571508474959,7.802545100067371,84.81059679956206,361.8560278236591 +5.24399600821146,12.36916787278064,63.950285790916574,276.05409238225883 +63.263904912048034,42.52777047101867,62.14055393696503,458.4451382086111 +80.07052325876339,14.483139058005158,78.92259583766327,521.9742896019347 +74.94155448482917,76.90604433189104,10.48579752477018,342.5229955018677 +40.53819697959155,4.866591919468388,88.59778325194715,445.87066581923665 +54.22868770162486,20.675778879030172,94.35227787241917,524.9383333159925 +39.40117271596123,33.36033029049409,2.799072048964757,159.35080257607015 +6.777197430620441,51.519876079631544,46.13658157766481,269.6539974291052 +27.600354673843153,91.11196309087934,43.91408309165693,372.34645430019106 +0.007100063300469195,72.26358688365069,62.715885156949305,347.24220937262135 +64.76333732631421,59.4679745198153,52.25738918730626,449.63319559255194 +69.31787233999512,84.68956336129388,24.27036170205423,393.222800988076 +68.3128963319055,75.82531559620048,79.63289363190478,588.1248327326101 +17.510984707292167,17.180626805123676,89.36005766375199,409.6969413055471 +50.348919045498576,77.74375241975976,6.23094948042352,266.59106952834003 +17.149597221631364,86.4831678639169,4.120522977420649,188.99373732919486 +79.10443108956437,68.25461008204947,13.222742844347756,351.1504655930177 +47.03061486215789,19.923727523570477,42.30749658851545,309.24281122979016 +72.50187118205021,90.11569661246556,99.71264498969872,695.835254420664 +40.67434449243549,26.01394596070712,26.377529036153604,241.9030155397771 +99.02269091628281,99.10513410250162,19.506098450101284,470.72585364069323 +58.318051317923135,73.18252402793189,0.10452350006641131,256.8921659433223 +96.97170835081403,6.750661715367368,49.47762236172048,440.58213364289 +99.36513793183079,8.417703479090122,99.32171178130596,639.9004968673712 +86.61554510138068,24.40924779315744,98.45664479547005,627.8600449060309 +49.4178744699956,72.08351471312918,0.4359165293228884,234.66828730785588 +35.290611714204864,7.652857717640693,12.569405108738628,147.9506098459209 +57.11440147209507,64.1006444315589,6.959428569295367,266.2995426831954 +15.071413245438237,7.506776391805192,20.355386742746806,126.94037746566349 +11.685072751172532,34.69762066013088,76.634003096139,373.19907489972456 +26.229771197382192,36.2120249266238,23.035307966995312,207.37080997885963 +22.02445103529751,89.68803477532964,2.319518350506955,198.9545129569359 +31.953360979332658,17.832356277536153,82.05088707089637,418.420691293504 +68.0359129872101,79.28046145979106,62.909698002356976,528.5377042033966 +53.71084940793105,66.46400021186747,56.20966953047599,448.64830607432293 +42.26421572296963,40.78800555966636,70.57247712607764,434.65989100783236 +50.134963541576084,39.39579294684964,19.158018135286483,257.30649446082595 +73.88055047868616,13.087418574563426,66.8583355704343,458.47646641505776 +1.6782853954778854,65.61842538066178,0.3569699259323489,104.57945437596433 +29.983445237673166,28.812770071225756,55.021521609451554,327.72339399533513 +18.840453639279286,99.85236673691739,90.16017274323318,540.0606779693485 +62.958769870011146,82.95516828566069,4.3307676897632374,298.76392902513055 +18.332999224184476,29.182756771160467,6.162366260025398,113.74950716971875 +32.48327269057894,6.753279492530096,81.28180315931925,400.26587544248787 +58.84295899974653,68.35638753780577,12.146467147156038,296.6002045499072 +27.33920480300156,74.59240146197659,62.93311877229287,420.49740461104216 +53.53707023159927,91.40157311105258,37.89279692152648,415.89169116149134 +33.601997036502105,37.04982785537998,99.08354583604331,516.3057542723781 +63.95164122615347,99.35388683162043,77.00307762924,601.8046544411977 +77.21208372873382,51.78054544748575,67.4955004411462,527.451549386584 +36.27448251063788,99.49701383520126,92.05165759346252,590.6628541741575 +45.892858671921374,80.46218979943808,76.42697491272475,526.2191690311157 +3.8257895307721723,54.274345685120394,42.800947274724436,254.15848133505824 +41.97447694765872,13.532092072390379,72.50163506922303,400.8825196113171 +72.71387467257868,52.79416170207206,62.97841122547151,500.78211513920286 +7.594676898430819,45.533938284397045,80.41835744355456,393.69148701650545 +32.27068977039145,62.301436430383006,95.13086910756803,535.8203952702862 +23.43414281343562,33.00093666633113,86.33758711521482,436.3705051869896 +28.345225792219097,52.22790730812045,59.49510550303234,375.5521695700744 +47.54966845502791,24.592101404220944,27.338694167333323,260.55445952252967 +52.42986955121714,24.742341858489304,25.298980466543707,264.3606937672565 +74.81501758154823,81.31577043200672,39.32388669888286,458.13900650533765 +21.160178320936595,63.496140197712506,49.38940915351737,335.9465134263749 +99.70703806945684,66.77617803962538,59.64420884708901,576.0566502569915 +1.8479804834469427,72.4085489210575,11.528783322696501,157.15532335886795 +26.845523559967233,24.374817234242276,61.886297218130125,339.77573867539786 +3.5471211552693505,39.28692056803085,10.03238329372882,106.41184315615402 +54.90320281332688,30.36434271780304,2.6526849648758732,193.82912323108246 +66.98448155898181,58.64989936169279,68.72886067029644,517.4504264740046 +63.78602273754919,11.212788723981248,71.0419579542613,446.9947112336733 +15.578327659058866,56.15464970904379,19.565860788547695,198.3624103995217 +84.20419632983098,72.87401593696096,51.10485117598548,513.6870095648027 +42.80954004367674,68.05718395727584,46.788278441508105,387.863827446938 +23.702595067303523,4.050455645675433,39.164996838311815,214.33291582595766 +65.8071263577575,6.87229429692211,64.11758897723084,418.56910608350097 +86.31088448917083,76.66153185384786,84.059509806308,650.456563926435 +64.07933492670253,6.110516155737045,97.6105595767784,542.0073287112223 +86.20251246349063,72.11368442811002,59.25872805588479,549.7234347718849 +30.972590649264518,78.2745298427186,29.141040939844164,306.187572723619 +20.800114402458735,9.445206792105164,90.23002002930099,409.8711279735724 +45.769938116183226,29.745314292887713,14.240609230383583,213.79576146870443 +51.90979868437512,22.51920109374266,37.21151742032313,305.75219389313116 +93.37794885838349,35.89304766422483,20.265610797664777,364.68615024629065 +41.24832500607957,36.90989256201041,60.59931738241091,389.9420419368583 +37.46026450730875,70.16777576968288,52.973270271949545,400.4932432683701 +14.119794392888817,65.67833912801443,70.35983598213814,402.6218056151351 +79.34053369231134,60.454494338626155,65.62343964008706,539.4733686277249 +69.94303644099878,67.55749198243444,22.83059560012839,363.19005661731836 +46.0974966638238,44.235638514313926,86.97077037321556,511.56157899466683 +58.41523824001712,60.26441130547661,63.72331768184429,479.75271681463613 +17.7191474964258,98.50771745942014,61.362945368626576,425.34721307185885 +76.35249524757177,6.708619516499825,96.65078707894965,568.4490273201704 +52.92635552428364,27.109239578090893,56.95398724679194,390.2955124355903 +5.300315900516706,88.11386109377341,57.90021637273107,366.7971318519295 +31.38013964119081,9.203878881907235,85.74500208234778,418.5519040117323 +27.70910790769925,17.339353670986313,54.018136108905054,301.0767938293729 +44.42451225793834,27.973825422918285,58.893322814894255,377.47238190808866 +91.78163402382724,95.03120124693815,69.30855435424878,636.0964653420957 +28.717632015619166,42.13524532842722,65.52289276209535,384.0697918652617 +12.501792596174688,31.593248306590283,62.366340796632116,315.9385205424338 +52.72181903028093,57.41092591341853,31.46878523857325,338.2921252869627 +85.44962226235666,19.096085171907706,78.69069395619238,541.6805269782657 +96.59693779863062,86.13981389485082,39.89558987699995,523.3984988432376 +73.96694528100558,8.813271673374413,77.50969376503384,493.6191221041916 +97.97603914594231,6.59935460287574,77.7225779034045,550.9583417841817 +29.155467374606935,52.41684508313982,16.939143593136485,216.73106435031258 +1.5467573391112044,13.617553919473801,8.929037617140246,58.174636304167386 +24.712930762139617,68.63113104646207,88.53385739340999,502.04648706506 +14.996810289873963,53.17542560083152,99.47069396774282,493.89099768101363 +7.667568125335144,97.16816615174909,88.20443543600814,501.1218777749993 +60.4218581145335,70.68790831142428,81.08841319394976,565.9307726967436 +9.220531257067744,37.1176838979264,95.25680844096293,441.22654430320176 +56.82999845100668,66.7027829614278,39.54586406072082,392.1947240369262 +22.72036865838507,84.86566877673864,86.65100168171512,514.3441625263666 +71.88441918657206,59.03551909776539,59.59067788189704,495.38224621058924 +44.70570042914219,1.4961857721816019,68.2708183426873,373.55258890487613 +82.026203662294,71.1132050141672,78.46889561959706,610.4362030575959 +37.522811320156656,81.16562689182959,70.27861980512344,483.2132527326028 +96.32059291816749,78.96946327849189,98.74523467178787,735.8160254686277 +39.772448862648545,92.40416695029552,51.85838316205555,435.14071965854646 +54.54875436546735,51.76597052693154,69.04416378043425,476.9462088815162 +91.55334128594075,96.46694600079078,50.78801362616142,567.1748229440323 +18.435315928165352,81.50201537901984,88.11216355947329,503.2124540147471 +11.08991130215804,64.33823088983617,61.5297468635813,357.2482043973586 +11.98220108151633,89.8216582980497,66.7667898945346,419.42631255523054 +47.808904173322475,9.925444508151282,12.230209068264697,180.5856876795711 +80.347412134594,61.47356495981969,60.73430476848428,524.6471809748817 +91.90406842703416,57.100157421325214,33.133254117662844,441.884993272042 +73.94772044944965,4.393330677690754,22.091222075098838,275.4347937445381 +89.97061649134321,85.11558471564965,25.536961714619633,449.06413605034385 +41.527585109878,62.126385135796134,73.20855083094773,475.5672274865701 +49.636015885408035,70.75303280915081,21.674512970905248,313.5474902392579 +12.307502053948294,60.90957995150846,79.60275252157244,426.1266011378327 +85.11486742698486,6.859144423819819,44.70667278158453,394.4590032978224 +50.88603960540853,33.62060090179335,48.8287220398047,363.60743968995524 +21.02283027972979,63.632113928089886,56.03825824144292,361.3871533162321 +66.9566089896225,80.59827083027427,14.495942761867243,343.54678291918816 +44.12361478354892,33.913843407341496,11.975190101284362,207.43770884057778 +2.83723795261549,81.18980463564274,40.43303478822913,282.8146196758607 +88.46283687176177,74.62497177163343,94.44192880947543,692.9250183417873 +2.8858883161801963,61.633017771768436,8.692143975663335,133.07882537047746 +19.60381852558035,4.308556768369421,60.50020089295363,285.6745958662719 +81.05843380822022,67.81332324468627,93.22747477018464,659.9164990586133 +93.60631089919943,45.33218917653906,68.43633643859029,562.3510628807151 +19.426852192748868,44.84916579120758,98.67348520469122,490.89910261082935 +33.98542891793376,74.77004903660881,46.594023608622535,374.391202604585 +37.25372082787393,49.31069249628728,47.08983461964633,346.6576951256948 +58.159288535002126,36.47014673434932,39.20176246364744,349.8978070852568 +97.72814584731178,95.06660044343712,5.5470066035903205,408.3223865919078 +91.97875703615384,0.05208345952240068,28.143075149958406,338.4235236674591 +78.09110074999266,97.45834424687757,32.732338720975505,466.7038407224623 +23.589391165575226,9.719737188031408,38.839476777924475,221.3336254066647 +3.1683862661902484,15.85051794725244,30.05641042714291,146.05674512995097 +54.2221080582103,46.58286824714297,34.8753698865235,338.90612038531987 +43.058642299518844,13.259757128179196,64.08047849621629,371.7094518876435 +68.21874728560643,39.29691765717295,59.90898550699154,457.64346742014726 +34.65797101235939,14.7727090946551,13.863080450751031,162.1742545192754 +93.64860914106944,1.7496905213818081,5.750813655648612,259.45158760540363 +7.121668552947813,85.89819410476092,35.65585586815553,283.1566820314795 +76.45770218045594,2.328819918291858,47.45242647402714,375.8355666877677 +85.54512061976709,53.86967658316952,8.173191327035623,326.66808726034895 +2.8454003923636395,68.11931959620686,47.12919002603093,289.55925990391535 +90.62365461952078,65.78510832364245,64.72676246182557,571.4163804224434 +71.61299499439734,71.37027430393103,35.70177673974195,422.4602430596647 +76.06498111918073,9.290197081869056,17.15425340984308,268.89920156663135 +73.42171014458624,97.73192531708735,38.03935354445724,474.92466371160725 +74.21277995021772,33.46895057725982,13.448905487070395,287.6957984398504 +57.297570579434385,52.350942371485175,89.57452411193543,563.0131017970684 +86.1014096494274,0.7164775881755459,43.70004494284178,382.4691635545917 +88.26958511022956,21.55231669454035,89.03929467025502,591.2782726940956 +26.020393756176418,18.040915338601405,13.911791497233883,144.53386893543438 +91.1330733238109,81.54464421403055,46.488210041580444,526.6875329583635 +12.457958964461657,52.922204336235026,8.661082477757564,144.50021978949607 +28.4085468084177,78.43758985600373,52.74763088689037,389.20694032147435 +90.19977292358554,64.70605186026495,75.50456762105496,610.2698742029226 +57.99037077842678,50.33448430182651,71.22519102177462,492.00399320270475 +58.488083657255366,79.01829982290775,68.84928413272846,526.4439482058499 +64.50250455458968,86.48840735161424,39.71562116621404,442.1369368207539 +30.02639556975032,28.683678857640295,29.7182304613385,230.84247111492837 +12.342941677040553,2.711561171053578,93.50911675506981,390.78446029371696 +37.19425154629445,82.21687392639055,18.913352740820866,288.8714622495816 +9.48975957690762,31.168503059272744,70.46497247825857,338.45849560282124 +87.11544569800739,45.95996945129408,8.575622485193025,320.5994155347645 +45.43732517873879,59.13799887146738,20.00239864520398,278.52253958830113 +60.34390531111404,24.86927526433915,56.930219362695475,404.7762298229511 +98.27104204142756,51.62129955939956,32.609252421092584,447.71118023024775 +12.497296715631546,41.06717401499067,74.03030896388374,374.8336084943629 +8.509359946615824,33.200470539166716,36.32188489827571,209.2747432915993 +21.04860462740652,87.52493611347668,26.424214590578423,284.43047850248485 +67.71162473136104,40.10081055961096,78.59346722247977,528.905424532522 +81.81252837091351,9.77951204298284,2.33281828489047,229.46677156695728 +8.665633047191212,62.57315177913133,50.923823733835114,310.56062185360247 +82.2162883410282,66.50820220210987,12.691941855215038,353.1010418476557 +36.60023034772222,70.95413424961447,88.29048900008993,533.9401585638286 +26.155249498506418,49.50492997485225,22.182345363248167,224.11122389888507 +30.523227960845755,70.74225786291247,22.025901596036856,267.2102586529828 +84.03494200413513,67.31890077692204,41.45548856612764,469.2223417854215 +25.49826519222086,93.6339730659316,24.843758048263798,299.3193349572867 +58.33367549840822,70.30144196475004,88.30906224385495,587.6525242333238 +95.73131992647438,56.55064558576319,63.11660354741695,564.4133023408376 +89.04732986725345,34.30197987303429,75.55314501087558,561.7200597621049 +47.870125950268616,27.851802311281084,19.190459045829588,234.70213828789755 +2.9198093916583123,90.28583469577316,54.78218929973608,350.8453998960954 +54.84108748963773,33.07452935998799,87.70197340396146,521.4543076405373 +60.912797340711364,30.49222210983156,50.21125469097852,390.1531242368262 +74.367027697126,79.8488770498565,35.46104349770194,441.82688558339566 +29.22088092427887,96.657096146212,59.581919583630885,444.0095446417512 +17.075829426310772,86.83863172155439,25.477358608008828,270.46301394150885 +1.5670198338693209,48.6321608415876,38.46898378735302,224.21567470531832 +71.7199511851978,59.952623207140654,90.20438318440097,611.3205553216039 +59.66934117479905,17.86717848230792,10.499880653883931,215.89792834472925 +8.240329221190235,21.589102153607275,95.98776494983177,417.81274303946986 +83.44411286020934,36.63795023082423,61.87433687983878,498.1926252733504 +81.85250068386304,39.12895831232965,31.45433134543306,382.8688852948077 +7.4642651573680325,24.550573584104264,45.10735679998847,227.40358070320656 +58.55360593485103,43.47196265327948,40.813797222955806,368.32668219111514 +37.30243566913671,91.93104446147565,23.038551773792893,319.4218134892565 +95.47559570462553,35.13527912001505,5.900794450033587,313.9073228791387 +12.030689074460032,45.8189027047853,73.8936759121361,380.54311134742215 +32.63123695938608,15.371060693585846,19.32122890139748,178.69761710545262 +56.701081117858664,57.51017818632522,77.21323720255752,521.2163401199919 +12.252556326452934,33.50962991718257,29.538741553914495,193.95372505729918 +64.05439035970898,30.752223746582054,87.25683863668492,537.7953579932686 +15.458651172237614,40.45442465538463,5.063342677100535,119.85035848859253 +98.82311926370558,62.08106117556742,21.623847345209658,422.883180501342 +82.11832498855964,1.8512564112370455,16.14677852090297,270.5750318741728 +3.1818433307097216,13.580805935934027,12.723076844090574,77.0209153843677 +9.578215609973274,86.91248183165541,87.82281978912643,489.07610987760296 +24.486961686759855,24.368288975211627,37.45012856282669,240.92630711628013 +22.73749922615015,83.57568456892098,62.834693411643215,421.9266399117143 +35.04171579919848,55.327533998912784,28.863549244236353,280.4980983689979 +11.075555005982018,47.126152946435965,51.71114335821938,294.75563297268116 +62.648994604895115,54.057404832032994,79.82612795858648,541.603270514707 +60.29927168823397,1.1910438842214321,79.74146652523008,456.67564404645924 +57.778238934503634,82.71406595234586,38.93037864429202,416.2343007616951 +55.03755937289476,97.74565910788905,40.749753120459054,439.7427366635569 +78.66879665410005,63.13588642191118,52.83489000027323,492.12321020155423 +27.134298923413002,78.95250854084412,24.311822125221592,279.1098006302848 +93.47084097428261,40.033296201766824,54.37524346773392,501.16849419346573 +13.824508491211896,80.44315781497048,74.58087153110213,439.6748484479029 +48.486263169766495,82.70120180942216,43.047530245597784,410.18191210376034 +97.64080018612451,90.48664860727972,40.114845795586874,532.737161920603 +19.130284719466374,44.049328641420274,70.63567212759261,383.85821425238095 +2.721757988415341,68.90976582674814,13.267099570502673,161.11226999169818 +47.926846607190754,57.3628049643015,40.59326588344463,361.05037264044546 +65.96424091552406,59.802521743632006,11.578425580106444,298.9966883815223 +21.28979450194073,38.50605854284912,20.596831883947566,190.27751933808145 +23.671276824626485,11.593923537338636,33.010226675681444,203.1616580995317 +52.19876703620243,59.9123422423973,70.2117847538137,488.55673702532323 +59.745986379012784,21.62565291389257,55.59165999735387,393.6476982846357 +72.43533297730298,36.10359991445022,44.8820137561589,406.04355259105347 +18.964773408962998,69.85507082988944,59.770812525434714,380.72153929566736 +78.37279851595952,13.35578992475982,94.76198885466728,575.9288813777036 +82.49425028054183,84.25907692985754,25.430763354872322,429.9136107821392 +9.621744779760677,35.00056096205044,28.01394666135707,183.24740983661925 +47.80105788796711,39.455262155942265,45.41088359611021,351.92036640493967 +24.036010123672124,76.20588843513214,1.185065318708478,179.57217436908365 +0.2802127674855548,30.662352311761488,95.15256354913913,408.8218002519247 +43.56879209529071,59.28607616787176,7.137325324044075,224.71841957163403 +88.42610486940369,52.34478264229093,25.820863471764444,398.36279974650745 +70.54222138789399,59.46350953123021,98.71872024834201,640.8889905771463 +78.18902571395647,81.26638591984492,62.82995143961582,557.3654081187425 +83.65194567751554,11.837975497239306,62.29962128832073,463.386496546865 +73.38910199115453,66.13442952531062,63.91607923987156,526.2475465752647 +73.34611893021042,72.41754218115464,59.930015873273845,519.9025196965356 +19.784941764233533,50.55612120493668,79.7836798315272,429.6472024130453 +75.84641287956379,62.270740302660386,6.243651044825505,307.52439234011285 +21.18266976581348,90.82000525860227,23.673974369976737,279.3829360076599 +90.05214017521605,85.67237972247932,8.094499790330579,384.46244481582494 +13.021362706118422,15.852808230812588,78.66714606982225,355.4212416384755 +15.339277495521076,33.799761247961754,74.37351519133807,372.4998424876984 +75.82887520192952,94.24419036196315,34.04864862407722,461.5710866104966 +19.142620655058895,61.237408764974475,56.37167232663366,354.1494852235662 +9.818652566064024,53.543039995979434,8.704791683528402,137.4834072534479 +37.93665759047404,15.068864237244718,58.93961894307063,341.67576843105934 +93.22688291482645,54.79619582567238,50.037211511698644,505.92960129229164 +55.89590877792118,13.65171170166758,67.00618582712501,414.9707829729636 +5.464492404855104,56.30825895814466,22.944983956996655,185.58740189552103 +16.446933641785467,18.786906847010243,78.39937049306988,368.053537581897 +65.52994050003221,89.26411487604125,41.861393530422866,457.3510090537076 +43.50439922253154,0.4717609245664778,22.831101946521372,197.04627373431077 +73.47509759384825,75.57338667075952,29.53451106155348,409.7798747846812 +69.15224621247887,27.054393074383277,83.25764320838022,530.1226516989387 +95.50284810488748,59.964868085274105,39.00930740739415,476.88268361092827 +40.69341774356307,72.83858917479974,69.32772336233903,475.2987983187722 +98.89594659453878,7.551684080536614,75.49368603690276,544.6635656683571 +93.36961149944933,6.311780748778495,17.35160248627442,309.2966483942438 +45.312737063979746,39.195604065738074,96.45338638755325,539.072214149107 +80.28047587023713,85.59819496648842,95.45699704715372,692.7496352902027 +46.73432174585842,12.51399231531285,72.7932551872445,412.5751921219839 +14.38517064597421,32.172898457041065,59.10760712264326,308.97364245005423 +49.70792462629788,60.64913288830619,97.93325182074422,587.2455344584471 +61.005508435891876,14.378320897635566,10.069468747493826,212.91911393866434 +63.51905658394122,24.58672679026799,28.608717276994845,305.2285348484949 +18.698134393424937,2.4119796341897426,37.904114483729636,195.19589934731718 +59.09778536969809,85.85298420848447,12.406042592448363,324.5764174346517 +55.795389989181366,98.65880522041857,93.92045784488843,644.9363805870335 +13.99327267745547,77.66367672173101,94.03976151691228,510.14223377320076 +28.633325418101585,87.25871270826234,23.605516761048772,293.16330452852674 +3.718663190916194,56.04992024454476,74.82989630035998,378.55829982852845 +22.327290548528445,64.94710369698261,10.88220029972151,194.8104487776627 +46.56038757335171,57.38200829062007,76.97074528789284,495.9087879112231 +33.56910195111888,89.68105980692835,75.06027331668449,505.29003194591473 +95.52370471243265,97.07198491000923,17.341982670652555,450.74266200463035 +2.6888326881153835,18.310763955958787,57.21537275191427,252.60501568790718 +66.24879745038359,67.62391263073103,38.51634683391525,414.04116192925056 +78.62974108877539,28.70063799574779,58.899756411732994,465.1555754819175 +55.35064831207568,68.92111506636591,31.35849519458396,360.5954103649867 +52.231092634009876,26.864292005937397,8.21853396682558,202.8345163204369 +95.73998769132109,88.84940328129738,8.767483819913268,407.3266297340245 +29.624822116518935,45.62387936326532,74.8508879980414,427.478667798007 +69.64375361757872,0.7184935566615036,91.70334666013372,524.101658020978 +59.44686197320367,83.74134712626184,18.7849662691982,345.284477339043 +71.28080591354325,87.58202875305192,6.274414151563413,333.57432804959365 +32.3165054857823,9.998234500924752,90.47093341909496,440.324436674617 +74.5698381643044,64.38205728275243,76.79385464280979,575.1742718753816 +94.31681096167775,27.667791751156614,98.97702940143515,654.4462052739564 +75.07476796883755,43.12456086766291,89.39680488083721,591.7747599098067 +7.278625724540577,24.445165860726902,40.711223576474666,210.62901706046017 +5.977356145516833,26.417401191488,26.464223796226538,155.658551084341 +13.931702763312103,72.28951803710095,9.716881805900467,180.18724077826892 +69.62958006520596,84.9853509217156,69.93954455697542,568.2008584940791 +51.62082575801973,21.248368844982767,48.4370337670285,344.61565980242636 +74.633744481659,94.96645999325646,64.9064797937551,576.1524562409547 +56.96288514336174,41.8834095724436,42.10522406220532,366.6709156148351 +64.21260309974353,99.18485923360178,44.69612579296227,479.31831446742774 +40.36624706035599,46.19069612667973,62.150898076174364,406.50871469868633 +99.39098871933855,91.54121637488335,63.10373650377479,626.2292620990634 +10.029346133733464,48.85673887901905,58.02692962911027,320.0337203716204 +13.905423647004955,58.76671091048369,15.396969921811888,181.17742289986245 +66.72509963804394,24.851701170452557,48.366180328659205,387.5793654113318 +40.44449994095524,50.67985732634425,47.62506012436357,358.129459594122 +63.0896720062571,38.1170024204005,45.393887764953455,388.1818996728809 +57.49829933858547,25.58806581624412,9.120514810906355,217.05290681038372 +71.8185157388796,45.19938945083939,88.53928851040098,584.7908156120252 +20.494443949011163,54.184420093530974,48.96601470470985,319.7433630449098 +69.02387031074099,23.198217670932852,33.425941429827496,334.1081766340393 +87.4034157015078,12.489830870882857,90.49695886754874,581.580191027687 +91.79564880035898,17.844211732872562,65.86738835433033,506.86712673767306 +80.21459186784014,56.04878551041408,9.547843837759029,321.3848158800036 +57.659311753891,67.47866700098324,5.036429806347186,264.7227079278811 +19.242342255968826,10.013724057943808,46.21215642706623,239.17102723248723 +48.13209599318294,24.445143958906613,40.91780013018892,312.39317316125874 +85.81336987632129,80.49685720088236,55.48191896830252,546.9447862872987 +94.9483621615123,87.91739566379263,52.78849639946546,569.9896828063225 +65.74610869982106,94.1705415946868,76.48698213471351,595.3945703976528 +9.601516892835814,32.005535216846624,73.08875570141586,349.9437954506599 +87.50646472746405,51.43127005670613,1.7634684542750967,303.6773036653057 +1.0162386148578673,85.6536813540816,22.938282982378645,217.99208645231766 +49.48652241792374,66.19846472332173,23.50403458278354,311.99162203728 +82.44551319839498,11.915990455778513,55.90740470688953,437.42089144848643 +48.45182501504832,27.82990609319028,84.81121590213407,485.84731391234374 +95.83021247822455,89.04169081685926,3.5713886983023024,386.872679162352 +71.56603194279482,59.43011311788493,26.172496162516413,367.34816653616406 +50.90701341982752,75.69458000141796,88.32855466486119,576.3587211775898 +28.764545574255685,73.18374114793946,98.78470225497409,557.7927633690892 +58.78494198405129,11.552903246731228,23.93339535960394,255.7440742064847 +42.57128583548423,51.64401117231072,69.04025719986588,446.65867245742635 +60.82898713722575,83.91870341929399,47.04216515243329,457.1851105063611 +70.51601883050658,19.6156989199455,33.87541843950744,334.63807794693633 +97.63761649290345,55.90223103627285,63.251527115984715,568.4183264048728 +33.27976903953387,56.15248354548702,39.71866103349898,318.86012765207016 +40.94351008569671,20.928126825799552,97.14333807856764,504.20275427535324 +4.238927723604746,57.7747882157001,18.530128619425092,167.13713102048752 +14.50418071745191,49.96709602143344,2.16317802651258,119.88280795149221 +8.174765609183643,35.17390902578358,90.51686077733211,417.1572663702754 +38.758797106229395,70.8806785965623,12.72489441292578,253.33623838182845 +55.83193245736554,77.27629391189924,63.522067191067286,497.3982739876358 +74.96097300222733,98.59397093499567,92.81059844234012,688.2981259049299 +9.071672122203545,20.99219945562951,35.17667180244557,188.44297903729282 +29.54399179698315,32.496112655836725,78.06257371235108,419.5091257989678 +79.18114530471698,1.3436751724978158,52.26550239678966,399.1458645211654 +62.689595790561725,36.60950679861056,61.46180959628049,446.1458178502362 +47.58216999206327,21.171596052369278,19.68659226812871,225.9216820685964 +47.83266382803658,25.467188066699986,54.880471042703284,367.4483148781969 +36.00524927677199,14.64477808356558,94.3239125874823,471.02303756850586 +18.616602204804455,83.8437386870848,48.40380726405198,356.52679291199905 +72.52405351081335,62.39552213275277,61.24917538255876,508.20044492610447 +44.863008409764014,45.846808450439944,17.523356668582757,248.3639855143256 +79.26138057453848,15.704475183298083,3.353223736216593,234.23937153717483 +30.08761789427844,30.496561643783103,52.53787130356491,320.723654611349 +15.408352223619382,95.50549297441705,87.44626411803428,514.4824225116638 +38.698400169091684,54.169763809137436,8.482274149077718,210.67868776145335 +2.380952793796265,19.63174320360761,76.35222205283614,325.8718172702703 +63.37220990309768,43.58393277951337,19.66643352841716,298.95983643983385 +93.90203651505244,23.077373759546592,48.85842024805306,455.30263611693397 +81.25658755887117,59.89803118709135,61.80935453771287,528.528913524889 +16.868507935576528,91.91918636350303,19.627496692360648,255.54125779544822 +26.20147962926982,28.470360626111724,37.20093166490129,250.2876999050914 +64.01017465175781,70.8968840097316,82.90889214758393,581.9995786201619 +96.11434765755808,22.881135291104727,28.516868930180305,383.6682773291989 +79.92322647124688,82.91861722130513,70.41308628149434,591.679398748003 +56.265473462309835,88.00120628079915,69.91986599054279,538.9725346888065 +0.04582324071984445,62.9585803768707,18.801145539647134,166.84615166147103 +33.010148065143404,65.21378423552183,89.6655890995641,521.3015400231901 +54.5222536771731,93.06223190511868,11.907612221883944,321.9982564565693 +48.219885514454376,53.53977834326892,58.78626979497166,424.8463438076524 +83.65119691818826,44.72098310488112,72.33927164189585,551.7312067050871 +47.82563300246614,69.30580144314096,93.98002830851193,580.7894864696805 +31.368008516068002,97.34409460203062,6.274798383864488,248.67839591437613 +78.23063261127385,9.242959583407206,74.83099589723903,493.8993923414469 +34.742091514967385,45.78620803721422,15.460161831678288,214.50022339443836 +33.25942981231862,2.4285165439882683,22.59986384270414,173.42889761516344 +89.22560741249613,80.90325209060232,9.525673605057595,381.05755112241786 +50.42189813379684,19.437489571178457,25.102365212607424,251.46636998890014 +20.141720188233116,79.59048333256705,72.05593447973999,444.40957989959685 +88.72547888340037,36.688604280377135,33.783851823717356,406.1012646114601 +98.19649344095227,28.414080960573397,55.782812545784154,500.6811426613888 +90.09228324991331,0.7654554452951046,68.25672995905623,486.4787469726818 +78.41368008076374,81.7836461057052,30.809062254349364,435.37995285567825 +1.0646438851399043,55.42532979510172,98.83357431536452,462.3904744077125 +80.55243978625658,5.237251293136291,0.3391924331887619,211.48382541988764 +72.62538528902482,55.0087204304366,72.19902526667767,539.1542697554993 +97.82030681358542,97.40489583734747,99.36402939742956,768.8493031254991 +72.88200703923827,97.35866470752052,35.352896445288906,463.78366455420803 +14.418886858623903,53.439644387971086,11.536201461082008,161.0965896714279 +47.7219761723161,92.83207114237032,69.21204674798419,522.1329477099871 +75.83290805434243,19.89712695198367,95.28902267032933,582.0499642494119 +22.269904652949013,44.62167121958972,89.31905976686349,462.7856690966955 +82.60088993591053,19.579587095592956,43.14736094190811,400.71367185526356 +28.27299623496756,79.40350122426766,25.81959912838958,287.7683717015809 +36.37552857283828,59.13717793479273,43.98862681137883,348.0513730874205 +50.02656320799633,63.91515272538471,0.3102107038831514,223.68746917331313 +9.393161835630659,15.227304517339913,69.45046559421833,311.41266350650596 +22.767775624589714,25.30385113249668,79.98839849430598,398.3470999478083 +77.11812624024209,31.305308582759583,31.462108720957094,359.99580014625406 +13.561466975557924,80.63910383247536,83.75426696450634,473.7521067089951 +67.93170953426888,84.6308941805435,92.18128155476347,646.6538400084953 +70.33151675421531,19.506706174203636,75.63820327633904,492.45532306747026 +34.04844209859711,26.950797584586983,46.79087781954194,304.29105159706563 +11.048520068985368,71.70401900309572,47.39484968099418,315.6543957589141 +61.87192501968575,33.445146624103195,27.017547552667732,307.77218345117575 +18.20772013583093,24.645978945382353,92.98097588281826,436.17421919845356 +45.16907613572716,43.20246504806548,8.000512934199788,208.45652464689917 +68.45294098924015,32.15467203355745,53.90393553028615,424.7772883642978 +95.38949868965241,54.21106869604141,80.88628659704482,627.8216757001835 +83.01656684928832,14.525939162443358,83.0179739196056,545.0739719634332 +52.396133611216925,91.11272592665193,69.33618316542878,532.3651224471218 +82.04675921054759,34.33457987331913,24.156593318639864,349.20491128533234 +39.536325890489735,29.46448490426935,94.07352236148799,501.07143552728763 +82.68848131251502,30.5407381628246,18.77808289954961,324.2200219692821 +15.346097455133645,55.78346614395424,20.616454364681058,199.7773699236797 +66.27356037114794,8.384347154497807,67.96667441433073,436.93396308234713 +92.50805374707318,10.915265376268213,0.5717920477810279,250.47513952190846 +24.26940345412103,49.854169520688494,95.73167865190632,499.4494958838484 +17.715428558297308,55.35866660860257,70.04246867327527,394.70836418920885 +34.428580494121896,61.48426167924562,93.44732134920444,533.7160859908992 +68.35836029726498,52.75646902834947,28.416398087562744,358.4201734404684 +41.57051065150995,68.19330463354048,43.22776808496642,370.6694124538058 +24.217952545977106,32.91174026538927,95.10979325705462,471.33754309125493 +68.43454689557007,41.35315827385801,43.96469868357226,400.8487376335661 +38.99704136507306,53.19265586281469,92.7294816312252,529.5579933171064 +11.918469345485082,33.88017484008861,7.969708627454719,110.92248717229192 +84.33508253867096,72.7586389739463,73.38357239399825,599.5037161468794 +45.58703645808967,8.867395986800542,21.31158068560317,208.8850944988331 +1.3315166635344822,9.367224918326977,78.8994023167707,318.168718110568 +60.478243395560064,25.6735333665411,96.79543192193655,558.5464357561065 +23.119700343356097,86.62636037496819,87.07985454878092,519.1147565839061 +98.5848167872305,97.30255647629188,38.924659955587295,540.035219935826 +39.586030459981814,70.93959681845845,5.754828012700131,228.49712978790996 +11.514497778826948,89.25133351209254,86.7553701866642,492.8912936400158 +0.2669937053018434,82.62605883286518,64.26723087913916,368.94014456671295 +19.651660731732356,95.72810330063187,26.86957512519108,295.3151173751671 +75.1831893112387,27.729068455143103,12.433744399999958,276.93055409716067 +54.95293020075218,24.637381229377908,88.5171593430189,510.80919773474614 +74.44285145459203,26.04598440985988,0.9491981170798081,229.94232091457545 +25.01476556783918,88.53409659696648,90.60274861749188,539.3764400259414 +6.789305595805462,91.17647024290297,71.16546778708226,424.3868492279743 +99.84476365789993,97.27954579448222,50.444730260973614,587.2151077019342 +18.953724491179656,48.17315366755152,7.893279860225821,149.8334786696716 +98.6697029417417,92.05336406829834,3.9334010313347156,400.3438596302483 +72.99072655987297,38.780316241761604,82.15793679723208,553.9735526906768 +1.394266870028893,5.702156630620136,63.54489114519269,254.3268283661843 +24.56349715602777,71.31482971681386,71.2927480072048,439.7122956445445 +57.86803808917414,94.56379741871578,42.55089158076757,448.7179920287765 +66.19110018689808,75.71024422143206,77.71339307823459,574.9681303766059 +78.55347682124213,49.2697259611802,92.56275429463746,621.8911343931543 +95.23684541442199,59.06371736313783,96.27880543314899,693.4037373930906 +30.21653932977206,50.83195572775227,81.09081023345138,460.542941133803 +80.24285919930986,89.03369206781099,27.058889675820375,436.37072044074733 +9.381917015916342,70.31479855291083,45.05678618157597,301.1870056881922 +66.91971650825617,55.45918914311467,93.1746380244744,604.2961333040581 +38.497765561580124,59.310361058089434,25.804057355086574,284.04129238700483 +40.561658537246636,40.118040784526464,75.53534605505621,449.084995705025 +41.42554955825708,81.34487981173173,22.678635748390242,312.49202730977447 +66.61259289133493,40.126920284465406,33.580667887511936,354.9614033367549 +74.79765238592519,96.43076254758023,46.55366412314502,509.03957061271944 +73.97923144747129,2.053586380463812,2.0490449084883067,196.8579039310555 +86.34771751328427,82.4752631809333,1.634100635108704,345.6916624124605 +79.95716992309589,63.409531524665795,69.74229173985795,560.8995507435648 +59.899084700584616,43.76281533119185,21.044283183852798,295.51615561556974 +55.251793062840036,20.7324502883818,13.503482837695625,220.4438959284889 +32.48212941419245,46.123739245393324,47.77786465045894,332.44752335959396 +56.518560083324296,89.0092536569137,23.812775449827683,365.69594500102795 +98.95691754389489,20.548568954184844,47.82796728623681,460.38476451776774 +54.32406571137089,17.17645136223308,85.92706360889166,489.43744833649373 +10.052416857948865,2.330050259830141,67.34895670402783,285.53877293287337 +77.70262095037805,79.23235667564468,48.942503073343524,499.70119883299856 +48.281352984255285,29.61503623054068,77.85403124208145,460.74472936699266 +72.13085685360122,18.915634368087307,1.0106004769290244,213.41010077134976 +91.55487879994729,63.56345674331484,84.68357105828443,647.2270476673976 +15.52690968090772,83.16550541049206,85.72424853455841,490.31616155040194 +79.50788705958318,32.19543283911284,45.34194214981125,419.79362869890605 +24.95245374771251,48.304062840567354,27.918493213008244,241.7199622822471 +84.65970566909861,16.506966432379556,95.29180615081113,598.5532064425453 +1.2041607874399562,39.15738004033987,65.12237060293094,309.52734842574256 +63.41177293867087,21.624939108555296,74.88101921226534,475.2179751511182 +37.925033691222445,46.94917560669102,38.06351605323274,310.1178890958208 +96.68835805666902,27.46062169267368,91.84323070718389,632.0553219905619 +66.7935924780118,8.984246641071437,19.007996134959527,252.66220266078628 +40.45411258325656,49.05944191047702,13.035241482453086,224.6714918558691 +40.66516699092541,20.153674171019798,25.81787441470551,230.6644935024926 +88.19759750725574,75.22939276625827,90.85031583279134,678.0954741218056 +43.523869800719815,73.65723361347747,23.36004484973221,308.9451730199088 +4.42601843581728,41.30135697740377,26.181318866151628,173.04651378762966 +37.034723688008654,33.32964159024203,67.20935082743922,398.2741966854813 +4.12356921404079,57.450748263640804,90.0916219388543,439.81988024913636 +91.85195046424161,41.019631814272685,26.062678109803127,390.9121201200183 +99.40955478470661,15.362333244770499,62.7970509599305,511.0188227226373 +30.200046471698315,56.09397580681792,79.90100378208642,463.8525908565987 +97.77269840162394,57.89977667284136,71.8280499922356,605.3925370081423 +49.47539140999096,85.13431318075249,72.26928174111045,526.3404000161305 +73.34426779983345,91.36151107913199,86.727629074191,650.3779570860681 +63.99506553603174,92.20666965758515,22.126790514040884,383.3627302039051 +63.326458435610576,0.07447751539769731,44.280641080864136,326.4668308927944 +25.457975565987333,58.49313887867663,66.39664755190438,404.6190038704839 +36.461902658112365,29.651534802685976,64.69270387529691,381.22808790796677 +67.67774231558474,86.2251482919651,24.865349829441218,393.7547473723602 +31.735080704777165,30.23874863581184,91.13709121151565,471.12208703187326 +45.988502161557655,53.24115731753021,0.2927946639280421,196.44866028840502 +15.642355845763777,37.416750766345665,5.8254916554524305,117.11496105324721 +66.77831867984523,3.417949929293984,36.97125419840258,313.7558979614881 +37.79385000634683,96.99285615863317,99.59972011373219,619.6051297542299 +33.75224078685106,3.350845316127571,93.46337298519674,444.9098603443537 +35.35097523951628,42.513909349437874,37.05069196803479,294.2384306103479 +74.84797121590755,90.30478055001147,25.022475507682863,418.0342679888374 +90.38630608987177,26.705638215241343,88.16085749501411,602.2889051068204 +17.50147873961244,57.13631186467798,81.51064171915621,439.25448812432614 diff --git a/elasticnet/tests/test_ElasticNetModel.py b/elasticnet/tests/test_ElasticNetModel.py deleted file mode 100644 index 5022c3c..0000000 --- a/elasticnet/tests/test_ElasticNetModel.py +++ /dev/null @@ -1,19 +0,0 @@ -import csv - -import numpy - -from elasticnet.models.ElasticNet import ElasticNetModel - -def test_predict(): - model = ElasticNetModel() - data = [] - with open("small_test.csv", "r") as file: - reader = csv.DictReader(file) - for row in reader: - data.append(row) - - X = numpy.array([[v for k,v in datum.items() if k.startswith('x')] for datum in data]) - y = numpy.array([[v for k,v in datum.items() if k=='y'] for datum in data]) - results = model.fit(X,y) - preds = results.predict(X) - assert preds == 0.5 diff --git a/regularized_discriminant_analysis/models/RegularizedDiscriminantAnalysis.py b/regularized_discriminant_analysis/models/RegularizedDiscriminantAnalysis.py deleted file mode 100644 index 089f9ad..0000000 --- a/regularized_discriminant_analysis/models/RegularizedDiscriminantAnalysis.py +++ /dev/null @@ -1,17 +0,0 @@ - - -class RDAModel(): - def __init__(self): - pass - - - def fit(self, X, y): - return RDAModelResults() - - -class RDAModelResults(): - def __init__(self): - pass - - def predict(self, x): - return 0.5 diff --git a/regularized_discriminant_analysis/test_rdamodel.py b/regularized_discriminant_analysis/test_rdamodel.py deleted file mode 100644 index 095725b..0000000 --- a/regularized_discriminant_analysis/test_rdamodel.py +++ /dev/null @@ -1,19 +0,0 @@ -import csv - -import numpy - -from regularized_discriminant_analysis.models.RegularizedDiscriminantAnalysis import RDAModel - -def test_predict(): - model = ElasticNetModel() - data = [] - with open("small_sample.csv", "r") as file: - reader = csv.DictReader(file) - for row in reader: - data.append(row) - - X = numpy.array([[v for k,v in datum.items() if k.startswith('x')] for datum in data]) - y = numpy.array([[v for k,v in datum.items() if k=='y'] for datum in data]) - results = model.fit(X,y) - preds = results.predict(X) - assert preds == 0.5 diff --git a/requirements.txt b/requirements.txt index 18af45d..2db5648 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,6 @@ numpy pytest ipython +pandas +matplotlib +sklearn (for performance metrics evaluations only)