{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Lab 2: Feature Processing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Feature standardization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `vinho verde` data set contains physico-chemical information on a number of Portuguese wines, as well as their rating by human tasters. \n", "\n", "Our goal is to use these data to automatically predict the rating of a wine, so as to assist oenologists, improve wine production, and target the taste of niche consumers.\n", "\n", "This data set has been made available on the UCI archive repository (it is one of the oldest and most well-known repository of ML problems).\n", "\n", "It is available from: http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/ (but already in your repository; we will focus on white wines here)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "data = pd.read_csv('data/winequality-white.csv', sep=\";\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas.core.frame.DataFrame" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have loaded the data in a _pandas DataFrame_ object. Let us examine what information is available:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
fixed acidityvolatile aciditycitric acidresidual sugarchloridesfree sulfur dioxidetotal sulfur dioxidedensitypHsulphatesalcoholquality
07.00.270.3620.70.04545.0170.01.00103.000.458.86
16.30.300.341.60.04914.0132.00.99403.300.499.56
28.10.280.406.90.05030.097.00.99513.260.4410.16
37.20.230.328.50.05847.0186.00.99563.190.409.96
47.20.230.328.50.05847.0186.00.99563.190.409.96
\n", "
" ], "text/plain": [ " fixed acidity volatile acidity citric acid residual sugar chlorides \\\n", "0 7.0 0.27 0.36 20.7 0.045 \n", "1 6.3 0.30 0.34 1.6 0.049 \n", "2 8.1 0.28 0.40 6.9 0.050 \n", "3 7.2 0.23 0.32 8.5 0.058 \n", "4 7.2 0.23 0.32 8.5 0.058 \n", "\n", " free sulfur dioxide total sulfur dioxide density pH sulphates \\\n", "0 45.0 170.0 1.0010 3.00 0.45 \n", "1 14.0 132.0 0.9940 3.30 0.49 \n", "2 30.0 97.0 0.9951 3.26 0.44 \n", "3 47.0 186.0 0.9956 3.19 0.40 \n", "4 47.0 186.0 0.9956 3.19 0.40 \n", "\n", " alcohol quality \n", "0 8.8 6 \n", "1 9.5 6 \n", "2 10.1 6 \n", "3 9.9 6 \n", "4 9.9 6 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.head(n=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data contains 12 columns. The first 10 (fixed acidity -- alcohol) are physico-chemical features of the wines; the last one is their rating (or quality).\n", "\n", "Let us extract from this data a numpy array that contains the design matrix X:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(4898, 11)\n" ] } ], "source": [ "X = data.values[:, :-1]\n", "print(X.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question:__ Extract from this data a one-dimensional numpy array that contains the labels y." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# TODO\n", "y = data['quality'].to_numpy()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "y = data['quality']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us now plot a histogram of the values taken by each of our features:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create a figure of size 16x12\n", "fig = plt.figure(figsize=(16, 12))\n", "\n", "for feat_idx in range(X.shape[1]):\n", " # create a subplot in the (feat_idx+1) position of a 3x4 grid\n", " ax = fig.add_subplot(3, 4, (feat_idx+1))\n", " # plot the histogram of feat_idx\n", " h = ax.hist(X[:, feat_idx], bins=50, color='steelblue', edgecolor='none')\n", " # use the name of the feature as a title for each histogram\n", " ax.set_title(data.columns[feat_idx], fontsize=14)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question:__\n", "What are the ranges of values taken by the different features? What do you think is going to happen when one computes the euclidean distance between two samples: will the `free sulfur dioxide` be accounted for in a manner similar to the `sulphates`? How is this going to affect the k-nearest-neighbor algorithm?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Answer:__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5-nearest-neighbor prediction\n", "We will now see how to use scikit-learn to split the data between a train and a test set, train a nearest neighbor regressor on the training data, and evaluate its performance on the test set." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Splitting the data" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "from sklearn import model_selection\n", "\n", "X_train, X_test, y_train, y_test = \\\n", " model_selection.train_test_split(X, y,\n", " test_size=0.3 # 30% des données dans le jeu de test\n", " )" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(3428, 11) (1470, 11) (3428,) (1470,)\n" ] } ], "source": [ "print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Creating a 5 nearest neighbor regressor" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "from sklearn import neighbors" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "model = neighbors.KNeighborsRegressor(n_neighbors=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Training the 5-NN regressor on the training data" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "KNeighborsRegressor()" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.fit(X_train, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Making predictions with the trained model" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "y_pred = model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.7928764476414278" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Compute the RMSE between the predictions and true value\n", "from sklearn import metrics\n", "np.sqrt(metrics.mean_squared_error(y_test, y_pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Feature standardization" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "from sklearn import preprocessing\n", "\n", "# Create a standardizer object and fit it to the training data.\n", "std_scale = preprocessing.StandardScaler().fit(X_train)\n", "\n", "# Apply the standardization to the training and the test data.\n", "X_train_std = std_scale.transform(X_train)\n", "X_test_std = std_scale.transform(X_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question:__ Why did we fit the standardizer (i.e. computed the mean and standard deviation for each feature) on the training set only?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Answer:__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question:__ Visualize the scaled data again to check that the standardization had the intended effect." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# TODO\n", "# create a figure of size 16x12\n", "fig = plt.figure(figsize=(16, 12))\n", "\n", "for feat_idx in range(X_train_std.shape[1]):\n", " # create a subplot in the (feat_idx+1) position of a 3x4 grid\n", " ax = fig.add_subplot(3, 4, (feat_idx+1))\n", " # plot the histogram of feat_idx\n", " h = ax.hist(X_train_std[:, feat_idx], bins=50, color='steelblue', edgecolor='none')\n", " # use the name of the feature as a title for each histogram\n", " ax.set_title(data.columns[feat_idx], fontsize=14)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Effect of the feature standardization on the model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question:__ Train a new model on the standardized data. Is it better than the one trained on non-standardized data? " ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.7113845846030713" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# TODO\n", "model_std = neighbors.KNeighborsRegressor(n_neighbors=5)\n", "model_std.fit(X_train_std, y_train)\n", "y_pred_std = model_std.predict(X_test_std)\n", "np.sqrt(metrics.mean_squared_error(y_test, y_pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Categorical features" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will work with a data set that describes mushrooms according to the shape of their cap and stalk, their odor, the type of their veil, etc. This data set also contains information on whether a mushroom is edible or not, and that is what we will try to predict." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Data are available as `data/mushrooms.csv`. Let us load them in a pandas DataFrame called `df`." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('data/mushrooms.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us look at the first few lines of df" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
classcap-shapecap-surfacecap-colorbruisesodorgill-attachmentgill-spacinggill-sizegill-color...stalk-surface-below-ringstalk-color-above-ringstalk-color-below-ringveil-typeveil-colorring-numberring-typespore-print-colorpopulationhabitat
0pxsntpfcnk...swwpwopksu
1exsytafcbk...swwpwopnng
2ebswtlfcbn...swwpwopnnm
3pxywtpfcnn...swwpwopksu
4exsgfnfwbk...swwpwoenag
\n", "

5 rows × 23 columns

\n", "
" ], "text/plain": [ " class cap-shape cap-surface cap-color bruises odor gill-attachment \\\n", "0 p x s n t p f \n", "1 e x s y t a f \n", "2 e b s w t l f \n", "3 p x y w t p f \n", "4 e x s g f n f \n", "\n", " gill-spacing gill-size gill-color ... stalk-surface-below-ring \\\n", "0 c n k ... s \n", "1 c b k ... s \n", "2 c b n ... s \n", "3 c n n ... s \n", "4 w b k ... s \n", "\n", " stalk-color-above-ring stalk-color-below-ring veil-type veil-color \\\n", "0 w w p w \n", "1 w w p w \n", "2 w w p w \n", "3 w w p w \n", "4 w w p w \n", "\n", " ring-number ring-type spore-print-color population habitat \n", "0 o p k s u \n", "1 o p n n g \n", "2 o p n n m \n", "3 o p k s u \n", "4 o e n a g \n", "\n", "[5 rows x 23 columns]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, the features are encoded as _letters_. Each letter correspond to a category . For example, for the `cap shape` feature, `b` corresponds to a bell cap, `c` to a conical cap, `f` to a flat cap, `k` to a knobbed cap, `s` to a sunken cap, and `x` to a convex cap. For more details about their meaning, you can consult [the documentation of the data set](https://archive.ics.uci.edu/ml/datasets/Mushroom)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Direct conversion to numerical attributes\n", "In order to work with this data, we need to convert the categorical attributes into numerical values. Here we will simply convert each letter to a number between 0 and the number of categories, using scikit-learn's [preprocessing.LabelEncoder](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html)." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "from sklearn import preprocessing\n", "\n", "labelencoder = preprocessing.LabelEncoder()\n", "for col in df.columns:\n", " df[col] = labelencoder.fit_transform(df[col])" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
classcap-shapecap-surfacecap-colorbruisesodorgill-attachmentgill-spacinggill-sizegill-color...stalk-surface-below-ringstalk-color-above-ringstalk-color-below-ringveil-typeveil-colorring-numberring-typespore-print-colorpopulationhabitat
01524161014...2770214235
10529101004...2770214321
20028131005...2770214323
31538161015...2770214235
40523051104...2770210301
\n", "

5 rows × 23 columns

\n", "
" ], "text/plain": [ " class cap-shape cap-surface cap-color bruises odor gill-attachment \\\n", "0 1 5 2 4 1 6 1 \n", "1 0 5 2 9 1 0 1 \n", "2 0 0 2 8 1 3 1 \n", "3 1 5 3 8 1 6 1 \n", "4 0 5 2 3 0 5 1 \n", "\n", " gill-spacing gill-size gill-color ... stalk-surface-below-ring \\\n", "0 0 1 4 ... 2 \n", "1 0 0 4 ... 2 \n", "2 0 0 5 ... 2 \n", "3 0 1 5 ... 2 \n", "4 1 0 4 ... 2 \n", "\n", " stalk-color-above-ring stalk-color-below-ring veil-type veil-color \\\n", "0 7 7 0 2 \n", "1 7 7 0 2 \n", "2 7 7 0 2 \n", "3 7 7 0 2 \n", "4 7 7 0 2 \n", "\n", " ring-number ring-type spore-print-color population habitat \n", "0 1 4 2 3 5 \n", "1 1 4 3 2 1 \n", "2 1 4 3 2 3 \n", "3 1 4 2 3 5 \n", "4 1 0 3 0 1 \n", "\n", "[5 rows x 23 columns]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### One-hot encoding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This encoding is not necessarily the best, as (for example), an algorithm that uses the Euclidean distance will consider that a convex cap (`x` converted to 5) is closer to a sunken cap (`s` converted to 4) than to a conical cap (`c` converted to 1), and the [one-hot encoding](http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing-categorical-features) is a good alternative. However, it has the drawback of increasing the number of features, and of creating correlated features." ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "# Load the data again\n", "#df = pd.read_csv('data/mushrooms.csv')\n", "\n", "ohe_encoder = preprocessing.OneHotEncoder()\n", "X = ohe_encoder.fit_transform(df[df.columns])" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<8124x119 sparse matrix of type ''\n", "\twith 186852 stored elements in Compressed Sparse Row format>" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 1., 0., ..., 0., 1., 0.],\n", " [1., 0., 0., ..., 0., 0., 0.],\n", " [1., 0., 1., ..., 0., 0., 0.],\n", " ...,\n", " [1., 0., 0., ..., 0., 0., 0.],\n", " [0., 1., 0., ..., 0., 0., 0.],\n", " [1., 0., 0., ..., 0., 0., 0.]])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.toarray()" ] }, { "cell_type": "code", "execution_count": null, "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.6.13" } }, "nbformat": 4, "nbformat_minor": 2 }