{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"(sup_reg_ex: develop-2)=\n",
"# Regression Model Development (part 2)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"#Note: we only repeat this step from before, because this is a new .ipyb page.\n",
"#it only needs to be executed once per file.\n",
"#We'll import libraries as needed, but when submitting, having them all at the top is the best practice\n",
"import pandas as pd\n",
"\n",
"# Reloading the dataset\n",
"url = \"https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv\"\n",
"df = pd.read_csv(url) #read CSV into Python as a dataframe\n",
"\n",
"column_names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'type']\n",
"df = pd.read_csv(url, names = column_names) #read CSV into Python as a dataframe\n",
"\n",
"#Choosing sepal-length as the independent variable. \n",
"X = df.drop(columns=['sepal-length']) #indpendent variables\n",
"y = df[['sepal-length']].copy() #dependent variables"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Processing Categorical Data (the right way)\n",
"\n",
"In the previous section, we avoided the additional complexity of processing categorical data by simply removing it. While this sped things along, it also dropped potentially valuable insight from our analysis. Now that the code is working, we'll rebuild our models using that categorical data -the `type` feature."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
sepal-length
\n",
"
sepal-width
\n",
"
petal-length
\n",
"
petal-width
\n",
"
type
\n",
"
\n",
" \n",
" \n",
"
\n",
"
38
\n",
"
4.400000
\n",
"
3.000000
\n",
"
1.300000
\n",
"
0.200000
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
115
\n",
"
6.400000
\n",
"
3.200000
\n",
"
5.300000
\n",
"
2.300000
\n",
"
Iris-virginica
\n",
"
\n",
"
\n",
"
36
\n",
"
5.500000
\n",
"
3.500000
\n",
"
1.300000
\n",
"
0.200000
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
122
\n",
"
7.700000
\n",
"
2.800000
\n",
"
6.700000
\n",
"
2.000000
\n",
"
Iris-virginica
\n",
"
\n",
"
\n",
"
21
\n",
"
5.100000
\n",
"
3.700000
\n",
"
1.500000
\n",
"
0.400000
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
7
\n",
"
5.000000
\n",
"
3.400000
\n",
"
1.500000
\n",
"
0.200000
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
89
\n",
"
5.500000
\n",
"
2.500000
\n",
"
4.000000
\n",
"
1.300000
\n",
"
Iris-versicolor
\n",
"
\n",
"
\n",
"
48
\n",
"
5.300000
\n",
"
3.700000
\n",
"
1.500000
\n",
"
0.200000
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
51
\n",
"
6.400000
\n",
"
3.200000
\n",
"
4.500000
\n",
"
1.500000
\n",
"
Iris-versicolor
\n",
"
\n",
"
\n",
"
127
\n",
"
6.100000
\n",
"
3.000000
\n",
"
4.900000
\n",
"
1.800000
\n",
"
Iris-virginica
\n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample = df.sample(n=10, random_state = 152)\n",
"# df_sample_highlight = pd.concat([df_sample.iloc[:5,:], df_sample.iloc[-5:,:]]).style.format().set_properties(subset=['type'], **{'background-color': 'yellow'})\n",
"\n",
"# function definition\n",
"def highlight_cols(s):\n",
" color = 'null'\n",
" if s == 'Iris-virginica': color = 'limegreen'\n",
" elif s == 'Iris-setosa': color = 'lightblue'\n",
" elif s == 'Iris-versicolor': color = 'orange'\n",
" # color = 'red' if s == 'Iris-virginica' or 'blue' if s == 'Iris-setosa'\n",
" return 'background-color: % s' % color\n",
" \n",
"# highlighting the cells\n",
"df_sample.style.applymap(highlight_cols)\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"We have three mutually exclusive flower types, equally distributed, in this feature:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"tags": [
"remove-output"
]
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.groupby('type').size().plot(kind='pie',colors = ['lightblue', 'orange', 'limegreen']);\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt \n",
"from IPython.display import display, HTML\n",
"import os\n",
"\n",
"def plot_with_alt_text(alt_text =''):\n",
" i = 0 #filename counter\n",
" outputName = 'output_plot'+str(i)+'.png'\n",
" match = True\n",
" while(match == True):\n",
" if os.path.isfile(outputName):\n",
" i = i+1\n",
" outputName = 'output_plot'+str(i)+'.png'\n",
" else: match = False\n",
" plt.savefig(outputName)\n",
" plt.savefig('../../_build/html/task2_c/example_sup_class/'+outputName)\n",
" display(HTML(f''), clear = True)\n",
" plt.close()\n",
"\n",
"df.groupby('type').size().plot(kind='pie',colors = ['lightblue', 'orange', 'limegreen']);\n",
"plot_with_alt_text('A piechart is shown. The graph is split into three equal groups \\\n",
" + Orange = Iris-versicolot, green = Iris-virginica, and blue = Iris-setosa.')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Recall, a coding [error was returned](sup_reg_ex: develop: train) after inputting this data directly into `linear_reg_model.fit`. This occurred because the algorithm did not how to process categorical independent variables. This isn't a problem when using dependent categorical variables for classification models as in our [classification example](sup_class_ex:develop). Those algorithms are written to expect dependent categorical variables -as they always classify categories. \n",
"\n",
"But algorithms like numbers and there are many instances when ML models can only interpret numerical data. Furthermore, how categories should be represented requires an understanding of the data. Something the algorithm doesn't have. Thus *feature encoding*, processing data into numerical form, is an essential data analytical skill. To do this properly you should understand your data before preceding. \n",
"\n",
"For example, we could simply re-label the types as follows:\n",
"\n",
"$$ \n",
" \\text{Iris-setosa} \\rightarrow 1 \\\\\n",
" \\text{Iris-versicolor} \\rightarrow 2 \\\\\n",
" \\text{Iris-virginica} \\rightarrow 3 \\\\\n",
"$$\n",
"\n",
" \n",
"and hand this off to the algorithm. While this would fix the coding error, any mathematical interpretation of this re-labeling would be meaningless, e.g., `Iris-setosa` is not twice as much as `Iris-versicolor`, nor does `setosa` + `versicolor` = `virginica` -the type is just a name. We call this type of categorical data *nominal.* Categories with an inherent order, e.g., grades, pay grades, bronze-silver-gold, etc., are called *ordinal.* But that doesn't apply here either. A flower either is an `Iris-setosa` OR it isn't. Each type is similarly binary so we can interpret *each unique type as a unique feature*, with a 1 or 0, indicating whether the category applies or not.\n",
"\n",
"Most machine learning libraries are equipped with built-in preprocessing functions; see the available options in the docs: [sklearn.preprocessing](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing). For simplicity, we'll start with Pandas' built-in [get_dummies](https://pandas.pydata.org/docs/reference/api/pandas.get_dummies.html). However, it will often be best to use functions specifically written for your model's library, such as sklearn's [OneHotEncoder](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder). "
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"after_pd_dummy = pd.get_dummies(df_sample)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
"
Before
\n",
" \n",
"
\n",
"
\n",
"
type
\n",
"
\n",
" \n",
" \n",
"
\n",
"
38
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
115
\n",
"
Iris-virginica
\n",
"
\n",
"
\n",
"
36
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
122
\n",
"
Iris-virginica
\n",
"
\n",
"
\n",
"
21
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
7
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
89
\n",
"
Iris-versicolor
\n",
"
\n",
"
\n",
"
48
\n",
"
Iris-setosa
\n",
"
\n",
"
\n",
"
51
\n",
"
Iris-versicolor
\n",
"
\n",
"
\n",
"
127
\n",
"
Iris-virginica
\n",
"
\n",
" \n",
"
\n",
" \n",
"
\n",
"
After get_dummy
\n",
" \n",
"
\n",
"
\n",
"
type_Iris-setosa
\n",
"
type_Iris-versicolor
\n",
"
type_Iris-virginica
\n",
"
\n",
" \n",
" \n",
"
\n",
"
38
\n",
"
1
\n",
"
0
\n",
"
0
\n",
"
\n",
"
\n",
"
115
\n",
"
0
\n",
"
0
\n",
"
1
\n",
"
\n",
"
\n",
"
36
\n",
"
1
\n",
"
0
\n",
"
0
\n",
"
\n",
"
\n",
"
122
\n",
"
0
\n",
"
0
\n",
"
1
\n",
"
\n",
"
\n",
"
21
\n",
"
1
\n",
"
0
\n",
"
0
\n",
"
\n",
"
\n",
"
7
\n",
"
1
\n",
"
0
\n",
"
0
\n",
"
\n",
"
\n",
"
89
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
\n",
"
\n",
"
48
\n",
"
1
\n",
"
0
\n",
"
0
\n",
"
\n",
"
\n",
"
51
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
\n",
"
\n",
"
127
\n",
"
0
\n",
"
0
\n",
"
1
\n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#highlight values according to column names and values. \n",
"def highlight_cols_dummy(col):\n",
" if col.name == 'type_Iris-setosa':\n",
" return ['background-color: lightblue' if c == 1 else '' for c in col.values]\n",
" elif col.name == 'type_Iris-versicolor':\n",
" return ['background-color: orange' if c == 1 else '' for c in col.values]\n",
" elif col.name == 'type_Iris-virginica':\n",
" return ['background-color: lightgreen' if c == 1 else '' for c in col.values]\n",
" else:\n",
" return ['background-color: null' for c in col.values]\n",
"\n",
"# #Nice displays are nice but not required. \n",
"from IPython.display import display_html, HTML\n",
"before_styler = df_sample[['type']].style.set_table_attributes(\"style='display:inline'\").set_caption('Before').applymap(highlight_cols).format(precision = 1)\n",
"after_styler = after_pd_dummy[['type_Iris-setosa','type_Iris-versicolor','type_Iris-virginica']].style.set_table_attributes(\"style='display:inline'\").set_caption('After get_dummy').apply(highlight_cols_dummy).format(precision = 1)\n",
"space = \"\\xa0\" * 10 #space between columns\n",
"# arrow = \" ⇨ \"\n",
"# arrow = ⇨\n",
"\n",
"arrow = '
\\\n",
"
\\\n",
"
⇨
\\\n",
"
'\n",
"\n",
"# df_sample[['type']]\n",
"# displays dataframes side by side\n",
"display_html(before_styler._repr_html_() + space + after_styler._repr_html_(), raw=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This process is called [vectorization](https://neptune.ai/blog/vectorization-techniques-in-nlp-guide#:~:text=In%20Machine%20Learning%2C%20vectorization%20is%20a%20step%20in,train%20on%2C%20by%20converting%20text%20to%20numerical%20vectors). Now we can include `type` in the training and testing of a model: "
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MSE using types is :0.12921261168601364\n"
]
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"from sklearn.linear_model import LinearRegression \n",
"from sklearn.metrics import mean_squared_error\n",
"\n",
"X = pd.get_dummies(X)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.333, random_state=41)\n",
"linear_reg_model_types = LinearRegression()\n",
"linear_reg_model_types.fit(X_train,y_train)\n",
"y_pred = linear_reg_model_types.predict(X_test)\n",
"\n",
"sme = mean_squared_error(y_test, y_pred)\n",
"print('MSE using types is :' + str(sme))"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"When including the flower types, our linear model has a mean squared error of $\\approx 0.129$. Recall from the previous section without the flower types, we had a MSE of abot $0.123$.\n",
"\n",
"So did it get worse? No. Our data changed and you can't simply compare MSE's from different cases. Converting `types` to numerical features, added three dimensions to the previous example. Moving from three to a *six-*dimensional space. Consider the change from just two to three dimensions, e.g., $2^{2}=4$ to $2^{3}=8$. Adding dimensions can radically increase the volume of space making the available data relatively sparse -what's known as the [Curse of Dimensionality](https://en.wikipedia.org/wiki/Curse_of_dimensionality). -However, that's not the full story here. While, both `petal-length` and `petal-width` appear positively correlated with `sepal-length`for `versicolor` and `virginica` it does *not* for `setosa` (blue below), "
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"tags": [
"remove-output"
]
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"\n",
"#correlogram\n",
"sns.pairplot(df,x_vars = ['petal-length','petal-width'], y_vars=['sepal-length'], hue='type');"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt \n",
"from IPython.display import display, HTML\n",
"import os\n",
"\n",
"#This code helps support alt text for student accessibility.\n",
"#This section and uses of 'plot_with_alt' are intended only for publishing to the webpage.\n",
"#Including alt text is good practice but not required for Task 2. \n",
"\n",
"# A function to support adding alt text to Python-generated images.\n",
"# Pandas, matplotlib, and others don't yet natively support alt ext. \n",
" \n",
"def plot_with_alt_text(alt_text =''):\n",
" i = 0 #filename counter\n",
" outputName = 'output_plot'+str(i)+'.png'\n",
" match = True\n",
" while(match == True):\n",
" if os.path.isfile(outputName):\n",
" i = i+1\n",
" outputName = 'output_plot'+str(i)+'.png'\n",
" else: match = False\n",
" plt.savefig(outputName)\n",
" plt.savefig('../../_build/html/task2_c/example_sup_reg/'+outputName)\n",
" display(HTML(f''))\n",
" plt.close()\n",
"\n",
"sns.pairplot(df,x_vars = ['petal-length','petal-width'], y_vars=['sepal-length'], hue='type'); \n",
"plot_with_alt_text('Two scatterplots are shown side by side. The y-axis for both is sepal-length. \\\n",
" The x-axis is petal-length and petal-length for the left and right plot, respectively. \\\n",
" Both plots similarly show positive linear correlations for the color-coded Iris-versicolor and Iris virginica data points. \\\n",
" The Iris-setosa data points are grouped in the lower-left quadrant of both plots with little linear correlation.')\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"The drop in accuracy is in part a limitation of our simple linear model trying to make use of a feature pulling the model in the wrong direction. Making the most out of your data involves a mix of understanding the data and the applied algorithm(s) (which don't understand anything). Using three different linear models yields better results:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"MSE of type_Iris-setosa is :0.06604867484155268\n",
"MSE of type_Iris-versicolor is :0.09862408497975977\n",
"MSE of type_Iris-virginica is :0.0802189108860733\n"
]
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"from sklearn.linear_model import LinearRegression \n",
"from sklearn.metrics import mean_squared_error\n",
"\n",
"\n",
"df_dummy = pd.get_dummies(df)\n",
"df_dummy\n",
"df_s = df_dummy.loc[df_dummy['type_Iris-setosa'] == 1].drop(columns=['type_Iris-versicolor', 'type_Iris-virginica'])\n",
"df_v = df_dummy.loc[df_dummy['type_Iris-versicolor'] == 1].drop(columns=['type_Iris-setosa', 'type_Iris-virginica'])\n",
"df_g = df_dummy.loc[df_dummy['type_Iris-virginica'] == 1].drop(columns=['type_Iris-setosa', 'type_Iris-versicolor'])\n",
"\n",
"def line_regression_pipe(df_list):\n",
" for df in df_list:\n",
" X = df.drop(columns=['sepal-length']) #indpendent variables\n",
" y = df[['sepal-length']].copy() #dependent variables\n",
" #split the variable sets into training and testing subsets\n",
" X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.333, random_state=41)\n",
" linear_reg_model_a = LinearRegression()\n",
" linear_reg_model_a.fit(X_train,y_train)\n",
" y_pred = linear_reg_model_a.predict(X_test)\n",
" sme = mean_squared_error(y_test, y_pred)\n",
" print('MSE of ' + df.columns[4] + ' is :' + str(sme) )\n",
"\n",
"df_list = [df_s, df_v, df_g]\n",
"line_regression_pipe(df_list)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The goal of this section was to illustrate how to incorporate independent categorical variables. Though it starts with converting strings to numbers, how those conversations are done is important to consider. Moreover, the introduction of more features can impact both the computational efficiency and accuracy of the model."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "jupyter-books-WZpnkDri",
"language": "python",
"name": "jupyter-books-wzpnkdri"
},
"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.1"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}