TIF_E4121149_ADITIYA_GILANG/ISPU_modelling.ipynb

1086 lines
129 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "GiJ5wa22UpJQ"
},
"outputs": [],
"source": [
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.svm import SVC\n",
"from sklearn.model_selection import GridSearchCV\n",
"from sklearn.metrics import classification_report, confusion_matrix\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"import joblib"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "E9BahdBzrqyg",
"outputId": "4be91ac5-3489-480e-a8ed-85903eb6e180"
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pm10</th>\n",
" <th>pm25</th>\n",
" <th>co</th>\n",
" <th>hc</th>\n",
" <th>o3</th>\n",
" <th>no2</th>\n",
" <th>so2</th>\n",
" <th>kategori</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>65.59</td>\n",
" <td>16.62</td>\n",
" <td>15.59</td>\n",
" <td>0.05</td>\n",
" <td>10.50</td>\n",
" <td>6.99</td>\n",
" <td>4.17</td>\n",
" <td>TIDAK SEHAT</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>14.17</td>\n",
" <td>3.21</td>\n",
" <td>19.65</td>\n",
" <td>0.05</td>\n",
" <td>13.05</td>\n",
" <td>6.99</td>\n",
" <td>4.17</td>\n",
" <td>BAIK</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4.81</td>\n",
" <td>3.13</td>\n",
" <td>18.93</td>\n",
" <td>0.05</td>\n",
" <td>13.40</td>\n",
" <td>6.99</td>\n",
" <td>4.17</td>\n",
" <td>BAIK</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>185.81</td>\n",
" <td>27.15</td>\n",
" <td>20.36</td>\n",
" <td>35.53</td>\n",
" <td>48.31</td>\n",
" <td>9.94</td>\n",
" <td>19.37</td>\n",
" <td>SANGAT TIDAK SEHAT</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>37.22</td>\n",
" <td>10.01</td>\n",
" <td>20.80</td>\n",
" <td>0.05</td>\n",
" <td>12.54</td>\n",
" <td>6.99</td>\n",
" <td>4.17</td>\n",
" <td>SEDANG</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" pm10 pm25 co hc o3 no2 so2 kategori\n",
"0 65.59 16.62 15.59 0.05 10.50 6.99 4.17 TIDAK SEHAT\n",
"1 14.17 3.21 19.65 0.05 13.05 6.99 4.17 BAIK\n",
"2 4.81 3.13 18.93 0.05 13.40 6.99 4.17 BAIK\n",
"3 185.81 27.15 20.36 35.53 48.31 9.94 19.37 SANGAT TIDAK SEHAT\n",
"4 37.22 10.01 20.80 0.05 12.54 6.99 4.17 SEDANG"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv(\"train.csv\")\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "bCcSt7AAr_xd",
"outputId": "0a5e2246-348d-4360-e650-7c6ea6a4c566"
},
"outputs": [
{
"data": {
"text/plain": [
"(372, 8)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 335
},
"id": "30dFmP-UsA8p",
"outputId": "909ff50f-afd3-4b50-bf77-b3cca3d23de0"
},
"outputs": [
{
"data": {
"text/plain": [
"pm10 0\n",
"pm25 0\n",
"co 0\n",
"hc 0\n",
"o3 0\n",
"no2 0\n",
"so2 0\n",
"kategori 0\n",
"dtype: int64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 272
},
"id": "LcMSwo7WvofB",
"outputId": "53f05bd3-a23d-4780-88dd-960245480877"
},
"outputs": [
{
"data": {
"text/plain": [
"kategori\n",
"BAIK 162\n",
"TIDAK SEHAT 103\n",
"SEDANG 68\n",
"SANGAT TIDAK SEHAT 33\n",
"BERBAHAYA 6\n",
"Name: count, dtype: int64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['kategori'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wE_W_0rpsCdg",
"outputId": "055d389f-9508-4f10-ef5b-29451398a2a7"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 372 entries, 0 to 371\n",
"Data columns (total 8 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 pm10 372 non-null float64\n",
" 1 pm25 372 non-null float64\n",
" 2 co 372 non-null float64\n",
" 3 hc 372 non-null float64\n",
" 4 o3 372 non-null float64\n",
" 5 no2 372 non-null float64\n",
" 6 so2 372 non-null float64\n",
" 7 kategori 372 non-null object \n",
"dtypes: float64(7), object(1)\n",
"memory usage: 23.4+ KB\n"
]
}
],
"source": [
"df.info()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 300
},
"id": "ilElECcbsElH",
"outputId": "70ce145e-64e1-41a5-dae7-af4f27ab2098"
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>pm10</th>\n",
" <th>pm25</th>\n",
" <th>co</th>\n",
" <th>hc</th>\n",
" <th>o3</th>\n",
" <th>no2</th>\n",
" <th>so2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>372.000000</td>\n",
" <td>372.000000</td>\n",
" <td>372.000000</td>\n",
" <td>372.000000</td>\n",
" <td>372.000000</td>\n",
" <td>372.000000</td>\n",
" <td>372.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>50.627422</td>\n",
" <td>11.960429</td>\n",
" <td>208.549313</td>\n",
" <td>40.302061</td>\n",
" <td>22.378823</td>\n",
" <td>6.823007</td>\n",
" <td>5.011888</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>68.804261</td>\n",
" <td>19.188310</td>\n",
" <td>260.892950</td>\n",
" <td>56.559531</td>\n",
" <td>12.623128</td>\n",
" <td>3.253119</td>\n",
" <td>5.057836</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.705980</td>\n",
" <td>0.045761</td>\n",
" <td>0.051787</td>\n",
" <td>0.044879</td>\n",
" <td>0.010149</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>2.682500</td>\n",
" <td>2.340675</td>\n",
" <td>37.037691</td>\n",
" <td>2.580640</td>\n",
" <td>17.385000</td>\n",
" <td>4.050000</td>\n",
" <td>2.470000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>13.210000</td>\n",
" <td>5.155000</td>\n",
" <td>131.520000</td>\n",
" <td>4.235000</td>\n",
" <td>21.675000</td>\n",
" <td>6.990000</td>\n",
" <td>4.170000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>77.180000</td>\n",
" <td>12.685000</td>\n",
" <td>246.990000</td>\n",
" <td>70.137500</td>\n",
" <td>26.570000</td>\n",
" <td>9.940000</td>\n",
" <td>4.230000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>290.800000</td>\n",
" <td>119.100000</td>\n",
" <td>1586.970000</td>\n",
" <td>174.900000</td>\n",
" <td>113.380000</td>\n",
" <td>10.700000</td>\n",
" <td>19.370000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" pm10 pm25 co hc o3 \\\n",
"count 372.000000 372.000000 372.000000 372.000000 372.000000 \n",
"mean 50.627422 11.960429 208.549313 40.302061 22.378823 \n",
"std 68.804261 19.188310 260.892950 56.559531 12.623128 \n",
"min 0.000000 0.000000 0.705980 0.045761 0.051787 \n",
"25% 2.682500 2.340675 37.037691 2.580640 17.385000 \n",
"50% 13.210000 5.155000 131.520000 4.235000 21.675000 \n",
"75% 77.180000 12.685000 246.990000 70.137500 26.570000 \n",
"max 290.800000 119.100000 1586.970000 174.900000 113.380000 \n",
"\n",
" no2 so2 \n",
"count 372.000000 372.000000 \n",
"mean 6.823007 5.011888 \n",
"std 3.253119 5.057836 \n",
"min 0.044879 0.010149 \n",
"25% 4.050000 2.470000 \n",
"50% 6.990000 4.170000 \n",
"75% 9.940000 4.230000 \n",
"max 10.700000 19.370000 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "EI2wHEwktGiu"
},
"outputs": [],
"source": [
"X = df.drop(\"kategori\", axis=1)\n",
"y = df[\"kategori\"]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "sJdwyku0tnGl",
"outputId": "63539ff4-3007-48ee-b44a-4e371e3ee96f"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"X_train: (297, 7)\n",
"X_test: (75, 7)\n",
"y_train: (297,)\n",
"y_test: (75,)\n"
]
}
],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"print(f\"X_train: {X_train.shape}\")\n",
"print(f\"X_test: {X_test.shape}\")\n",
"print(f\"y_train: {y_train.shape}\")\n",
"print(f\"y_test: {y_test.shape}\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Parameters: {'svc__C': 100, 'svc__gamma': 0.01}\n",
"Best Score: 93.94%\n",
"Test Accuracy: 93.33%\n"
]
},
{
"data": {
"text/plain": [
"['svmreat_rbf.pkl']"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"ename": "",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n",
"\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n",
"\u001b[1;31mClick <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. \n",
"\u001b[1;31mView Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
]
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import joblib\n",
"from sklearn.model_selection import train_test_split, GridSearchCV\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.svm import SVC\n",
"from sklearn.pipeline import Pipeline\n",
"\n",
"df = pd.read_csv(\"train.csv\")\n",
"\n",
"df[\"PM10_PM25_ratio\"] = df[\"pm10\"] / (df[\"pm25\"] + 1)\n",
"df[\"PM10_SO2_ratio\"] = df[\"pm10\"] / (df[\"so2\"] + 1)\n",
"df[\"PM2.5_SO2_ratio\"] = df[\"pm25\"] / (df[\"so2\"] + 1)\n",
"df[\"CO_NO2_ratio\"] = df[\"co\"] / (df[\"no2\"] + 1)\n",
"df[\"CO_SO2_ratio\"] = df[\"co\"] / (df[\"so2\"] + 1)\n",
"df[\"CO_O3_ratio\"] = df[\"co\"] / (df[\"o3\"] + 1)\n",
"df[\"SO2_NO2_ratio\"] = df[\"so2\"] / (df[\"no2\"] + 1)\n",
"df[\"SO2_O3_ratio\"] = df[\"so2\"] / (df[\"o3\"] + 1)\n",
"df[\"NO2_O3_ratio\"] = df[\"no2\"] / (df[\"o3\"] + 1)\n",
"df[\"HC_CO_ratio\"] = df[\"hc\"] / (df[\"co\"] + 1)\n",
"df[\"HC_NO2_ratio\"] = df[\"hc\"] / (df[\"no2\"] + 1)\n",
"df[\"HC_SO2_ratio\"] = df[\"hc\"] / (df[\"so2\"] + 1)\n",
"df[\"HC_O3_ratio\"] = df[\"hc\"] / (df[\"o3\"] + 1)\n",
"df[\"total_pollution\"] = df[[\"pm10\", \"pm25\", \"co\", \"no2\", \"so2\", \"o3\", \"hc\"]].sum(axis=1)\n",
"\n",
"X = df[[\"pm10\", \"pm25\", \"co\", \"no2\", \"so2\", \"o3\", \"hc\",\n",
" \"PM10_PM25_ratio\", \"PM10_SO2_ratio\", \"PM2.5_SO2_ratio\",\n",
" \"CO_NO2_ratio\", \"CO_SO2_ratio\", \"CO_O3_ratio\",\n",
" \"SO2_NO2_ratio\", \"SO2_O3_ratio\", \"NO2_O3_ratio\",\n",
" \"HC_CO_ratio\", \"HC_NO2_ratio\", \"HC_SO2_ratio\", \"HC_O3_ratio\",\n",
" \"total_pollution\"]]\n",
"y = df[\"kategori\"]\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"pipeline = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('svc', SVC(kernel='rbf'))\n",
"])\n",
"\n",
"param_grid = {\n",
" 'svc__C': [0.1, 1, 10, 100],\n",
" 'svc__gamma': [1, 0.1, 0.01, 0.001]\n",
"}\n",
"\n",
"grid_search = GridSearchCV(pipeline, param_grid, cv=3, scoring='accuracy')\n",
"grid_search.fit(X_train, y_train)\n",
"\n",
"best_model = grid_search.best_estimator_\n",
"\n",
"print(\"Best Parameters:\", grid_search.best_params_)\n",
"print(f\"Best Score: {round(grid_search.best_score_ * 100, 2)}%\")\n",
"print(f\"Test Accuracy: {round(best_model.score(X_test, y_test) * 100, 2)}%\")\n",
"\n",
"joblib.dump(best_model, \"svmreat_rbf.pkl\")\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "bsop_mRYqr5d",
"outputId": "d8005758-bc32-4ec7-c60c-ca392428632e"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Parameters: {'svc__C': 100, 'svc__gamma': 1}\n",
"Best Score: 93.27%\n",
"Test Accuracy: 93.33%\n"
]
}
],
"source": [
"# Create a pipeline\n",
"pipeline = Pipeline([\n",
" ('scaler', StandardScaler()), # Standardize features\n",
" ('svc', SVC(kernel='linear'))\n",
"])\n",
"\n",
"# Define the parameter grid for GridSearchCV\n",
"param_grid = {\n",
" 'svc__C': [0.1, 1, 100],\n",
" 'svc__gamma': [1, 0.1, 0.01, 0.001]\n",
"}\n",
"\n",
"grid_search = GridSearchCV(pipeline, param_grid, cv=3, scoring='accuracy')\n",
"\n",
"grid_search.fit(X_train, y_train)\n",
"\n",
"print(\"Best Parameters:\", grid_search.best_params_)\n",
"print(f\"Best Score: {round(grid_search.best_score_*100, 2)}%\")\n",
"\n",
"best_model = grid_search.best_estimator_\n",
"accuracy = best_model.score(X_test, y_test)\n",
"print(f\"Test Accuracy: {round(accuracy*100, 2)}%\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "eYlKGsTByM7A",
"outputId": "ba232675-331e-4f6b-f380-66038296a7c6"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Parameters: {'svc__C': 1, 'svc__gamma': 1}\n",
"Best Score: 91.58%\n",
"Test Accuracy: 93.33%\n"
]
}
],
"source": [
"# Create a pipeline\n",
"pipeline = Pipeline([\n",
" ('scaler', StandardScaler()), # Standardize features\n",
" ('svc', SVC(kernel='poly'))\n",
"])\n",
"\n",
"# Define the parameter grid for GridSearchCV\n",
"param_grid = {\n",
" 'svc__C': [0.1, 1, 10, 100],\n",
" 'svc__gamma': [1, 0.1, 0.01, 0.001]\n",
"}\n",
"\n",
"# Create GridSearchCV object\n",
"grid_search = GridSearchCV(pipeline, param_grid, cv=3, scoring='accuracy')\n",
"\n",
"# Fit the GridSearchCV object to the training data\n",
"grid_search.fit(X_train, y_train)\n",
"\n",
"# Print the best parameters and best score\n",
"print(\"Best Parameters:\", grid_search.best_params_)\n",
"print(f\"Best Score: {round(grid_search.best_score_*100, 2)}%\")\n",
"\n",
"# Evaluate the best model on the testing data\n",
"best_model = grid_search.best_estimator_\n",
"accuracy = best_model.score(X_test, y_test)\n",
"print(f\"Test Accuracy: {round(accuracy*100, 2)}%\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hasil Evaluasi Semua Kombinasi Parameter:\n",
"--------------------------------------------------\n",
"C\tGamma\tBest Score (CV)\tTest Accuracy\n",
"--------------------------------------------------\n",
"0.1\t1\t72.39%\t\t94.67%\n",
"0.1\t0.1\t71.72%\t\t94.67%\n",
"0.1\t0.01\t43.77%\t\t94.67%\n",
"0.1\t0.001\t43.77%\t\t94.67%\n",
"1\t1\t91.92%\t\t94.67%\n",
"1\t0.1\t87.88%\t\t94.67%\n",
"1\t0.01\t74.41%\t\t94.67%\n",
"1\t0.001\t43.77%\t\t94.67%\n",
"10\t1\t92.93%\t\t94.67%\n",
"10\t0.1\t92.93%\t\t94.67%\n",
"10\t0.01\t89.56%\t\t94.67%\n",
"10\t0.001\t74.75%\t\t94.67%\n",
"100\t1\t92.93%\t\t94.67%\n",
"100\t0.1\t94.28%\t\t94.67%\n",
"100\t0.01\t94.28%\t\t94.67%\n",
"100\t0.001\t88.22%\t\t94.67%\n",
"\n",
"Best Parameters: {'svc__C': 100, 'svc__gamma': 0.1}\n",
"Best Score: 94.28%\n",
"Test Accuracy of Best Model: 94.67%\n"
]
},
{
"ename": "",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n",
"\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n",
"\u001b[1;31mClick <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. \n",
"\u001b[1;31mView Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
]
}
],
"source": [
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.svm import SVC\n",
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"# Create a pipeline\n",
"pipeline = Pipeline([\n",
" ('scaler', StandardScaler()), # Standardize features\n",
" ('svc', SVC(kernel='rbf')) # Use SVC with RBF kernel\n",
"])\n",
"\n",
"# Define the parameter grid for GridSearchCV\n",
"param_grid = {\n",
" 'svc__C': [0.1, 1, 10, 100],\n",
" 'svc__gamma': [1, 0.1, 0.01, 0.001]\n",
"}\n",
"\n",
"# Create GridSearchCV object\n",
"grid_search = GridSearchCV(pipeline, param_grid, cv=3, scoring='accuracy', return_train_score=True)\n",
"\n",
"# Fit the GridSearchCV object to the training data\n",
"grid_search.fit(X_train, y_train)\n",
"\n",
"# Print all tested parameter combinations with their scores\n",
"print(\"Hasil Evaluasi Semua Kombinasi Parameter:\")\n",
"print(\"--------------------------------------------------\")\n",
"print(\"C\\tGamma\\tBest Score (CV)\\tTest Accuracy\")\n",
"print(\"--------------------------------------------------\")\n",
"\n",
"# Loop melalui semua hasil kombinasi parameter\n",
"for i in range(len(grid_search.cv_results_['params'])):\n",
" C_value = grid_search.cv_results_['params'][i]['svc__C']\n",
" gamma_value = grid_search.cv_results_['params'][i]['svc__gamma']\n",
" best_score = round(grid_search.cv_results_['mean_test_score'][i] * 100, 2) # Mean cross-validation score\n",
" best_model = grid_search.best_estimator_\n",
" test_accuracy = round(best_model.score(X_test, y_test) * 100, 2) # Evaluate on test data\n",
" \n",
" print(f\"{C_value}\\t{gamma_value}\\t{best_score}%\\t\\t{test_accuracy}%\")\n",
"\n",
"# Print the best parameters found\n",
"print(\"\\nBest Parameters:\", grid_search.best_params_)\n",
"print(f\"Best Score: {round(grid_search.best_score_*100, 2)}%\")\n",
"\n",
"# Evaluate the best model on the test data\n",
"best_model = grid_search.best_estimator_\n",
"accuracy = best_model.score(X_test, y_test)\n",
"print(f\"Test Accuracy of Best Model: {round(accuracy*100, 2)}%\")\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "THVPLC6yutt9",
"outputId": "208b4454-2793-447b-8c15-0027e66f7172"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Parameters: {'svc__C': 100, 'svc__gamma': 0.1}\n",
"Best Score: 94.28%\n",
"Test Accuracy: 94.67%\n"
]
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import joblib\n",
"from sklearn.model_selection import train_test_split, GridSearchCV\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.svm import SVC\n",
"from sklearn.pipeline import Pipeline\n",
"\n",
"df = pd.read_csv(\"train.csv\")\n",
"\n",
"df[\"PM10_PM25_ratio\"] = df[\"pm10\"] / (df[\"pm25\"] + 1)\n",
"df[\"PM10_SO2_ratio\"] = df[\"pm10\"] / (df[\"so2\"] + 1)\n",
"df[\"PM2.5_SO2_ratio\"] = df[\"pm25\"] / (df[\"so2\"] + 1)\n",
"df[\"CO_NO2_ratio\"] = df[\"co\"] / (df[\"no2\"] + 1)\n",
"df[\"CO_SO2_ratio\"] = df[\"co\"] / (df[\"so2\"] + 1)\n",
"df[\"CO_O3_ratio\"] = df[\"co\"] / (df[\"o3\"] + 1)\n",
"df[\"SO2_NO2_ratio\"] = df[\"so2\"] / (df[\"no2\"] + 1)\n",
"df[\"SO2_O3_ratio\"] = df[\"so2\"] / (df[\"o3\"] + 1)\n",
"df[\"NO2_O3_ratio\"] = df[\"no2\"] / (df[\"o3\"] + 1)\n",
"df[\"HC_CO_ratio\"] = df[\"hc\"] / (df[\"co\"] + 1)\n",
"df[\"HC_NO2_ratio\"] = df[\"hc\"] / (df[\"no2\"] + 1)\n",
"df[\"HC_SO2_ratio\"] = df[\"hc\"] / (df[\"so2\"] + 1)\n",
"df[\"HC_O3_ratio\"] = df[\"hc\"] / (df[\"o3\"] + 1)\n",
"df[\"total_pollution\"] = df[[\"pm10\", \"pm25\", \"co\", \"no2\", \"so2\", \"o3\", \"hc\"]].sum(axis=1)\n",
"\n",
"X = df[[\"pm10\", \"pm25\", \"co\", \"no2\", \"so2\", \"o3\", \"hc\",\n",
" \"PM10_PM25_ratio\", \"PM10_SO2_ratio\", \"PM2.5_SO2_ratio\",\n",
" \"CO_NO2_ratio\", \"CO_SO2_ratio\", \"CO_O3_ratio\",\n",
" \"SO2_NO2_ratio\", \"SO2_O3_ratio\", \"NO2_O3_ratio\",\n",
" \"HC_CO_ratio\", \"HC_NO2_ratio\", \"HC_SO2_ratio\", \"HC_O3_ratio\",\n",
" \"total_pollution\"]]\n",
"y = df[\"kategori\"]\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"pipeline = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('svc', SVC(kernel='rbf'))\n",
"])\n",
"\n",
"param_grid = {\n",
" 'svc__C': [0.1, 1, 10, 100],\n",
" 'svc__gamma': [1, 0.1, 0.01, 0.001]\n",
"}\n",
"\n",
"grid_search = GridSearchCV(pipeline, param_grid, cv=3, scoring='accuracy')\n",
"grid_search.fit(X_train, y_train)\n",
"\n",
"best_model = grid_search.best_estimator_\n",
"\n",
"print(\"Best Parameters:\", grid_search.best_params_)\n",
"print(f\"Best Score: {round(grid_search.best_score_ * 100, 2)}%\")\n",
"print(f\"Test Accuracy: {round(best_model.score(X_test, y_test) * 100, 2)}%\")\n",
"\n",
"joblib.dump(best_model, \"svmreat_rbf.pkl\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 702
},
"id": "tpGRFVX2zD3U",
"outputId": "4798e5f6-6709-42df-d8b1-312cd6c90e69"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxIAAAKtCAYAAACzL1jfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACNbElEQVR4nOzdeXxMZ/vH8e9MQkIiCSEipZba962WqqJorLW1drW1VcXTVltLW2tL2hRVpZRmUbWraouq2mvfGtRWWjxaYglZJATJ/P7wmJ8jwQxJJsl83s/rvF6d+9xz5ppzMo+55rrv+5gsFotFAAAAAGAHs6MDAAAAAJD1kEgAAAAAsBuJBAAAAAC7kUgAAAAAsBuJBAAAAAC7kUgAAAAAsBuJBAAAAAC7kUgAAAAAsBuJBAAAAAC7kUgAwCM6duyYnnvuOXl7e8tkMmnZsmVpevyTJ0/KZDIpPDw8TY+blTVs2FANGzZM02OePn1a7u7u2rJlS5oe90GKFSumXr16PdRz0+M8ZAerVq2Sp6enLly44OhQgGyNRAJAtvDXX3+pX79+KlGihNzd3eXl5aV69erp888/19WrV9P1tXv27KkDBw5o3LhxmjNnjmrWrJmur5eRevXqJZPJJC8vr1TP47Fjx2QymWQymTRhwgS7j3/mzBmNHj1aERERaRDtoxk7dqxq166tevXqacOGDdb39aDNWRUrVsx6Dsxms3x8fFSpUiW9+uqr2rFjxyMde/z48Y+UkDdr1kwlS5ZUUFDQI8UB4P5cHR0AADyqFStW6MUXX5Sbm5teeuklVaxYUdevX9fmzZv17rvv6uDBg5o5c2a6vPbVq1e1bds2vf/++xo4cGC6vEbRokV19epV5ciRI12O/yCurq5KSEjQTz/9pI4dOxr2zZ07V+7u7rp27dpDHfvMmTMaM2aMihUrpqpVq9r8vNWrVz/U693LhQsXNHv2bM2ePVuSVK5cOc2ZM8fQZ/jw4fL09NT777+fpq999OhRmc0P97teWp8He1WtWlVvv/22JCkuLk6HDx/W4sWLNWvWLL311luaNGnSQx13/PjxeuGFF9S2bduHjq1fv3565513NGbMGOXJk+ehjwPg3kgkAGRpJ06cUOfOnVW0aFGtW7dOhQoVsu4bMGCAjh8/rhUrVqTb698eOuHj45Nur2EymeTu7p5ux38QNzc31atXT/Pnz0+RSMybN08tW7bUd999lyGxJCQkKHfu3MqZM2eaHvfbb7+Vq6urWrduLUkqWLCgunfvbujz8ccfK3/+/Cna75ScnKzr16/bdb3c3NweLmgpzc+DvR577LEU5+OTTz5R165d9dlnn6lUqVLq37+/Q2Lr0KGDBg0apMWLF6tPnz4OiQHI7hjaBCBLCw4O1pUrVxQSEmJIIm4rWbKk3njjDevjmzdv6sMPP9QTTzwhNzc3FStWTO+9954SExMNzytWrJhatWqlzZs3q1atWnJ3d1eJEiX0zTffWPuMHj1aRYsWlSS9++67MplMKlasmKRbQ4Ju//edRo8enWI4zK+//qqnn35aPj4+8vT0VJkyZfTee+9Z999rjsS6detUv359eXh4yMfHR23atNHhw4dTfb3jx4+rV69e8vHxkbe3t3r37q2EhIR7n9i7dO3aVT///LOio6Otbbt27dKxY8fUtWvXFP0vXbqkd955R5UqVZKnp6e8vLzUvHlz7du3z9pnw4YNevLJJyVJvXv3tg6Tuf0+GzZsqIoVK2rPnj165plnlDt3but5uXtuQM+ePeXu7p7i/QcGBipv3rw6c+bMfd/fsmXLVLt2bXl6etp8TqRbSd7AgQM1d+5cVahQQW5ublq1apUkacKECXrqqafk6+urXLlyqUaNGlqyZEmKY9w9RyI8PFwmk0lbtmzR4MGDVaBAAXl4eKhdu3YpxvzffR5uD8latGiRxo0bp8KFC8vd3V2NGzfW8ePHU7z2tGnTVKJECeXKlUu1atXSb7/99sjzLnLlyqU5c+YoX758GjdunCwWi3WfLefEZDIpPj5es2fPtv5N3D4/p06d0uuvv64yZcooV65c8vX11YsvvqiTJ0+miMPPz0+VK1fWDz/88NDvBcD9kUgAyNJ++uknlShRQk899ZRN/V9++WWNHDlS1atX12effaYGDRooKChInTt3TtH3+PHjeuGFF9S0aVNNnDhRefPmVa9evXTw4EFJUvv27fXZZ59Jkrp06aI5c+Zo8uTJdsV/8OBBtWrVSomJiRo7dqwmTpyo559//oETftesWaPAwECdP39eo0eP1uDBg7V161bVq1cv1S9VHTt2VFxcnIKCgtSxY0eFh4drzJgxNsfZvn17mUwmLV261No2b948lS1bVtWrV0/R/++//9ayZcvUqlUrTZo0Se++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",
"text/plain": [
"<Figure size 800x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Predict on the training set\n",
"y_train_pred = best_model.predict(X_train)\n",
"\n",
"# Generate and plot the confusion matrix for the training data\n",
"cm_train = confusion_matrix(y_train, y_train_pred)\n",
"plt.figure(figsize=(8, 6))\n",
"sns.heatmap(cm_train, annot=True, fmt=\"d\", cmap=\"Blues\",\n",
" xticklabels=grid_search.classes_, yticklabels=grid_search.classes_)\n",
"plt.xlabel(\"Predicted\")\n",
"plt.ylabel(\"Actual\")\n",
"plt.title(\"Confusion Matrix (Training Data)\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 920
},
"id": "K355Cp8auvOq",
"outputId": "081b7126-f84a-49d2-8f8c-283b5183d0ae"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" BAIK 0.97 1.00 0.98 32\n",
" BERBAHAYA 1.00 1.00 1.00 2\n",
"SANGAT TIDAK SEHAT 1.00 0.75 0.86 8\n",
" SEDANG 1.00 0.85 0.92 13\n",
" TIDAK SEHAT 0.87 1.00 0.93 20\n",
"\n",
" accuracy 0.95 75\n",
" macro avg 0.97 0.92 0.94 75\n",
" weighted avg 0.95 0.95 0.95 75\n",
"\n"
]
},
{
"data": {
"image/png": "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4+npadE3LS1NderU0cyZM62OU7x48bs6f+HChXP8nLS0NEnSihUrdN9991ns8/DwuKs4AMBZkSgAAPKEp6engoODber74IMPau7cuQoMDJSPj0+2fUqWLKlffvlFjRo1kiRdu3ZNO3fu1IMPPpht/xo1aigrK0sbNmwwDz36pxsVjczMTHNb1apV5eHhob/++uuWlYgqVapo6dKlFm1bt26984sEACfDZGYAgN0988wzKlasmNq2bauNGzfq6NGjWr9+vV599VX9/fffkqTXXntNH3/8sZYsWaKDBw/q5Zdfvu09EMqVK6devXqpb9++WrJkifmY8+bNkySVLVtWBoNBy5cv1+nTp5WWliZvb2+99dZbeuONNxQbG6sjR47o119/1eeff67Y2FhJ0ksvvaRDhw7p7bffVkJCgmbNmqWYmJi8fosAIN+RKAAA7K5IkSKKi4vT/fffrw4dOqhKlSrq16+fLl++bK4wvPnmm+rZs6d69eql+vXry9vbW+3bt7/tcadOnapOnTrp5ZdfVkhIiJ5//nmlp6dLku677z6NHj1aQ4cOVYkSJfTKK69Ikt5//3299957ioiIUJUqVdSyZUutWLFC5cuXlyTdf//9WrhwoZYsWaJatWpp2rRp+uijj/Lw3QEA+zCYbjULDAAAAIDLoqIAAAAAwAqJAgAAAAArJAoAAAAArJAoAAAAALBCogAAAADACokCAAAAACskCgAAAACskCgAAAAAsEKiAAAAAMAKiQIAAAAAKyQKAAAAAKyQKAAAAACw8n+LHEbGyaR68AAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 800x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Predict on the test set using the best model\n",
"y_pred = best_model.predict(X_test)\n",
"\n",
"# Generate the classification report\n",
"print(classification_report(y_test, y_pred))\n",
"\n",
"# Generate and plot the confusion matrix\n",
"cm = confusion_matrix(y_test, y_pred)\n",
"plt.figure(figsize=(8, 6))\n",
"sns.heatmap(cm, annot=True, fmt=\"d\", cmap=\"Blues\",\n",
" xticklabels=grid_search.classes_, yticklabels=grid_search.classes_)\n",
"plt.xlabel(\"Predicted\")\n",
"plt.ylabel(\"Actual\")\n",
"plt.title(\"Confusion Matrix\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hbfI-qUeueyY",
"outputId": "197c8e9d-8c78-470a-b784-f338825a0cb2"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Retrained Model Test Accuracy: 94.67%\n",
"Model saved as svc_rbf.pkl\n"
]
}
],
"source": [
"# Load the dataset\n",
"df = pd.read_csv(\"train.csv\")\n",
"\n",
"# Prepare the data\n",
"X = df.drop(\"kategori\", axis=1)\n",
"y = df[\"kategori\"]\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"# Create a pipeline (same as before)\n",
"pipeline = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('svc', SVC(kernel='rbf'))\n",
"])\n",
"\n",
"# Replace parameters with best params\n",
"best_params = {'svc__C': 10, 'svc__gamma': 0.1}\n",
"param_grid = {\n",
" 'svc__C': [best_params['svc__C']],\n",
" 'svc__gamma': [best_params['svc__gamma']]\n",
"}\n",
"\n",
"\n",
"# Create and fit the model with the best parameters\n",
"retrained_model = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('svc', SVC(kernel='rbf', C=best_params['svc__C'], gamma=best_params['svc__gamma']))\n",
"])\n",
"\n",
"retrained_model.fit(X_train, y_train)\n",
"\n",
"\n",
"# Evaluate the retrained model\n",
"accuracy = retrained_model.score(X_test, y_test)\n",
"print(f\"Retrained Model Test Accuracy: {round(accuracy*100, 2)}%\")\n",
"\n",
"# Save the retrained model\n",
"joblib.dump(retrained_model, 'svc_rbf.pkl')\n",
"\n",
"print(\"Model saved as svc_rbf.pkl\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Parameters: {'svc__C': 100, 'svc__gamma': 0.1}\n",
"Retrained Model Test Accuracy: 94.67%\n",
"Best Score: 94.28%\n",
"Model saved as svc_rbf.pkl\n"
]
}
],
"source": [
"# Load the dataset\n",
"df = pd.read_csv(\"train.csv\")\n",
"\n",
"# Prepare the data\n",
"X = df.drop(\"kategori\", axis=1)\n",
"y = df[\"kategori\"]\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"# Create a pipeline (same as before)\n",
"pipeline = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('svc', SVC(kernel='rbf'))\n",
"])\n",
"\n",
"# Replace parameters with best params\n",
"best_params = {'svc__C': 100, 'svc__gamma': 0.1}\n",
"param_grid = {\n",
" 'svc__C': [0.1, 1, 10, 100],\n",
" 'svc__gamma': [1, 0.1, 0.01, 0.001]\n",
"}\n",
"\n",
"\n",
"# Create and fit the model with the best parameters\n",
"retrained_model = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('svc', SVC(kernel='rbf', C=best_params['svc__C'], gamma=best_params['svc__gamma']))\n",
"])\n",
"\n",
"retrained_model.fit(X_train, y_train)\n",
"\n",
"grid_search = GridSearchCV(pipeline, param_grid, cv=3, scoring='accuracy')\n",
"grid_search.fit(X_train, y_train)\n",
"print(\"Best Parameters:\", grid_search.best_params_)\n",
"# Evaluate the retrained model\n",
"accuracy = retrained_model.score(X_test, y_test)\n",
"print(f\"Retrained Model Test Accuracy: {round(accuracy*100, 2)}%\")\n",
"print(f\"Best Score: {round(grid_search.best_score_*100, 2)}%\")\n",
"# Save the retrained model\n",
"joblib.dump(retrained_model, 'svc_rbf.pkl')\n",
"\n",
"print(\"Model saved as svc_rbf.pkl\")"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"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.11.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}