From 0f0ce335efc958e8a7274170bc3e3a03ec690bbd Mon Sep 17 00:00:00 2001 From: christosPro123 <protopapaschristos@gmail.com> Date: Fri, 2 Jun 2023 12:20:53 +0100 Subject: [PATCH] Removed unnecessary files, added report draft --- COMP3217.docx | Bin 0 -> 13832 bytes part1 (2).ipynb | 537 ------------------------------------------ part1.ipynb | 615 ++++++++++++++++++++++++++---------------------- part1.py | 25 -- 4 files changed, 333 insertions(+), 844 deletions(-) create mode 100644 COMP3217.docx delete mode 100644 part1 (2).ipynb delete mode 100644 part1.py diff --git a/COMP3217.docx b/COMP3217.docx new file mode 100644 index 0000000000000000000000000000000000000000..e4bd96f44bf0065b1cc577a2cd42134a8fa508e1 GIT binary patch literal 13832 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 literal 0 HcmV?d00001 diff --git a/part1 (2).ipynb b/part1 (2).ipynb deleted file mode 100644 index 93a16f5..0000000 --- a/part1 (2).ipynb +++ /dev/null @@ -1,537 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import sklearn\n", - "import scipy\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.linear_model import LogisticRegression\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.decomposition import PCA\n", - "from sklearn.impute import SimpleImputer\n", - "from sklearn.model_selection import GridSearchCV\n", - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn.preprocessing import StandardScaler\n", - "from sklearn.impute import SimpleImputer\n", - "from sklearn.decomposition import PCA\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.linear_model import LogisticRegression\n", - "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n", - "from sklearn.model_selection import GridSearchCV\n", - "import pandas as pd\n", - "from sklearn.impute import SimpleImputer\n", - "from sklearn.model_selection import RandomizedSearchCV\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "#Read CSV file as Pandas Dataframe\n", - "train_df = pd.read_csv('TrainingDataBinary.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "<class 'pandas.core.frame.DataFrame'>\n", - "RangeIndex: 6000 entries, 0 to 5999\n", - "Columns: 129 entries, 1 to 129\n", - "dtypes: float64(112), int64(17)\n", - "memory usage: 5.9 MB\n", - "None\n" - ] - } - ], - "source": [ - "print(train_df.info())" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([3000., 0., 0., 0., 0., 0., 0., 0., 0.,\n", - " 3000.]),\n", - " array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),\n", - " <BarContainer object of 10 artists>)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "<Figure size 640x480 with 1 Axes>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Create a histogram to show the distribution of a column\n", - "plt.hist(train_df['129'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "scaler = StandardScaler()\n", - "\n", - "# Separate the features from the target variable\n", - "X = train_df.drop('129', axis=1)\n", - "y = train_df['129']\n", - "\n", - "#Fix infinite value error\n", - "# X[X == np.inf] = np.finfo('float64').max\n", - "X.replace([np.inf,-np.inf],0,inplace=True)\n", - "\n", - "# Create a SimpleImputer object to replace NaN values with the mean value of the corresponding column\n", - "imputer = SimpleImputer(strategy='mean')\n", - "\n", - "# Impute the missing values in the features data\n", - "X_imputed = imputer.fit_transform(X)\n", - "\n", - "# Fit the scaler to the features data and transform the data\n", - "X_scaled = scaler.fit_transform(X_imputed)\n", - "\n", - "# # The transformed data will be a numpy array, so you can convert it back to a DataFrame\n", - "# X_scaled_df = pd.DataFrame(X_scaled, columns=X.columns)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "#PCA\n", - "pca = PCA(n_components=100)\n", - "X_pca = pca.fit_transform(X_scaled)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy: 0.895\n", - "Classification Report:\n", - " precision recall f1-score support\n", - "\n", - " 0 0.86 0.94 0.90 588\n", - " 1 0.93 0.86 0.89 612\n", - "\n", - " accuracy 0.90 1200\n", - " macro avg 0.90 0.90 0.89 1200\n", - "weighted avg 0.90 0.90 0.89 1200\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n" - ] - } - ], - "source": [ - "#split data\n", - "X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)\n", - "\n", - "#train the model\n", - "log_reg = LogisticRegression()\n", - "log_reg.fit(X_train, y_train)\n", - "\n", - "# 5. Evaluate the model on the testing set\n", - "y_pred = log_reg.predict(X_test)\n", - "accuracy = accuracy_score(y_test, y_pred)\n", - "\n", - "report = classification_report(y_test, y_pred)\n", - "\n", - "print(\"Accuracy:\", accuracy)\n", - "\n", - "print(\"Classification Report:\\n\", report)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Confusion Matrix:\n", - " [[550 38]\n", - " [ 88 524]]\n" - ] - } - ], - "source": [ - "conf_matrix = confusion_matrix(y_test, y_pred)\n", - "print(\"Confusion Matrix:\\n\", conf_matrix)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[True Negatives (TN), False Positives (FP)],\n", - " [False Negatives (FN), True Positives (TP)]]" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Fine tuning" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Fitting 3 folds for each of 100 candidates, totalling 300 fits\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py:378: FitFailedWarning: \n", - "120 fits failed out of a total of 300.\n", - "The score on these train-test partitions for these parameters will be set to nan.\n", - "If these failures are not expected, you can try to debug them by setting error_score='raise'.\n", - "\n", - "Below are more details about the failures:\n", - "--------------------------------------------------------------------------------\n", - "24 fits failed with the following error:\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", - " estimator.fit(X_train, y_train, **fit_params)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", - " solver = _check_solver(self.solver, self.penalty, self.dual)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", - " raise ValueError(\n", - "ValueError: Solver newton-cg supports only 'l2' or 'none' penalties, got elasticnet penalty.\n", - "\n", - "--------------------------------------------------------------------------------\n", - "15 fits failed with the following error:\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", - " estimator.fit(X_train, y_train, **fit_params)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", - " solver = _check_solver(self.solver, self.penalty, self.dual)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 71, in _check_solver\n", - " raise ValueError(\"penalty='none' is not supported for the liblinear solver\")\n", - "ValueError: penalty='none' is not supported for the liblinear solver\n", - "\n", - "--------------------------------------------------------------------------------\n", - "18 fits failed with the following error:\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", - " estimator.fit(X_train, y_train, **fit_params)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", - " solver = _check_solver(self.solver, self.penalty, self.dual)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", - " raise ValueError(\n", - "ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got l1 penalty.\n", - "\n", - "--------------------------------------------------------------------------------\n", - "6 fits failed with the following error:\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", - " estimator.fit(X_train, y_train, **fit_params)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1291, in fit\n", - " fold_coefs_ = Parallel(n_jobs=self.n_jobs, verbose=self.verbose, prefer=prefer)(\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\parallel.py\", line 63, in __call__\n", - " return super().__call__(iterable_with_config)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 1085, in __call__\n", - " if self.dispatch_one_batch(iterator):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 901, in dispatch_one_batch\n", - " self._dispatch(tasks)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 819, in _dispatch\n", - " job = self._backend.apply_async(batch, callback=cb)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\_parallel_backends.py\", line 208, in apply_async\n", - " result = ImmediateResult(func)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\_parallel_backends.py\", line 597, in __init__\n", - " self.results = batch()\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 288, in __call__\n", - " return [func(*args, **kwargs)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 288, in <listcomp>\n", - " return [func(*args, **kwargs)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\parallel.py\", line 123, in __call__\n", - " return self.function(*args, **kwargs)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 521, in _logistic_regression_path\n", - " alpha = (1.0 / C) * (1 - l1_ratio)\n", - "TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'\n", - "\n", - "--------------------------------------------------------------------------------\n", - "21 fits failed with the following error:\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", - " estimator.fit(X_train, y_train, **fit_params)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", - " solver = _check_solver(self.solver, self.penalty, self.dual)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 64, in _check_solver\n", - " raise ValueError(\n", - "ValueError: Only 'saga' solver supports elasticnet penalty, got solver=liblinear.\n", - "\n", - "--------------------------------------------------------------------------------\n", - "12 fits failed with the following error:\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", - " estimator.fit(X_train, y_train, **fit_params)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", - " solver = _check_solver(self.solver, self.penalty, self.dual)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", - " raise ValueError(\n", - "ValueError: Solver sag supports only 'l2' or 'none' penalties, got l1 penalty.\n", - "\n", - "--------------------------------------------------------------------------------\n", - "9 fits failed with the following error:\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", - " estimator.fit(X_train, y_train, **fit_params)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", - " solver = _check_solver(self.solver, self.penalty, self.dual)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", - " raise ValueError(\n", - "ValueError: Solver sag supports only 'l2' or 'none' penalties, got elasticnet penalty.\n", - "\n", - "--------------------------------------------------------------------------------\n", - "6 fits failed with the following error:\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", - " estimator.fit(X_train, y_train, **fit_params)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", - " solver = _check_solver(self.solver, self.penalty, self.dual)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", - " raise ValueError(\n", - "ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got elasticnet penalty.\n", - "\n", - "--------------------------------------------------------------------------------\n", - "9 fits failed with the following error:\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", - " estimator.fit(X_train, y_train, **fit_params)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", - " solver = _check_solver(self.solver, self.penalty, self.dual)\n", - " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", - " raise ValueError(\n", - "ValueError: Solver newton-cg supports only 'l2' or 'none' penalties, got l1 penalty.\n", - "\n", - " warnings.warn(some_fits_failed_message, FitFailedWarning)\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_search.py:952: UserWarning: One or more of the test scores are non-finite: [ nan 0.87666667 0.92083333 nan nan 0.87416667\n", - " nan 0.87666667 0.864375 0.87645833 0.78208333 0.87854167\n", - " 0.72333333 0.87854167 0.85645833 nan nan nan\n", - " 0.85083333 0.72333333 0.5025 0.92020833 0.78208333 0.918125\n", - " 0.86458333 0.87666667 nan 0.9225 0.90375 nan\n", - " 0.78208333 nan 0.5025 nan nan nan\n", - " nan 0.78208333 nan 0.78208333 0.85645833 0.628125\n", - " 0.918125 nan 0.49916667 0.85875 nan 0.49916667\n", - " nan nan 0.87791667 0.86520833 nan 0.9225\n", - " nan 0.918125 0.865625 0.84166667 nan 0.9225\n", - " 0.90375 0.918125 0.87375 0.918125 0.864375 nan\n", - " nan 0.87666667 nan 0.90375 0.85625 0.62895833\n", - " nan nan 0.85625 nan nan 0.87854167\n", - " 0.85645833 nan 0.87791667 0.90395833 0.87854167 nan\n", - " nan 0.87375 0.78208333 0.87666667 nan nan\n", - " 0.78208333 0.90270833 nan nan 0.85625 nan\n", - " 0.86583333 nan nan nan]\n", - " warnings.warn(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:1173: FutureWarning: `penalty='none'`has been deprecated in 1.2 and will be removed in 1.4. To keep the past behaviour, set `penalty=None`.\n", - " warnings.warn(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:1181: UserWarning: Setting penalty=None will ignore the C and l1_ratio parameters\n", - " warnings.warn(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Best Parameters: {'solver': 'newton-cg', 'penalty': 'none', 'max_iter': 100, 'C': 0.005994842503189409}\n", - "Best Score: 0.9225\n", - "Accuracy: 0.9325\n", - "Confusion Matrix:\n", - " [[557 31]\n", - " [ 50 562]]\n", - "Classification Report:\n", - " precision recall f1-score support\n", - "\n", - " 0 0.92 0.95 0.93 588\n", - " 1 0.95 0.92 0.93 612\n", - "\n", - " accuracy 0.93 1200\n", - " macro avg 0.93 0.93 0.93 1200\n", - "weighted avg 0.93 0.93 0.93 1200\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\optimize.py:210: ConvergenceWarning: newton-cg failed to converge. Increase the number of iterations.\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "\n", - "param_dist = {\n", - " 'penalty': ['l1', 'l2', 'elasticnet', 'none'],\n", - " 'C': np.logspace(-4, 4, 10),\n", - " 'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],\n", - " 'max_iter': [100, 500, 1000],\n", - "}\n", - "\n", - "# Create the RandomizedSearchCV object with the logistic regression model, hyperparameters, and cross-validation\n", - "log_reg = LogisticRegression()\n", - "random_search = RandomizedSearchCV(log_reg, param_dist, n_iter=100, cv=3, n_jobs=-1, verbose=1, random_state=42)\n", - "\n", - "# Fit the random search to the training data\n", - "random_search.fit(X_train, y_train)\n", - "\n", - "# Check the best hyperparameters found\n", - "print(\"Best Parameters:\", random_search.best_params_)\n", - "print(\"Best Score:\", random_search.best_score_)\n", - "\n", - "# Use the best estimator for predictions and evaluation\n", - "best_model = random_search.best_estimator_\n", - "y_pred = best_model.predict(X_test)\n", - "accuracy = accuracy_score(y_test, y_pred)\n", - "conf_matrix = confusion_matrix(y_test, y_pred)\n", - "report = classification_report(y_test, y_pred)\n", - "\n", - "print(\"Accuracy:\", accuracy)\n", - "print(\"Confusion Matrix:\\n\", conf_matrix)\n", - "print(\"Classification Report:\\n\", report)\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Predict" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "test_data = pd.read_csv('TestingDataBinary.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "# Preprocessing\n", - "X_new = test_data\n", - "X_new.replace([np.inf, -np.inf], 0, inplace=True)\n", - "\n", - "# Impute the missing values in the features data\n", - "X_imputed_new = imputer.transform(X_new)\n", - "\n", - "# Scale the features data\n", - "X_scaled_new = scaler.transform(X_imputed_new)\n", - "\n", - "# Apply PCA transformation\n", - "X_pca_new = pca.transform(X_scaled_new)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "# Use the best estimator for predictions on the new data\n", - "y_pred_new = best_model.predict(X_pca_new)\n", - "\n", - "# Save the predictions to a new column in the DataFrame\n", - "test_data['predicted_marker'] = y_pred_new\n", - "\n", - "# Save the updated DataFrame to a new CSV file\n", - "test_data.to_csv('TestingDataBinary_with_predictions.csv', index=False)" - ] - } - ], - "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.9.0" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/part1.ipynb b/part1.ipynb index 0824ced..4d6c92e 100644 --- a/part1.ipynb +++ b/part1.ipynb @@ -17,7 +17,19 @@ "import matplotlib.pyplot as plt\n", "from sklearn.decomposition import PCA\n", "from sklearn.impute import SimpleImputer\n", - "from sklearn.model_selection import GridSearchCV" + "from sklearn.model_selection import GridSearchCV\n", + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.decomposition import PCA\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n", + "from sklearn.model_selection import GridSearchCV\n", + "import pandas as pd\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.model_selection import RandomizedSearchCV\n" ] }, { @@ -34,6 +46,28 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<class 'pandas.core.frame.DataFrame'>\n", + "RangeIndex: 6000 entries, 0 to 5999\n", + "Columns: 129 entries, 1 to 129\n", + "dtypes: float64(112), int64(17)\n", + "memory usage: 5.9 MB\n", + "None\n" + ] + } + ], + "source": [ + "print(train_df.info())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, "outputs": [ { "data": { @@ -44,7 +78,7 @@ " <BarContainer object of 10 artists>)" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, @@ -61,7 +95,7 @@ ], "source": [ "# Create a histogram to show the distribution of a column\n", - "plt.hist(train_df['marker'])" + "plt.hist(train_df['129'])" ] }, { @@ -73,11 +107,10 @@ "scaler = StandardScaler()\n", "\n", "# Separate the features from the target variable\n", - "X = train_df.drop('marker', axis=1)\n", - "y = train_df['marker']\n", + "X = train_df.drop('129', axis=1)\n", + "y = train_df['129']\n", "\n", "#Fix infinite value error\n", - "# X[X == np.inf] = np.finfo('float64').max\n", "X.replace([np.inf,-np.inf],0,inplace=True)\n", "\n", "# Create a SimpleImputer object to replace NaN values with the mean value of the corresponding column\n", @@ -95,101 +128,106 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "n_components = 100\n", - "pca = PCA(n_components=n_components)\n", - "principal_components = pca.fit_transform(X_scaled)\n", - "\n", - "# Create a DataFrame with the loadings\n", - "loadings = pd.DataFrame(pca.components_.T, columns=[f'PC{i+1}' for i in range(n_components)], index=X.columns)\n", - "\n", - "# Apply PCA to the scaled data\n", - "# pca = PCA(n_components=100)\n", - "# X_pca = pca.fit_transform(X_scaled)\n", - "\n", - "# Split the data into training and testing sets\n", - "X_train, X_test, y_train, y_test = train_test_split(pca, y, test_size=0.2,random_state=42)\n", - "\n", - "# # Train the model on the training data\n", - "# lr.fit(X_train, y_train)\n", - "\n", - "# # Predict the labels for the test data\n", - "# y_pred = lr.predict(X_test)\n", - "\n", - "# # Evaluate the model performance\n", - "# print(\"Accuracy:\", accuracy_score(y_test, y_pred))" + "#PCA\n", + "pca = PCA(n_components=100)\n", + "X_pca = pca.fit_transform(X_scaled)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.895\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " 0 0.86 0.94 0.90 588\n", + " 1 0.93 0.86 0.89 612\n", + "\n", + " accuracy 0.90 1200\n", + " macro avg 0.90 0.90 0.89 1200\n", + "weighted avg 0.90 0.90 0.89 1200\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n" + ] + } + ], "source": [ - "X_test_pca = pca.transform(X_test_scaled)\n", - "clf = LogisticRegression(random_state=42)\n", - "clf.fit(X_train_pca, y_train)\n", - "\n", + "#split data\n", + "X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)\n", "\n", - "y_pred = clf.predict(X_test_pca)\n", + "#train the model\n", + "log_reg = LogisticRegression()\n", + "log_reg.fit(X_train, y_train)\n", "\n", - "# Calculate and print the accuracy of the model\n", + "# 5. Evaluate the model on the testing set\n", + "y_pred = log_reg.predict(X_test)\n", "accuracy = accuracy_score(y_test, y_pred)\n", - "print(\"Accuracy:\", accuracy)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "# Read the test dataset\n", - "test_df = pd.read_csv('TestingDataBinary.csv')" + "\n", + "report = classification_report(y_test, y_pred)\n", + "\n", + "print(\"Accuracy:\", accuracy)\n", + "\n", + "print(\"Classification Report:\\n\", report)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Top 100 components:\n", - " [[ 3.72196354e+00 -5.87941588e+00 -4.02934784e-01 ... 4.15787367e-03\n", - " 1.89567282e-03 2.81043971e-03]\n", - " [ 1.25401316e+00 -5.82245182e+00 -7.51607953e-01 ... 5.71178351e-04\n", - " 1.64284342e-04 3.97691294e-03]\n", - " [ 1.24713154e+00 -5.82164239e+00 -7.59379345e-01 ... 3.40089202e-03\n", - " 2.59366304e-04 4.28360451e-03]\n", - " ...\n", - " [-6.89160079e-01 -5.50909843e+00 -4.69952506e-01 ... -2.71254494e-03\n", - " -9.03351989e-05 -2.02581895e-03]\n", - " [ 7.34703326e-01 -5.58643030e+00 -5.41845944e-01 ... -3.62008786e-03\n", - " -8.72999728e-05 -2.60358277e-03]\n", - " [ 7.35621169e-01 -5.58380312e+00 -5.36559421e-01 ... -3.46823833e-03\n", - " 3.30081328e-04 -2.83803266e-03]]\n" + "Confusion Matrix:\n", + " [[550 38]\n", + " [ 88 524]]\n" ] } ], "source": [ - "# explained_variance_ratio = pca.explained_variance_ratio_\n", - "\n", - "\n", - "# sorted_indices = np.argsort(explained_variance_ratio)[::-1]\n", - "\n", - "# # Get the top 100 components\n", - "# top_100_indices = sorted_indices[:100]\n", - "# top_100_components = principal_components[:, top_100_indices]\n", - "# top_100_explained_variance_ratio = explained_variance_ratio[top_100_indices]\n", - "\n", - "\n", - "# print(\"Top 100 components:\\n\", top_100_components)" + "conf_matrix = confusion_matrix(y_test, y_pred)\n", + "print(\"Confusion Matrix:\\n\", conf_matrix)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[True Negatives (TN), False Positives (FP)],\n", + " [False Negatives (FN), True Positives (TP)]]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Fine tuning" ] }, { @@ -197,266 +235,279 @@ "execution_count": 9, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 3 folds for each of 100 candidates, totalling 300 fits\n" + ] + }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py:378: FitFailedWarning: \n", + "120 fits failed out of a total of 300.\n", + "The score on these train-test partitions for these parameters will be set to nan.\n", + "If these failures are not expected, you can try to debug them by setting error_score='raise'.\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "Below are more details about the failures:\n", + "--------------------------------------------------------------------------------\n", + "24 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", + " solver = _check_solver(self.solver, self.penalty, self.dual)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", + " raise ValueError(\n", + "ValueError: Solver newton-cg supports only 'l2' or 'none' penalties, got elasticnet penalty.\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "--------------------------------------------------------------------------------\n", + "15 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", + " solver = _check_solver(self.solver, self.penalty, self.dual)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 71, in _check_solver\n", + " raise ValueError(\"penalty='none' is not supported for the liblinear solver\")\n", + "ValueError: penalty='none' is not supported for the liblinear solver\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "--------------------------------------------------------------------------------\n", + "18 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", + " solver = _check_solver(self.solver, self.penalty, self.dual)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", + " raise ValueError(\n", + "ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got l1 penalty.\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "--------------------------------------------------------------------------------\n", + "6 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1291, in fit\n", + " fold_coefs_ = Parallel(n_jobs=self.n_jobs, verbose=self.verbose, prefer=prefer)(\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\parallel.py\", line 63, in __call__\n", + " return super().__call__(iterable_with_config)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 1085, in __call__\n", + " if self.dispatch_one_batch(iterator):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 901, in dispatch_one_batch\n", + " self._dispatch(tasks)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 819, in _dispatch\n", + " job = self._backend.apply_async(batch, callback=cb)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\_parallel_backends.py\", line 208, in apply_async\n", + " result = ImmediateResult(func)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\_parallel_backends.py\", line 597, in __init__\n", + " self.results = batch()\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 288, in __call__\n", + " return [func(*args, **kwargs)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 288, in <listcomp>\n", + " return [func(*args, **kwargs)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\parallel.py\", line 123, in __call__\n", + " return self.function(*args, **kwargs)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 521, in _logistic_regression_path\n", + " alpha = (1.0 / C) * (1 - l1_ratio)\n", + "TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "--------------------------------------------------------------------------------\n", + "21 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", + " solver = _check_solver(self.solver, self.penalty, self.dual)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 64, in _check_solver\n", + " raise ValueError(\n", + "ValueError: Only 'saga' solver supports elasticnet penalty, got solver=liblinear.\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "--------------------------------------------------------------------------------\n", + "12 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", + " solver = _check_solver(self.solver, self.penalty, self.dual)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", + " raise ValueError(\n", + "ValueError: Solver sag supports only 'l2' or 'none' penalties, got l1 penalty.\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "--------------------------------------------------------------------------------\n", + "9 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", + " solver = _check_solver(self.solver, self.penalty, self.dual)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", + " raise ValueError(\n", + "ValueError: Solver sag supports only 'l2' or 'none' penalties, got elasticnet penalty.\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "--------------------------------------------------------------------------------\n", + "6 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", + " solver = _check_solver(self.solver, self.penalty, self.dual)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", + " raise ValueError(\n", + "ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got elasticnet penalty.\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "--------------------------------------------------------------------------------\n", + "9 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n", + " solver = _check_solver(self.solver, self.penalty, self.dual)\n", + " File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n", + " raise ValueError(\n", + "ValueError: Solver newton-cg supports only 'l2' or 'none' penalties, got l1 penalty.\n", "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n", - " warnings.warn(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n", - " warnings.warn(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n", + " warnings.warn(some_fits_failed_message, FitFailedWarning)\n", + "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_search.py:952: UserWarning: One or more of the test scores are non-finite: [ nan 0.87666667 0.92083333 nan nan 0.87416667\n", + " nan 0.87666667 0.864375 0.87645833 0.78208333 0.87854167\n", + " 0.72333333 0.87854167 0.85645833 nan nan nan\n", + " 0.85083333 0.72333333 0.5025 0.92020833 0.78208333 0.918125\n", + " 0.86458333 0.87666667 nan 0.9225 0.90375 nan\n", + " 0.78208333 nan 0.5025 nan nan nan\n", + " nan 0.78208333 nan 0.78208333 0.85645833 0.628125\n", + " 0.918125 nan 0.49916667 0.85875 nan 0.49916667\n", + " nan nan 0.87791667 0.86520833 nan 0.9225\n", + " nan 0.918125 0.865625 0.84166667 nan 0.9225\n", + " 0.90375 0.918125 0.87375 0.918125 0.864375 nan\n", + " nan 0.87666667 nan 0.90375 0.85625 0.62895833\n", + " nan nan 0.85625 nan nan 0.87854167\n", + " 0.85645833 nan 0.87791667 0.90395833 0.87854167 nan\n", + " nan 0.87375 0.78208333 0.87666667 nan nan\n", + " 0.78208333 0.90270833 nan nan 0.85625 nan\n", + " 0.86583333 nan nan nan]\n", " warnings.warn(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n", + "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:1173: FutureWarning: `penalty='none'`has been deprecated in 1.2 and will be removed in 1.4. To keep the past behaviour, set `penalty=None`.\n", " warnings.warn(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n", - " warnings.warn(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n", - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n" + "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:1181: UserWarning: Setting penalty=None will ignore the C and l1_ratio parameters\n", + " warnings.warn(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Best hyperparameters: {'C': 100, 'solver': 'liblinear'}\n", - "Best accuracy score: 0.8968333333333334\n" + "Best Parameters: {'solver': 'newton-cg', 'penalty': 'none', 'max_iter': 100, 'C': 0.005994842503189409}\n", + "Best Score: 0.9225\n", + "Accuracy: 0.9325\n", + "Confusion Matrix:\n", + " [[557 31]\n", + " [ 50 562]]\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " 0 0.92 0.95 0.93 588\n", + " 1 0.95 0.92 0.93 612\n", + "\n", + " accuracy 0.93 1200\n", + " macro avg 0.93 0.93 0.93 1200\n", + "weighted avg 0.93 0.93 0.93 1200\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n", + "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\optimize.py:210: ConvergenceWarning: newton-cg failed to converge. Increase the number of iterations.\n", " warnings.warn(\n" ] } ], "source": [ - "# Create a Logistic Regression model\n", - "lr = LogisticRegression()\n", "\n", - "# Define the parameter grid to search over\n", - "param_grid = {'C': [0.1, 1, 10, 100], 'solver': ['liblinear', 'lbfgs']}\n", + "param_dist = {\n", + " 'penalty': ['l1', 'l2', 'elasticnet', 'none'],\n", + " 'C': np.logspace(-4, 4, 10),\n", + " 'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],\n", + " 'max_iter': [100, 500, 1000],\n", + "}\n", + "\n", + "# Create the RandomizedSearchCV object with the logistic regression model, hyperparameters, and cross-validation\n", + "log_reg = LogisticRegression()\n", + "random_search = RandomizedSearchCV(log_reg, param_dist, n_iter=100, cv=3, n_jobs=-1, verbose=1, random_state=42)\n", "\n", - "# Create a GridSearchCV object and fit it to the data\n", - "grid_search = GridSearchCV(lr, param_grid, cv=5)\n", - "grid_search.fit(X_scaled, y)\n", + "# Fit the random search to the training data\n", + "random_search.fit(X_train, y_train)\n", "\n", - "# Print the best hyperparameters and the corresponding accuracy score\n", - "print(\"Best hyperparameters: \", grid_search.best_params_)\n", - "print(\"Best accuracy score: \", grid_search.best_score_)" + "# Check the best hyperparameters found\n", + "print(\"Best Parameters:\", random_search.best_params_)\n", + "print(\"Best Score:\", random_search.best_score_)\n", + "\n", + "# Use the best estimator for predictions and evaluation\n", + "best_model = random_search.best_estimator_\n", + "y_pred = best_model.predict(X_test)\n", + "accuracy = accuracy_score(y_test, y_pred)\n", + "conf_matrix = confusion_matrix(y_test, y_pred)\n", + "report = classification_report(y_test, y_pred)\n", + "\n", + "print(\"Accuracy:\", accuracy)\n", + "print(\"Confusion Matrix:\\n\", conf_matrix)\n", + "print(\"Classification Report:\\n\", report)\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Predict" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy: 0.9158333333333334\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n", - " warnings.warn(\n" - ] - } - ], + "outputs": [], + "source": [ + "test_data = pd.read_csv('TestingDataBinary.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], "source": [ - "lr = LogisticRegression(C=100, solver='liblinear')\n", - "# Train the model on the training data\n", - "lr.fit(X_train, y_train)\n", + "# Preprocessing\n", + "X_new = test_data\n", + "X_new.replace([np.inf, -np.inf], 0, inplace=True)\n", + "\n", + "# Impute the missing values in the features data\n", + "X_imputed_new = imputer.transform(X_new)\n", "\n", - "# Predict the labels for the test data\n", - "y_pred = lr.predict(X_test)\n", + "# Scale the features data\n", + "X_scaled_new = scaler.transform(X_imputed_new)\n", "\n", - "# Evaluate the model performance\n", - "print(\"Accuracy:\", accuracy_score(y_test, y_pred))" + "# Apply PCA transformation\n", + "X_pca_new = pca.transform(X_scaled_new)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ - "# Normalize the features\n", - "test_df_scaled = scaler.transform(test_df)\n", - "\n", - "# Select the top 15 features\n", - "test_df_selected = test_df_scaled[:, :top_n]\n", + "# Use the best estimator for predictions on the new data\n", + "y_pred_new = best_model.predict(X_pca_new)\n", "\n", - "# Use the chosen model to predict AQI scores for the test dataset\n", - "test_predictions = rf_reg_selected.predict(test_df_selected)\n", + "# Save the predictions to a new column in the DataFrame\n", + "test_data['predicted_marker'] = y_pred_new\n", "\n", - "# Save the predictions to the subs.csv file\n", - "submission_df = pd.DataFrame({'AQI_Bucket': test_predictions})\n", - "# submission_df.to_csv(\"C:\\Users\\andre\\Downloads\\subs.csv\", index=False)" + "# Save the updated DataFrame to a new CSV file\n", + "test_data.to_csv('TestingDataBinary_with_predictions.csv', index=False)" ] } ], diff --git a/part1.py b/part1.py deleted file mode 100644 index 251f068..0000000 --- a/part1.py +++ /dev/null @@ -1,25 +0,0 @@ -import pandas as pd -import numpy as np -import sklearn -import scipy -from sklearn.model_selection import train_test_split -from sklearn.metrics import accuracy_score -import matplotlib.pyplot as plt - -#Read CSV file as Pandas Dataframe -train_df = pd.read_csv('TrainingDataBinary.csv') -test_df = pd.read_csv('TestingDataBinary.csv') - -#Confirm reading of files -print(train_df.head) -print("----------------------------------") -print(test_df.head) - -# Get the summary statistics of the data -print(train_df.describe()) - -# Get the information about the columns of the DataFrame -print(train_df.info()) - -# Create a histogram to show the distribution of a column -plt.hist(train_df['marker']) \ No newline at end of file -- GitLab