{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":8552606,"sourceType":"datasetVersion","datasetId":4965286}],"dockerImageVersionId":30732,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"**K-Nearest Neighbors** (KNN) is a straightforward algorithm used for both classification and **regression** tasks. While commonly recognized for its classification capabilities, KNN is also applicable to regression problems. In regression, KNN predicts the output of a query point by *averaging the target values of its 'k' nearest neighbors*. Despite its simplicity and effectiveness, KNN for regression has its limitations. Notably, the algorithm *does not learn a function from the training data*; instead, it stores all training instances, leading to **large memory** requirements, especially for sizable datasets. Additionally, KNN's prediction time can be relatively **slow**, as it *needs to calculate distances between the query point and all training samples*. Therefore, while KNN is a viable option for regression tasks, its memory and computational demands should be carefully considered when applying the algorithm.","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19"}},{"cell_type":"markdown","source":"### Read the Dataset","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\n\nX_data = pd.read_csv('/kaggle/input/house-price-ready-to-modeling/X_HousePrice.csv')\nX_data = X_data.set_index(['Unnamed: 0', 'Unnamed: 1'])\nX_data.info()\n\nX_train = X_data.loc['train']\nX_test = X_data.loc['test']\n\ny_data = pd.read_csv('/kaggle/input/house-price-ready-to-modeling/y_HousePrice.csv')\ny_data = y_data.set_index(['Unnamed: 0', 'Id'])\ny_data.info()\n\ny_train = y_data.loc['train']\ny_test = y_data.loc['test']\n\ny_train_log = np.log(y_train.copy())\ny_test_log = np.log(y_test.copy())","metadata":{"execution":{"iopub.status.busy":"2024-06-21T18:12:37.187791Z","iopub.execute_input":"2024-06-21T18:12:37.188238Z","iopub.status.idle":"2024-06-21T18:12:37.244025Z","shell.execute_reply.started":"2024-06-21T18:12:37.188203Z","shell.execute_reply":"2024-06-21T18:12:37.242872Z"},"trusted":true},"execution_count":8,"outputs":[{"name":"stdout","text":"<class 'pandas.core.frame.DataFrame'>\nMultiIndex: 1439 entries, ('train', 0) to ('test', 437)\nData columns (total 42 columns):\n #   Column                         Non-Null Count  Dtype  \n---  ------                         --------------  -----  \n 0   num__LotFrontage               1439 non-null   float64\n 1   num__LotArea                   1439 non-null   float64\n 2   num__OverallQual               1439 non-null   float64\n 3   num__OverallCond               1439 non-null   float64\n 4   num__BsmtUnfSF                 1439 non-null   float64\n 5   num__TotalBsmtSF               1439 non-null   float64\n 6   num__1stFlrSF                  1439 non-null   float64\n 7   num__GrLivArea                 1439 non-null   float64\n 8   num__BsmtFullBath              1439 non-null   float64\n 9   num__HalfBath                  1439 non-null   float64\n 10  num__TotRmsAbvGrd              1439 non-null   float64\n 11  num__Fireplaces                1439 non-null   float64\n 12  num__GarageCars                1439 non-null   float64\n 13  num__MoSold                    1439 non-null   float64\n 14  num__AgeBuilt                  1439 non-null   float64\n 15  num__AgeRemodAdd               1439 non-null   float64\n 16  num__AgeGarageBlt              1439 non-null   float64\n 17  num__AgeSold                   1439 non-null   float64\n 18  nom__MSZoning_RM               1439 non-null   float64\n 19  nom__LotShape_Reg              1439 non-null   float64\n 20  nom__LandContour_Not Lvl       1439 non-null   float64\n 21  nom__LandSlope_Not Gtl         1439 non-null   float64\n 22  nom__Neighborhood_CollgCr      1439 non-null   float64\n 23  nom__Neighborhood_Sawyer       1439 non-null   float64\n 24  nom__RoofStyle_Not Gable       1439 non-null   float64\n 25  nom__Exterior2nd_Stucco        1439 non-null   float64\n 26  nom__GarageType_Attchd         1439 non-null   float64\n 27  nom__GarageType_Basment        1439 non-null   float64\n 28  nom__Fence_non-existent        1439 non-null   float64\n 29  nom__SaleCondition_Not Normal  1439 non-null   float64\n 30  ord__MSSubClass                1439 non-null   float64\n 31  ord__ExterQual                 1439 non-null   float64\n 32  ord__BsmtQual                  1439 non-null   float64\n 33  ord__BsmtExposure              1439 non-null   float64\n 34  ord__BsmtFinType1              1439 non-null   float64\n 35  ord__BsmtFinSF1                1439 non-null   float64\n 36  ord__BsmtFinType2              1439 non-null   float64\n 37  ord__KitchenQual               1439 non-null   float64\n 38  ord__FireplaceQu               1439 non-null   float64\n 39  ord__GarageArea                1439 non-null   float64\n 40  ord__GarageCond                1439 non-null   float64\n 41  ord__OpenPorchSF               1439 non-null   float64\ndtypes: float64(42)\nmemory usage: 516.7+ KB\n<class 'pandas.core.frame.DataFrame'>\nMultiIndex: 1439 entries, ('train', 708) to ('test', 1121)\nData columns (total 1 columns):\n #   Column     Non-Null Count  Dtype\n---  ------     --------------  -----\n 0   SalePrice  1439 non-null   int64\ndtypes: int64(1)\nmemory usage: 59.2+ KB\n","output_type":"stream"}]},{"cell_type":"markdown","source":"### Implement the KNN model  \nconsider these model parameters:\n  \n- **n_neighbors** (int, default=5): Number of neighbors to use by default for kneighbors queries.\n\n- **weights** (`{'uniform', 'distance'}`, callable or None, default=`'uniform'`):\n  Weight function used in prediction. Possible values:\n  - `'uniform'`: Uniform weights. All points in each neighborhood are weighted equally.\n  - `'distance'`: Weight points by the inverse of their distance. In this case, closer neighbors of a query point will have a greater influence than neighbors which are further away.\n\n- **p** (float, default=2):\n  Power parameter for the Minkowski metric. When p = 1, this is equivalent to using Manhattan distance (l1), and Euclidean distance (l2) for p = 2. For arbitrary p, Minkowski distance (l_p) is used. This parameter is expected to be positive.\n\n- **metric** (str or callable, default=`'minkowski'`):\n  Metric to use for distance computation. Default is “minkowski”, which results in the standard Euclidean distance when p = 2.   \n  \n*This markdown presents the model parameters for the KNN algorithm in a format similar to that of the sklearn documentation.*","metadata":{}},{"cell_type":"code","source":"!pip install --upgrade scikit-learn","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.neighbors import KNeighborsRegressor\nfrom sklearn.metrics import r2_score, root_mean_squared_error\n\nmodel = KNeighborsRegressor(n_neighbors=5, weights='uniform', p=2, metric='minkowski', n_jobs=-1)\nmodel.fit(X_train, y_train_log)\n\ny_pred_train = model.predict(X_train)\ny_pred_test = model.predict(X_test)\n\n\n# R-squared (R2) score for training set\nr2_train = r2_score(y_train_log, y_pred_train)\n\n# Root Mean Squared Error (RMSE) for training set\nrmse_train = root_mean_squared_error(y_train_log, y_pred_train)\n\n# Mean Absolute Percentage Error (MAPE) for training set\n# Avoiding division by zero\ny_train_values = y_train_log.to_numpy()\ny_train_values = y_train_values.reshape(y_train_values.shape[0])\nmape_train = np.mean(np.abs((y_train_values - y_pred_train) / np.where(y_train_values == 0, 1, y_train_values))) * 100\n\n# Correlation between predicted and real values for training set\ncorr_train = np.corrcoef(y_train_values, y_pred_train.ravel())[0, 1]\n\nprint(\"R-squared (R2) score for Training Set:\", r2_train)\nprint(\"Root Mean Squared Error (RMSE) for Training Set:\", rmse_train)\nprint(\"Mean Absolute Percentage Error (MAPE) for Training Set:\", mape_train)\nprint(\"Correlation between predicted and real values for Training Set:\", corr_train)\n\nprint(\"#\"*100)\n#------------------------------------------------------------------------\n\n# R-squared (R2) score\nr2 = r2_score(y_test_log, y_pred_test)\n\n# Root Mean Squared Error (RMSE)\nrmse = root_mean_squared_error(y_test_log, y_pred_test)\n\n# Mean Absolute Percentage Error (MAPE)\n# Avoiding division by zero\ny_test_values = y_test_log.to_numpy()\ny_test_values = y_test_values.reshape(y_test_values.shape[0])\nmape = np.mean(np.abs((y_test_values - y_pred_test) / np.where(y_test_values == 0, 1, y_test_values))) * 100\n\n# Correlation between predicted and real values\ncorr = np.corrcoef(y_test_values, y_pred_test.ravel())[0, 1]\n\nprint(\"R-squared (R2) score for Test Set:\", r2)\nprint(\"Root Mean Squared Error (RMSE) for Test Set:\", rmse)\nprint(\"Mean Absolute Percentage Error (MAPE) for Test Set:\", mape)\nprint(\"Correlation between predicted and real values for Test Set:\", corr)","metadata":{"execution":{"iopub.status.busy":"2024-06-21T18:14:26.334353Z","iopub.execute_input":"2024-06-21T18:14:26.334764Z","iopub.status.idle":"2024-06-21T18:14:26.389185Z","shell.execute_reply.started":"2024-06-21T18:14:26.334731Z","shell.execute_reply":"2024-06-21T18:14:26.387806Z"},"trusted":true},"execution_count":9,"outputs":[{"name":"stdout","text":"R-squared (R2) score for Training Set: 0.8789354537383861\nRoot Mean Squared Error (RMSE) for Training Set: 0.13622565872531747\nMean Absolute Percentage Error (MAPE) for Training Set: 3.465464270850094\nCorrelation between predicted and real values for Training Set: 0.9388079719169748\n####################################################################################################\nR-squared (R2) score for Test Set: 0.7517788499463659\nRoot Mean Squared Error (RMSE) for Test Set: 0.19576990681451326\nMean Absolute Percentage Error (MAPE) for Test Set: 3.499771142054016\nCorrelation between predicted and real values for Test Set: 0.8878821767974884\n","output_type":"stream"}]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nplt.figure(figsize=(6, 4))\nplt.scatter(y_test_log, y_pred_test, color='blue', alpha=0.5)\nplt.plot([y_test_log.min(), y_test_log.max()], [y_test_log.min(), y_test_log.max()], 'k--', lw=2)  # Plot the diagonal line\nplt.xlabel('True Values')\nplt.ylabel('Predicted Values')\nplt.title('Predicted Values vs True Values')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-06-21T18:15:34.888160Z","iopub.execute_input":"2024-06-21T18:15:34.888559Z","iopub.status.idle":"2024-06-21T18:15:35.153350Z","shell.execute_reply.started":"2024-06-21T18:15:34.888528Z","shell.execute_reply":"2024-06-21T18:15:35.152078Z"},"trusted":true},"execution_count":10,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 600x400 with 1 Axes>","image/png":"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7//9998lANJ//vMfu+2//vqr3fZr165JarVaGj16tGSxWKzHvfDCCxIAafLkydZtO3bskABIO3bskCRJkkwmk9SqVSupRYsWUl5ent11bM81c+ZMydF/w9qwsTKeffZZCYCUlJRk3abT6SQfHx9p4sSJ1m1FRUUV3jtixAipdevWdtsGDhwoDRw40Ppa/L6Sk5Ptjiv/zCwWi9SuXTtpxIgRdvdSVFQktWrVSho2bJh1m1arlWbOnFntvZVn4sSJUmRkpGQymazbMjIyJKVSKb366quSJElSXl6eBEB66623XD6/LaNHj5ZatGhht61FixYSAOnXX3+1256cnCwBkNatW1fhPACkBQsWWF9PmzZNiomJkXJycuyOe+CBByStVuvw92TL8uXLJQDSb7/9Zt1mNpulZs2aSf369bNuc3SeGTNmSH5+flJJSYl12+TJk+3us/zvtap7HDJkiJSYmGh3PovFIt1yyy1Su3btrNu6desmjR49usr7YhomHI5hGixDhw5FREQE4uPj8cADDyAgIADfffcdmjVrZnfc//3f/9m9/vrrr6HVajFs2DDk5ORYv3r27ImAgADs2LEDALB161aUlZXhySeftAuTVPVJU3Ds2DEkJyfj6aefRnBwsN0+23NVRl3YKBA5C7Yu+m+//RYlJSVW1zwAu7wFnU6HnJwcDBw4EH/++Sd0Op3T16uM48eP48KFC3jwwQeRm5trvWeDwYAhQ4Zg9+7dsFgsAIDg4GAcOHAA6enpLl3j/vvvx7Vr1+xCBd988w0sFgvuv/9+632q1Wrs3LmzQujLHbRq1QojRoyo0XslScK3336LMWPGQJIku38bI0aMgE6nqzIkBdAz8Pb2tvt979q1C1evXq30911YWIicnBzceuutKCoqwrlz52pkvy3Xr1/H9u3bMWHCBOv5c3JykJubixEjRuDChQu4evUqAPp9nz59GhcuXLjh6zL1Cw7HMA2W5cuXo3379vDy8kJUVBQ6dOgApdJeV3t5eSEuLs5u24ULF6DT6SpNtrx27RoA4MqVKwCAdu3a2e2PiIhASEhIlbaJ0JBw77tKXdgo6Nq1K7p06YIvvvjCmnvw+eefIzw83G6x3Lt3LxYsWIB9+/ahqKjI7hw6nQ5ardap61WGWGAmT55c6TE6nQ4hISF48803MXnyZMTHx6Nnz54YNWoUJk2a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"},"metadata":{}}]},{"cell_type":"markdown","source":"### Identify the Optimal Model through Hyperparameter Tuning","metadata":{}},{"cell_type":"code","source":"from sklearn.neighbors import KNeighborsRegressor\nfrom sklearn.metrics import r2_score, root_mean_squared_error\nfrom sklearn.model_selection import GridSearchCV\n\n# Initialize the KNeighborsRegressor\nknn = KNeighborsRegressor()\n\n# Set up the parameter grid\nparam_grid = {\n    'n_neighbors': [3, 5, 7, 9], \n    'weights': ['uniform', 'distance'],\n    'metric': ['euclidean', 'manhattan']\n}\n\n# Create GridSearchCV object\ngrid_search = GridSearchCV(knn, param_grid, scoring='neg_root_mean_squared_error', cv=5)\n\n# Fit the grid search to the data\ngrid_search.fit(X_train, y_train_log)\n\n# Get the best estimator\nbest_knn = grid_search.best_estimator_\n\n# Get the best parameters\nbest_params = grid_search.best_params_\nprint(\"Best Parameters:\", best_params)\n","metadata":{"execution":{"iopub.status.busy":"2024-06-21T18:18:00.548544Z","iopub.execute_input":"2024-06-21T18:18:00.548977Z","iopub.status.idle":"2024-06-21T18:18:01.487246Z","shell.execute_reply.started":"2024-06-21T18:18:00.548945Z","shell.execute_reply":"2024-06-21T18:18:01.486070Z"},"trusted":true},"execution_count":11,"outputs":[{"name":"stdout","text":"Best Parameters: {'metric': 'manhattan', 'n_neighbors': 5, 'weights': 'distance'}\n","output_type":"stream"}]},{"cell_type":"code","source":"# Train the regressor with the full training data\nbest_knn.fit(X_train, y_train_log)\n\n# Predict the target for the train set\ny_pred_train = best_knn.predict(X_train)\n\n# Predict the target for the test set\ny_pred = best_knn.predict(X_test)\n\n# R-squared (R2) score for training set\nr2_train = r2_score(y_train_log, y_pred_train)\n\n# Root Mean Squared Error (RMSE) for training set\nrmse_train = root_mean_squared_error(y_train_log, y_pred_train)\n\n# Mean Absolute Percentage Error (MAPE) for training set\n# Avoiding division by zero\ny_train_values = y_train_log.to_numpy()\ny_train_values = y_train_values.reshape(y_train_values.shape[0])\nmape_train = np.mean(np.abs((y_train_values - y_pred_train) / np.where(y_train_values == 0, 1, y_train_values))) * 100\n\n# Correlation between predicted and real values for training set\ncorr_train = np.corrcoef(y_train_values, y_pred_train.ravel())[0, 1]\n\nprint(\"R-squared (R2) score for Training Set:\", r2_train)\nprint(\"Root Mean Squared Error (RMSE) for Training Set:\", rmse_train)\nprint(\"Mean Absolute Percentage Error (MAPE) for Training Set:\", mape_train)\nprint(\"Correlation between predicted and real values for Training Set:\", corr_train)\n\nprint(\"#\"*100)\n#------------------------------------------------------------------------\n\n# R-squared (R2) score\nr2 = r2_score(y_test_log, y_pred)\n\n# Root Mean Squared Error (RMSE)\nrmse = root_mean_squared_error(y_test_log, y_pred)\n\n# Mean Absolute Percentage Error (MAPE)\n# Avoiding division by zero\ny_test_values = y_test_log.to_numpy()\ny_test_values = y_test_values.reshape(y_test_values.shape[0])\nmape = np.mean(np.abs((y_test_values - y_pred) / np.where(y_test_values == 0, 1, y_test_values))) * 100\n\n# Correlation between predicted and real values\ncorr = np.corrcoef(y_test_values, y_pred.ravel())[0, 1]\n\nprint(\"R-squared (R2) score for Test Set:\", r2)\nprint(\"Root Mean Squared Error (RMSE) for Test Set:\", rmse)\nprint(\"Mean Absolute Percentage Error (MAPE) for Test Set:\", mape)\nprint(\"Correlation between predicted and real values for Test Set:\", corr)","metadata":{"execution":{"iopub.status.busy":"2024-06-21T18:19:00.213963Z","iopub.execute_input":"2024-06-21T18:19:00.214710Z","iopub.status.idle":"2024-06-21T18:19:00.300222Z","shell.execute_reply.started":"2024-06-21T18:19:00.214656Z","shell.execute_reply":"2024-06-21T18:19:00.299014Z"},"trusted":true},"execution_count":12,"outputs":[{"name":"stdout","text":"R-squared (R2) score for Training Set: 1.0\nRoot Mean Squared Error (RMSE) for Training Set: 0.0\nMean Absolute Percentage Error (MAPE) for Training Set: 3.6322786838852585\nCorrelation between predicted and real values for Training Set: 1.0\n####################################################################################################\nR-squared (R2) score for Test Set: 0.8049346889913416\nRoot Mean Squared Error (RMSE) for Test Set: 0.17354678178939414\nMean Absolute Percentage Error (MAPE) for Test Set: 3.4193375744960135\nCorrelation between predicted and real values for Test Set: 0.8996976913271958\n","output_type":"stream"}]}]}