Liu/data/VOLTAGE-QUALITY-CLASSIFICAT.../Voltage Quality Classificat...

1691 lines
80 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "8d4bf69d",
"metadata": {},
"source": [
"# Voltage Quality Classification Model\n",
" The quality of power supplied to end-use equipments depends upon the quality of voltage supplied by utility. Voltage is said to have quality if it has rated value at rated frequency without any distortion from sine wave. The normal voltage quality issues are:\n",
"- Voltage Sag\n",
"- Voltage Swell\n",
"- Voltage Flicker\n",
"- Voltage Harmonics\n",
"- Voltage Interruption\n",
"\n",
"Classification of voltage quality is a must for activating corresponding controllers to mitigate the issues using compensating device. Training data is generated by using functions which simulate the above power quality issues."
]
},
{
"cell_type": "markdown",
"id": "8ba94acd",
"metadata": {},
"source": [
"# Installing the required packages"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "4f7c0ea6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: xgboost in /opt/anaconda3/lib/python3.8/site-packages (1.4.2)\r\n",
"Requirement already satisfied: scipy in /opt/anaconda3/lib/python3.8/site-packages (from xgboost) (1.6.2)\r\n",
"Requirement already satisfied: numpy in /opt/anaconda3/lib/python3.8/site-packages (from xgboost) (1.20.1)\r\n"
]
}
],
"source": [
"!pip install xgboost"
]
},
{
"cell_type": "markdown",
"id": "18fc265e",
"metadata": {},
"source": [
"# Importing the required libraries"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "c8212aea",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sn\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib import rcParams\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.svm import SVC\n",
"from sklearn.metrics import classification_report, confusion_matrix, accuracy_score\n",
"from xgboost import XGBClassifier\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"%matplotlib inline\n",
"\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "markdown",
"id": "0cf4bd32",
"metadata": {},
"source": [
"# Loading the data into the dataframe"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "be3e6804",
"metadata": {},
"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>Sample</th>\n",
" <th>Voltage</th>\n",
" <th>Problem</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>56.46</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>111.20</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>162.57</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>209.00</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>249.09</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sample Voltage Problem\n",
"0 1 56.46 Normal\n",
"1 2 111.20 Normal\n",
"2 3 162.57 Normal\n",
"3 4 209.00 Normal\n",
"4 5 249.09 Normal"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = pd.read_csv(\"Voltage Quality.csv\")\n",
"test = pd.read_csv(\"Voltage Quality Test.csv\")\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "959d88dc",
"metadata": {},
"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>Sample</th>\n",
" <th>Voltage</th>\n",
" <th>Problem</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>56.46</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>111.20</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>162.57</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>209.00</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>249.09</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sample Voltage Problem\n",
"0 1 56.46 Normal\n",
"1 2 111.20 Normal\n",
"2 3 162.57 Normal\n",
"3 4 209.00 Normal\n",
"4 5 249.09 Normal"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test.head()"
]
},
{
"cell_type": "markdown",
"id": "865fe385",
"metadata": {},
"source": [
"# Total number of rows and columns"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "34b1b141",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3366, 3)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.shape # 3366 rows and 3 columns"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "c6fcc035",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1020, 3)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test.shape"
]
},
{
"cell_type": "markdown",
"id": "91147657",
"metadata": {},
"source": [
"# Checking the type of data"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "a2612df2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 3366 entries, 0 to 3365\n",
"Data columns (total 3 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Sample 3366 non-null int64 \n",
" 1 Voltage 3366 non-null float64\n",
" 2 Problem 3366 non-null object \n",
"dtypes: float64(1), int64(1), object(1)\n",
"memory usage: 79.0+ KB\n"
]
}
],
"source": [
"data.info()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "4bda0fc9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 1020 entries, 0 to 1019\n",
"Data columns (total 3 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Sample 1020 non-null int64 \n",
" 1 Voltage 1020 non-null float64\n",
" 2 Problem 1020 non-null object \n",
"dtypes: float64(1), int64(1), object(1)\n",
"memory usage: 24.0+ KB\n"
]
}
],
"source": [
"test.info()"
]
},
{
"cell_type": "markdown",
"id": "593b3e7c",
"metadata": {},
"source": [
"# Checking for missing values"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "a62ca453",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Sample 0\n",
"Voltage 0\n",
"Problem 0\n",
"dtype: int64"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.isnull().sum() # No missing values"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "ddf6406b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Sample 0\n",
"Voltage 0\n",
"Problem 0\n",
"dtype: int64"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test.isnull().sum()"
]
},
{
"cell_type": "markdown",
"id": "451f6cda",
"metadata": {},
"source": [
"# Checking for duplicates"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "48f717bc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"510"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.duplicated().sum() # 510 duplicates"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "f1aa7d57",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"136"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test.duplicated().sum()"
]
},
{
"cell_type": "markdown",
"id": "2f7bc812",
"metadata": {},
"source": [
"# Finding the unique values in problem column"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "66c66225",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Normal', 'Sag', 'Swell', 'Flicker', 'Interruption', 'Harmonics'],\n",
" dtype=object)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.Problem.unique() # 6 unique values"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "e0974cd2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Normal', 'Sag', 'Swell', 'Flicker', 'Interruption', 'Harmonics'],\n",
" dtype=object)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test.Problem.unique()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "99109e7f",
"metadata": {},
"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>Sample</th>\n",
" <th>Voltage</th>\n",
" <th>Problem</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>56.46</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>111.20</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>162.57</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>209.00</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>249.09</td>\n",
" <td>Normal</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sample Voltage Problem\n",
"0 1 56.46 Normal\n",
"1 2 111.20 Normal\n",
"2 3 162.57 Normal\n",
"3 4 209.00 Normal\n",
"4 5 249.09 Normal"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "markdown",
"id": "1410da43",
"metadata": {},
"source": [
"# Analysing statistical data"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "d35d8713",
"metadata": {},
"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>Sample</th>\n",
" <th>Voltage</th>\n",
" <th>Problem</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>3366.000000</td>\n",
" <td>3366.000000</td>\n",
" <td>3366</td>\n",
" </tr>\n",
" <tr>\n",
" <th>unique</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>top</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Harmonics</td>\n",
" </tr>\n",
" <tr>\n",
" <th>freq</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>578</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>17.500000</td>\n",
" <td>0.000226</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>9.812166</td>\n",
" <td>229.620084</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.000000</td>\n",
" <td>-585.480000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>9.000000</td>\n",
" <td>-208.957500</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>17.500000</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>26.000000</td>\n",
" <td>209.255000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>34.000000</td>\n",
" <td>585.480000</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sample Voltage Problem\n",
"count 3366.000000 3366.000000 3366\n",
"unique NaN NaN 6\n",
"top NaN NaN Harmonics\n",
"freq NaN NaN 578\n",
"mean 17.500000 0.000226 NaN\n",
"std 9.812166 229.620084 NaN\n",
"min 1.000000 -585.480000 NaN\n",
"25% 9.000000 -208.957500 NaN\n",
"50% 17.500000 0.000000 NaN\n",
"75% 26.000000 209.255000 NaN\n",
"max 34.000000 585.480000 NaN"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.describe(include=\"all\")"
]
},
{
"cell_type": "markdown",
"id": "553a108e",
"metadata": {},
"source": [
"# Finding outliers"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "51229178",
"metadata": {},
"outputs": [],
"source": [
"# Function to find the outliers\n",
"def findoutliers(column):\n",
" outliers=[]\n",
" Q1=column.quantile(.25)\n",
" Q3=column.quantile(.75)\n",
" IQR=Q3-Q1\n",
" lower_limit=Q1-(1.5*IQR)\n",
" upper_limit=Q3+(1.5*IQR)\n",
" for out1 in column:\n",
" if out1>upper_limit or out1 <lower_limit:\n",
" outliers.append(out1)\n",
" \n",
" return np.array(outliers) "
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "619f5bc4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(findoutliers(data.Voltage)) # Non of the rows have outliers"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "43cfccaa",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(findoutliers(data.Sample)) # Non of the rows have outliers"
]
},
{
"cell_type": "markdown",
"id": "5b9013f7",
"metadata": {},
"source": [
"# Data visualisation"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "f9b1a6f8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Distribution plot of Voltage')"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 504x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Voltage\n",
"fix, (ax1,ax2) =plt.subplots(1,2,figsize=(7,5))\n",
"sn.boxplot(data.Voltage, orient='v',ax=ax1)\n",
"ax1.set_ylabel=data.Voltage.name\n",
"ax1.set_title('Box plot of {}'.format(data.Voltage.name))\n",
"sn.distplot(data.Voltage,ax=ax2) \n",
"ax2.set_title('Distribution plot of {}'.format(data.Voltage.name))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "784eada8",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Harmonics 578\n",
"Swell 578\n",
"Sag 578\n",
"Normal 578\n",
"Flicker 544\n",
"Interruption 510\n",
"Name: Problem, dtype: int64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Problem\n",
"data.Problem.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "012d7672",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<seaborn.axisgrid.FacetGrid at 0x7ffee1309b50>"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1440x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pl = sn.factorplot('Problem',data=data, aspect=4,kind='count')\n",
"pl.set_xticklabels()"
]
},
{
"cell_type": "markdown",
"id": "07cb4c79",
"metadata": {},
"source": [
"# Identifying the independent and dependent variables"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "d18b49b6",
"metadata": {},
"outputs": [],
"source": [
"X = data.iloc[:,:-1] # Independent variable\n",
"y = data.Problem # Dependent variable"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "a22d8277",
"metadata": {},
"outputs": [],
"source": [
"x_test = test.iloc[:,:-1]\n",
"y_test = test.Problem "
]
},
{
"cell_type": "markdown",
"id": "57dfd617",
"metadata": {},
"source": [
"# Decision Tree"
]
},
{
"cell_type": "markdown",
"id": "50e0afdc",
"metadata": {},
"source": [
"# Defining the model"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "56e08b15",
"metadata": {},
"outputs": [],
"source": [
"model_dt = DecisionTreeClassifier()"
]
},
{
"cell_type": "markdown",
"id": "0626248b",
"metadata": {},
"source": [
"# Training the model"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "91e5d0f2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DecisionTreeClassifier()"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_dt.fit(X,y)"
]
},
{
"cell_type": "markdown",
"id": "7a358b81",
"metadata": {},
"source": [
"# Testing the model"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "5ef648e8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.95"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_predict_dt = model_dt.predict(x_test)\n",
"as_dt = accuracy_score(y_test,y_predict_dt)\n",
"as_dt"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "894932ae",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Flicker 0.92 1.00 0.96 170\n",
" Harmonics 0.91 0.85 0.88 170\n",
"Interruption 1.00 1.00 1.00 170\n",
" Normal 0.95 1.00 0.97 170\n",
" Sag 0.98 0.92 0.95 170\n",
" Swell 0.95 0.92 0.93 170\n",
"\n",
" accuracy 0.95 1020\n",
" macro avg 0.95 0.95 0.95 1020\n",
"weighted avg 0.95 0.95 0.95 1020\n",
"\n"
]
}
],
"source": [
"print(classification_report(y_test,y_predict_dt))"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "d9a53648",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[170, 0, 0, 0, 0, 0],\n",
" [ 7, 145, 0, 5, 4, 9],\n",
" [ 0, 0, 170, 0, 0, 0],\n",
" [ 0, 0, 0, 170, 0, 0],\n",
" [ 3, 10, 0, 0, 157, 0],\n",
" [ 4, 5, 0, 4, 0, 157]])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"confusion_matrix(y_test,y_predict_dt)"
]
},
{
"cell_type": "markdown",
"id": "03be07e5",
"metadata": {},
"source": [
"# XGBoost"
]
},
{
"cell_type": "markdown",
"id": "10b72622",
"metadata": {},
"source": [
"# Defining the model"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "d9b1d0d6",
"metadata": {},
"outputs": [],
"source": [
"model_xgb = XGBClassifier(n_estimators=300)"
]
},
{
"cell_type": "markdown",
"id": "473fe685",
"metadata": {},
"source": [
"# Training the model"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "10d8cbdc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[21:26:24] WARNING: /opt/concourse/worker/volumes/live/7a2b9f41-3287-451b-6691-43e9a6c0910f/volume/xgboost-split_1619728204606/work/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
]
},
{
"data": {
"text/plain": [
"XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
" colsample_bynode=1, colsample_bytree=1, gamma=0, gpu_id=-1,\n",
" importance_type='gain', interaction_constraints='',\n",
" learning_rate=0.300000012, max_delta_step=0, max_depth=6,\n",
" min_child_weight=1, missing=nan, monotone_constraints='()',\n",
" n_estimators=300, n_jobs=16, num_parallel_tree=1,\n",
" objective='multi:softprob', random_state=0, reg_alpha=0,\n",
" reg_lambda=1, scale_pos_weight=None, subsample=1,\n",
" tree_method='exact', validate_parameters=1, verbosity=None)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_xgb.fit(X,y)"
]
},
{
"cell_type": "markdown",
"id": "8ffd720a",
"metadata": {},
"source": [
"# Testing the model"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "ab0a0c92",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.95"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_predict_xgb = model_dt.predict(x_test)\n",
"as_xgb = accuracy_score(y_test,y_predict_xgb)\n",
"as_xgb"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "f98f8111",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Flicker 0.92 1.00 0.96 170\n",
" Harmonics 0.91 0.85 0.88 170\n",
"Interruption 1.00 1.00 1.00 170\n",
" Normal 0.95 1.00 0.97 170\n",
" Sag 0.98 0.92 0.95 170\n",
" Swell 0.95 0.92 0.93 170\n",
"\n",
" accuracy 0.95 1020\n",
" macro avg 0.95 0.95 0.95 1020\n",
"weighted avg 0.95 0.95 0.95 1020\n",
"\n"
]
}
],
"source": [
"print(classification_report(y_test,y_predict_xgb))"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "ebdecc0c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[170, 0, 0, 0, 0, 0],\n",
" [ 7, 145, 0, 5, 4, 9],\n",
" [ 0, 0, 170, 0, 0, 0],\n",
" [ 0, 0, 0, 170, 0, 0],\n",
" [ 3, 10, 0, 0, 157, 0],\n",
" [ 4, 5, 0, 4, 0, 157]])"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"confusion_matrix(y_test,y_predict_xgb)"
]
},
{
"cell_type": "markdown",
"id": "f5dc8e32",
"metadata": {},
"source": [
"# Random Forest"
]
},
{
"cell_type": "markdown",
"id": "d8d6a4f0",
"metadata": {},
"source": [
"# Defining the model"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "8a51ef49",
"metadata": {},
"outputs": [],
"source": [
"model_rf = RandomForestClassifier()"
]
},
{
"cell_type": "markdown",
"id": "11bf5e15",
"metadata": {},
"source": [
"# Training the model"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "8c568b29",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"RandomForestClassifier()"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_rf.fit(X,y)"
]
},
{
"cell_type": "markdown",
"id": "bb844013",
"metadata": {},
"source": [
"# Testing the model"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "654580cb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9774509803921568"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_predict_rf = model_rf.predict(x_test)\n",
"as_rf = accuracy_score(y_test,y_predict_rf)\n",
"as_rf"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "afa6cdb1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Flicker 0.97 1.00 0.99 170\n",
" Harmonics 0.94 0.92 0.93 170\n",
"Interruption 1.00 1.00 1.00 170\n",
" Normal 1.00 1.00 1.00 170\n",
" Sag 0.98 0.96 0.97 170\n",
" Swell 0.97 0.98 0.97 170\n",
"\n",
" accuracy 0.98 1020\n",
" macro avg 0.98 0.98 0.98 1020\n",
"weighted avg 0.98 0.98 0.98 1020\n",
"\n"
]
}
],
"source": [
"print(classification_report(y_test,y_predict_rf))"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "cba6c72b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[170, 0, 0, 0, 0, 0],\n",
" [ 5, 157, 0, 0, 3, 5],\n",
" [ 0, 0, 170, 0, 0, 0],\n",
" [ 0, 0, 0, 170, 0, 0],\n",
" [ 0, 6, 0, 0, 164, 0],\n",
" [ 0, 4, 0, 0, 0, 166]])"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"confusion_matrix(y_test,y_predict_rf)"
]
},
{
"cell_type": "markdown",
"id": "80d38c0b",
"metadata": {},
"source": [
"# Model Evaluation"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "aa4afe29",
"metadata": {},
"outputs": [],
"source": [
"Accuracy_Score = [as_dt,as_rf,as_xgb]\n",
"Models = ['Decision Tree', 'Random Forest','XG Boost']"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "bae685ee",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sn.barplot(Accuracy_Score, Models, color=\"r\")\n",
"plt.xlabel('Accuracy Score')\n",
"plt.title('Accuracy Score')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "e59d07ca",
"metadata": {},
"source": [
"Random Forest seems to have the highest accuracy score hence we go ahead with Random Forest algorithm."
]
},
{
"cell_type": "markdown",
"id": "f20c8195",
"metadata": {},
"source": [
"# Hyperparameter (using grid search)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "e513bf46",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 5 folds for each of 120 candidates, totalling 600 fits\n"
]
},
{
"data": {
"text/plain": [
"GridSearchCV(cv=5, estimator=RandomForestClassifier(),\n",
" param_grid={'max_depth': [10, 15, 14, 13, 12],\n",
" 'n_estimators': [150, 160, 170, 180, 190, 200],\n",
" 'random_state': [4, 5, 6, 7]},\n",
" verbose=1)"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"parameters = {'max_depth':[10,15,14,13,12],\n",
" 'random_state': [4,5,6,7],\n",
" 'n_estimators':[150,160,170,180,190,200]}\n",
"\n",
"grid = GridSearchCV(model_rf,parameters,cv=5,verbose=1)\n",
"grid.fit(X,y)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "10a4aca4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8773607700142415"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grid.best_score_"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "94bb569e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'max_depth': 13, 'n_estimators': 190, 'random_state': 5}"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grid.best_params_"
]
},
{
"cell_type": "markdown",
"id": "71b111fc",
"metadata": {},
"source": [
"# Training Random Forest with best parameters"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "0ee81152",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"RandomForestClassifier(max_depth=13, n_estimators=190, random_state=5)"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_rf = RandomForestClassifier(n_estimators=190,max_depth=13,random_state=5)\n",
"model_rf.fit(X,y)"
]
},
{
"cell_type": "markdown",
"id": "77dd9b12",
"metadata": {},
"source": [
"# Testing Random Forest with best parameters"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "ed03903a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9892156862745098"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_predict = model_rf.predict(x_test)\n",
"accuracy_score(y_test,y_predict)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "96b24b5a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" Flicker 1.00 1.00 1.00 170\n",
" Harmonics 0.94 1.00 0.97 170\n",
"Interruption 1.00 1.00 1.00 170\n",
" Normal 1.00 1.00 1.00 170\n",
" Sag 1.00 0.96 0.98 170\n",
" Swell 1.00 0.98 0.99 170\n",
"\n",
" accuracy 0.99 1020\n",
" macro avg 0.99 0.99 0.99 1020\n",
"weighted avg 0.99 0.99 0.99 1020\n",
"\n"
]
}
],
"source": [
"print(classification_report(y_test,y_predict))"
]
},
{
"cell_type": "code",
"execution_count": 53,
"id": "9b77ef9f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[170, 0, 0, 0, 0, 0],\n",
" [ 0, 170, 0, 0, 0, 0],\n",
" [ 0, 0, 170, 0, 0, 0],\n",
" [ 0, 0, 0, 170, 0, 0],\n",
" [ 0, 7, 0, 0, 163, 0],\n",
" [ 0, 4, 0, 0, 0, 166]])"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"confusion_matrix(y_test,y_predict)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "596a373a",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}