-
Book Overview & Buying
-
Table Of Contents
The Regularization Cookbook
By :
Depending on the type of data, how the features must be prepared may differ. In this recipe, we’ll cover how to prepare quantitative data, including missing data imputation and rescaling.
In the Titanic dataset, as well as any other dataset, there may be missing data. There are several ways to deal with missing data. For example, you can drop a column or a row, or impute a value. There are many imputation techniques, some of which are more or less sophisticated. scikit-learn supplies several implementations of imputers, such as SimpleImputer and KNNImputer.
As we will see in this recipe, using SimpleImputer, we can impute the missing quantitative data with the mean value.
Once the missing data has been handled, we can prepare the quantitative data by rescaling it so that all the data is at the same scale.
Several rescaling strategies exist, such as min-max scaling, robust scaling, standard scaling, and others.
In this recipe, we will use standard scaling. So, for each feature, we will subtract the mean value of this feature, and then divide it by the standard deviation of that feature:
Fortunately, scikit-learn provides a fully working implementation via StandardScaler.
We will sequentially handle missing values and rescale the data in this recipe:
SimpleImputer for missing data imputation and StandardScaler for rescaling:from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
'Pclass', 'Age', 'Fare', 'SibSp', and 'Parch' and store these features in new variables for both the train and test sets:quanti_columns = ['Pclass', 'Age', 'Fare', 'SibSp', 'Parch']
# Get the quantitative columns
X_train_quanti = X_train[quanti_columns]
X_test_quanti = X_test[quanti_columns]
# Impute missing quantitative values with mean feature value
quanti_imputer = SimpleImputer(strategy='mean')
# Fit and impute the training set
X_train_quanti = quanti_imputer.fit_transform(X_train_quanti)
# Just impute the test set
X_test_quanti = quanti_imputer.transform(X_test_quanti)
scaler object:# Instantiate the standard scaler
scaler = StandardScaler()
# Fit and transform the training set
X_train_quanti = scaler.fit_transform(X_train_quanti)
# Just transform the test set
X_test_quanti = scaler.transform(X_test_quanti)
We now have quantitative data with no missing values, fully rescaled, with no data leakage.
In this recipe, we used the simple imputer, assuming there was missing data. In practice, it is highly recommended that you look at the data first to check whether there are missing values, as well as how many. It is possible to look at the number of missing values per column with the following code snippet:
# Display the number of missing data for each column X_train[quanti_columns].isna().sum()
This will output the following:
Pclass 0 Age 146 Fare 0 SibSp 0 Parch 0
Thanks to this, we know that the Age feature has 146 missing values, while the other features have no missing data.
A few imputers are available in scikit-learn. The list is available here: https://scikit-learn.org/stable/modules/classes.html#module-sklearn.impute.
There are many ways to scale data, and you can find the methods that are available in scikit-learn here: https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing.
You might be interested in looking at this comparison of several scalers on some given data: https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html#sphx-glr-auto-examples-preprocessing-plot-all-scaling-py.