Commit 5deac1df authored by cihan.ates's avatar cihan.ates
Browse files

Update Lecture_1.ipynb

parent a83b37ed
%% Cell type:markdown id: tags:
 
# Active Session I: Classification
 
%% Cell type:markdown id: tags:
 
# Important Note
 
Lecture notes and notebooks must not be copied and/or distributed without the express permission of ITS.
 
 
 
 
%% Cell type:markdown id: tags:
 
#1. Problem Definition: Probe into the Data
# 1. Problem Definition: Probe into the Data
 
In this dataset, we will look into the relationship between airfoil design and its relationship with noise generation.
 
This NASA data set was obtained from a series of aerodynamic and acoustic tests of two and three-dimensional airfoil blade sections conducted in an anechoic wind tunnel. It comprises different size NACA 0012 airfoils at various wind tunnel speeds and angles of attack. The span of the airfoil and the observer position were the same in all of the experiments.
 
Attribute Information:
 
This problem has the following inputs:
1. Frequency, in Hertzs.
2. Angle of attack, in degrees.
3. Chord length, in meters.
4. Free-stream velocity, in meters per second.
5. Suction side displacement thickness, in meters.
 
The only output is:
6. Scaled sound pressure level, in decibels.
 
%% Cell type:markdown id: tags:
 
 
# 2. Preparing the enviroment
 
Import the Python libraries that we will need to (i) load the data, (ii) analyze it, (iii) create our model, (iv) process the results.
 
%% Cell type:code id: tags:
 
```
#Importing the necessary libraries
import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
import seaborn as sns
color = sns.color_palette()
import matplotlib as mpl
```
 
%% Cell type:code id: tags:
 
```
# Data Preparation
from sklearn import preprocessing as pp
from scipy.stats import pearsonr
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import log_loss
from sklearn.metrics import precision_recall_curve, average_precision_score
from sklearn.metrics import roc_curve, auc, roc_auc_score
from sklearn.metrics import confusion_matrix, classification_report
```
 
%% Cell type:code id: tags:
 
```
# ML Algorithms to be used
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.ensemble import RandomForestClassifier
import lightgbm as LGBMClassifier
 
#If you are working on local machine:
# pip install lightgbm
```
 
%% Cell type:markdown id: tags:
 
# 3. Pre-processing
 
%% Cell type:markdown id: tags:
 
## Loading the Data
 
We need to upload the dataset to Colab enviroment. Pandas library is a practical way to load and read the data from an url. Since the data is only given as tabulated values, we need to add the name of the features as well.
 
%% Cell type:code id: tags:
 
```
# Loading the data
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00291/airfoil_self_noise.dat'
new_names = ['frequency','angle_attack','chord_length','Free-stream_velocity','displacement_thickness','sound_pressure']
data = pd.read_csv(url, names=new_names, delimiter='\t')
data.head()
```
 
%%%% Output: execute_result
 
frequency angle_attack ... displacement_thickness sound_pressure
0 800 0.0 ... 0.002663 126.201
1 1000 0.0 ... 0.002663 125.201
2 1250 0.0 ... 0.002663 125.951
3 1600 0.0 ... 0.002663 127.591
4 2000 0.0 ... 0.002663 127.461
[5 rows x 6 columns]
 
%% Cell type:markdown id: tags:
 
## Data Exploration
Here we will look into the statistics of the data, identify any missing values or categorical features that is needed to be further process.
 
Let’s analyze our dataset first. Use dataset.head(n) to display top n data. You can change dataset.head(n) to dataset.sample(n) to display randomly picked data:
 
%% Cell type:code id: tags:
 
```
data.head(5)
```
 
%%%% Output: execute_result
 
frequency angle_attack ... displacement_thickness sound_pressure
0 800 0.0 ... 0.002663 126.201
1 1000 0.0 ... 0.002663 125.201
2 1250 0.0 ... 0.002663 125.951
3 1600 0.0 ... 0.002663 127.591
4 2000 0.0 ... 0.002663 127.461
[5 rows x 6 columns]
 
%% Cell type:code id: tags:
 
```
data.sample(5)
```
 
%%%% Output: execute_result
 
frequency angle_attack ... displacement_thickness sound_pressure
1384 1000 8.9 ... 0.010309 135.433
1015 12500 4.8 ... 0.000849 127.688
265 2000 2.0 ... 0.003135 124.612
226 4000 0.0 ... 0.002535 123.465
1042 8000 4.8 ... 0.000907 131.346
[5 rows x 6 columns]
 
%% Cell type:code id: tags:
 
```
data.info()
```
 
%%%% Output: stream
 
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1503 entries, 0 to 1502
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 frequency 1503 non-null int64
1 angle_attack 1503 non-null float64
2 chord_length 1503 non-null float64
3 Free-stream_velocity 1503 non-null float64
4 displacement_thickness 1503 non-null float64
5 sound_pressure 1503 non-null float64
dtypes: float64(5), int64(1)
memory usage: 70.6 KB
 
%% Cell type:markdown id: tags:
 
Let's look into the statistics of the data. This is usually a good starting point to have an idea obout the range of the data, its nature, as well as the missing information for different features:
 
%% Cell type:code id: tags:
 
```
data.describe()
```
 
%%%% Output: execute_result
 
frequency angle_attack ... displacement_thickness sound_pressure
count 1503.000000 1503.000000 ... 1503.000000 1503.000000
mean 2886.380572 6.782302 ... 0.011140 124.835943
std 3152.573137 5.918128 ... 0.013150 6.898657
min 200.000000 0.000000 ... 0.000401 103.380000
25% 800.000000 2.000000 ... 0.002535 120.191000
50% 1600.000000 5.400000 ... 0.004957 125.721000
75% 4000.000000 9.900000 ... 0.015576 129.995500
max 20000.000000 22.200000 ... 0.058411 140.987000
[8 rows x 6 columns]
 
%% Cell type:markdown id: tags:
 
If not defined by the user, you can also explore the features with the following command:
 
%% Cell type:code id: tags:
 
```
data.columns
```
 
%%%% Output: execute_result
 
Index(['frequency', 'angle_attack', 'chord_length', 'Free-stream_velocity',
'displacement_thickness', 'sound_pressure'],
dtype='object')
 
%% Cell type:markdown id: tags:
 
It is also possible to explore individual features:
 
%% Cell type:code id: tags:
 
```
data['sound_pressure'].median()
```
 
%%%% Output: execute_result
 
125.721
 
%% Cell type:code id: tags:
 
```
data['sound_pressure'].mean()
```
 
%%%% Output: execute_result
 
124.83594278110434
 
%% Cell type:markdown id: tags:
 
### Data Visualization
 
Another important pre-processing step is the data visualization. Histograms are suitable for a holistic view, where we can probe into the data for each attribute.
 
We can use hist from matplotlib for that purpose:
 
%% Cell type:code id: tags:
 
```
data.hist(bins=30, figsize=(15,15))
plt.show()
```
 
%%%% Output: display_data
 
![](data:image/png;base64,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)
 
%% Cell type:markdown id: tags:
 
It is always a good exercise to look into the data visually and try to see the distributions of the features.
 
%% Cell type:markdown id: tags:
 
### Identify nonnumerical values
Some ML algorithms can not handle non-numerical values (NaN: not a number) so you may need to identify the type of the data for each feature and modify it if necessary. It is also quite common that different feature values are missing for different instances / examples so you may need to decide what to do: (i) omit the instance; (ii) replace them with the mean / median / mode of the feature; (iv) substitute them with a value of your choice.
 
The following line counts the NaNs for each feature for us:
 
%% Cell type:code id: tags:
 
```
nanCounter = np.isnan(data).sum()
print(nanCounter)
```
 
%%%% Output: stream
 
frequency 0
angle_attack 0
chord_length 0
Free-stream_velocity 0
displacement_thickness 0
sound_pressure 0
dtype: int64
 
%% Cell type:markdown id: tags:
 
The data was entirely numerical and composed of numbers. We will see in the following sessions how to handle datasets including non-numerical features in a smart way!
 
It is also a good exercise to check the uniqueness of the dataset, that is, whether there exists values repeating at different instances:
 
%% Cell type:code id: tags:
 
```
distinctCounter = data.apply(lambda x: len(x.unique()))
print(distinctCounter)
```
 
%%%% Output: stream
 
frequency 21
angle_attack 27
chord_length 6
Free-stream_velocity 4
displacement_thickness 105
sound_pressure 1456
dtype: int64
 
%% Cell type:markdown id: tags:
 
As identified earlier, there are 1503 instances (experimental measurements). Here we realized that these experiments were planned as combinations of 5 input parameters, with unique values of 21x27x6x4x105.
 
### Supervised Algorithms: Preparing the Labels
 
Supervised approach requires labelled data for the training. In this dataset, the objective function is the noise levels (classification) or noise prediction (regression), depending on the question. In both cases, we need to create a feature matrix say X and and label vector Y. We will use Y to train and test our model.
 
%% Cell type:markdown id: tags:
 
### Creating the Feature Matrix and Labels
 
%% Cell type:code id: tags:
 
```
dataX = data.copy().drop(['sound_pressure'],axis=1)
dataY = data['sound_pressure'].astype(int).copy()
```
 
%% Cell type:markdown id: tags:
 
### Modifying the label vector for classification:
 
If we are interested in a classification problem, such as identifying the noise levels depending on the airfoil design, we can modify the measured noise levels by converting them into categorical values.
 
Assume that we will be performing binary classification with the following criteria:
If the noise is less than 120 dB, it is "low" and it is classified as "high" if greater than 120 dB. In this exercise, we will use '0' for 'low' and '1' as 'high'. In this scenerio, we can use Binarizer:
 
%% Cell type:code id: tags:
 
```
from sklearn.preprocessing import Binarizer
#Create an object:
transformer = Binarizer(threshold=120,copy=False)
transformer
```
 
%%%% Output: execute_result
 
Binarizer(copy=False, threshold=120)
 
%% Cell type:code id: tags:
 
```
#Transforming the data with Binarizer method:
transformer.fit_transform(dataY.values.reshape(-1, 1))
 
#Lets see how it changes:
dataY.head
```
 
%%%% Output: execute_result
 
<bound method NDFrame.head of 0 1
1 1
2 1
3 1
4 1
..
1498 0
1499 0
1500 0
1501 0
1502 0
Name: sound_pressure, Length: 1503, dtype: int64>
 
%% Cell type:code id: tags:
 
```
dataY.value_counts()
```
 
%%%% Output: execute_result
 
1 1073
0 430
Name: sound_pressure, dtype: int64
 
%% Cell type:markdown id: tags:
 
For more pre-processing options; you may check:
 
https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing
 
%% Cell type:markdown id: tags:
 
### Feature Standardization: Rescaling the Data
 
Feature engineering is an inseparable aspect of ML models. In many engineering problem, we know from our tradition that combining different features significantly simplifies the problem and help us to focus our experimental / numerical work on the correct data plane. For example, we combine characteristic length, velocity, density and viscosity as Reynolds number and "classify" the flow regime in a pipe in a quite straight-forward way. The same is true on ML algorithms. You can combine features, delete the unrelated ones and rescale the data (similar to what we do in non-dimensional analysis in engineering) to help ML algorithms to seek patterns from an unbiased perspective. In our example, number of features is already small so we do not need to perform any feature engineering. We will come back to this topic in the following weeks.
 
For the time being, lets just see how much the features are correlated. But first, we will rescale the data. It is important to remember that most ML algorithms work better if the data is normalized around zero; that it has a mean value of zero with a standard deviation of one. Let's try it ourselves:
 
%% Cell type:code id: tags:
 
```
#Rescaling the data
featuresToScale = dataX.columns
sX = pp.StandardScaler(copy=True)
dataX.loc[:,featuresToScale] = sX.fit_transform(dataX[featuresToScale])
#Looking into the statistics again:
dataX.describe()
```
 
%%%% Output: execute_result
 
frequency angle_attack ... Free-stream_velocity displacement_thickness
count 1.503000e+03 1.503000e+03 ... 1.503000e+03 1.503000e+03
mean 2.837975e-16 -3.495393e-16 ... -8.558246e-16 2.866045e-16
std 1.000333e+00 1.000333e+00 ... 1.000333e+00 1.000333e+00
min -8.524068e-01 -1.146403e+00 ... -1.230809e+00 -8.169263e-01
25% -6.620227e-01 -8.083458e-01 ... -7.233448e-01 -6.545613e-01
50% -4.081773e-01 -2.336486e-01 ... -7.233448e-01 -4.702979e-01
75% 3.533590e-01 5.269801e-01 ... 1.312935e+00 3.374462e-01
max 5.430267e+00 2.606032e+00 ... 1.312935e+00 3.595917e+00
[8 rows x 5 columns]
 
%% Cell type:markdown id: tags:
 
As you can see, mean value is fixed as zero with a standard deviation (std) of 1. Now let's try to visualize how correlated the data is by creating a correlation matrix.
 
%% Cell type:code id: tags:
 
```
correlationMatrix = pd.DataFrame(dataX).corr()
 
f = plt.figure(figsize=(12, 6))
plt.matshow(correlationMatrix, fignum=f.number)
plt.xticks(range(dataX.shape[1]), dataX.columns, fontsize=14, rotation=75)
plt.yticks(range(dataX.shape[1]), dataX.columns, fontsize=14)
cb = plt.colorbar()
cb.ax.tick_params(labelsize=14)
plt.show()
```
 
%%%% Output: display_data
 
![](data:image/png;base64,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)
 
%% Cell type:code id: tags:
 
```
#we can also simply look at the table via pandas:
correlationMatrix.style.background_gradient(cmap='viridis').set_precision(2)
```
 
%%%% Output: execute_result
 
<pandas.io.formats.style.Styler at 0x7feafc15dcc0>
 
%% Cell type:markdown id: tags:
 
What do these numbers mean?
 
When it is close to 1, it means that there is a strong positive correlation; At the other extreme; –1, it implies that there is a strong negative correlation. For more:
 
https://en.wikipedia.org/wiki/Correlation_and_dependence
 
%% Cell type:markdown id: tags:
 
## Preparing the Dataset for Model
 
We need to divide our entire dataset into fractions so that we have a training set
from which the machine learning algorithm learns. We also need another set to test the predictions of the ML algorithm. There is no golden rule here: you need to consider the size of your entire dataset. Sometimes 5% is more than enough, sometimes we need to divide 1/3 to have enough test samples.
 
In our current examples, number of cases is quite low for a ML project. Therefore, lets leave sufficient number of test cases:
 
 
 
 
%% Cell type:code id: tags:
 
```
X_train, X_test, y_train, y_test = train_test_split(dataX,
dataY, test_size=0.25,
random_state=2020, stratify=dataY)
```
 
%% Cell type:markdown id: tags:
 
Here we have frozen the randomness to make the results reproducible. Otherwise, the results would change at every run.
 
%% Cell type:markdown id: tags:
 
## Cross-Validation
Another rule of thumb is to split
the training set into a sub-training sets and a validation set before seeing its true performance on the test set (25% of the dataset reserved above). This policy is called k-fold cross-validation. The training data is divided into k fractions, trained over (k-1) fractions and tested on the k_th. Here the idea is to increase the generalization of the model as much as possible.
 
%% Cell type:code id: tags:
 
```
k_fold = StratifiedKFold(n_splits=5, shuffle=True, random_state=2020)
```
 
%% Cell type:markdown id: tags:
 
## How to calculate the performance?
In any supervised approach, we need to select a cost function to compare ML predictions with the true values (labels). The
ML algorithm will minimize the cost function by changing its fitting parameters. You should spend some time to define what could be the best cost function for my dataset and my objective.
 
In our case, we are dealing with binary classification: so lets try binary classification log loss. You may see the following links for further information:
 
https://en.wikipedia.org/wiki/Cross_entropy
 
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html
 
%% Cell type:markdown id: tags:
 
# ML 101: Logistic Regression
 
See the lecture notes for the model. Here is a review:
 
https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
 
%% Cell type:code id: tags:
 
```
# Hyperparameters:
penalty = 'l2'
C = 1.0 #regularization strength. The smaller the value, the stronger the regularization.
random_state = 2020
solver = 'liblinear' # For small datasets, it is good.
logReg = LogisticRegression(penalty=penalty, C=C,random_state=random_state, solver=solver)
```
 
%% Cell type:code id: tags:
 
```
# Model Training:
#-----------------------------------------------------------------------------
#Lists for storing scores
trainingScores = []
cvScores = []
 
#DataFrame is a 2-dimensional labeled data structure. You can think of it like a spreadsheet.
#Indexing in pandas means simply selecting particular rows and columns of data from a DataFrame.
#It is also known as Subset Selection.
predictionsBasedOnKFolds = pd.DataFrame(data=[],index=y_train.index,columns=[0,1])
model = logReg
 
#kfold.split will generate indices to split data into training and test set (cv):
for train_index, cv_index in k_fold.split(np.zeros(len(X_train)),y_train.ravel()):
 
#'iloc' can be used when the user doesn’t know the index label:
#Here we are filtering the data based on indices. Data is divided as 902/225.
X_train_fold, X_cv_fold = X_train.iloc[train_index,:], X_train.iloc[cv_index,:]
y_train_fold, y_cv_fold = y_train.iloc[train_index], y_train.iloc[cv_index]
 
#Fitting the model according to given data:
#Note that model refers to logReg.
model.fit(X_train_fold, y_train_fold)
 
#Lets check how good is the fitting. Remember we decided to use log loss.
# Log loss, aka logistic loss or cross-entropy loss.This is the loss function
# used in (multinomial) logistic regression and extensions of it such as neural networks.
 
# We will fisrt look log loss in the training dataset.
loglossTraining = log_loss(y_train_fold,model.predict_proba(X_train_fold)[:,1])
#Saving our analysis on the list:
trainingScores.append(loglossTraining)
 
#Lets see how good it is on CV dataset:
predictionsBasedOnKFolds.loc[X_cv_fold.index,:] =model.predict_proba(X_cv_fold)
loglossCV = log_loss(y_cv_fold,predictionsBasedOnKFolds.loc[X_cv_fold.index,1])
#Saving our analysis on the list:
cvScores.append(loglossCV)
 
#printing the results:
print('Training Log Loss: ', loglossTraining)
print('CV Log Loss: ', loglossCV)
 
#Lets see the overall log loss for the entire training set (1127)
loglossLogisticRegression = log_loss(y_train,predictionsBasedOnKFolds.loc[:,1])
print('Logistic Regression Log Loss: ', loglossLogisticRegression)
```
 
%%%% Output: stream
 
Training Log Loss: 0.356738871444132
CV Log Loss: 0.3908671819349346
Training Log Loss: 0.3502213540664088
CV Log Loss: 0.41923690251002477
Training Log Loss: 0.36966720091349914
CV Log Loss: 0.3416906749773056
Training Log Loss: 0.3713443836483212
CV Log Loss: 0.33109771302939867
Training Log Loss: 0.3628451865203291
CV Log Loss: 0.36564683099773154
Logistic Regression Log Loss: 0.3697705832835482
 
%% Cell type:markdown id: tags:
 
Lets review the results.
 
i) In general, what we expect is a training loss smaller than the CV loss. The reason is simple: ML algorithm learns from the training data so it should be better with the training set. CV is the data not included in the training set. In our case, we see that the training and cross-validation losses are similar for each run.