Skip to content

Instantly share code, notes, and snippets.

@qdpham
Created February 25, 2022 13:29
Show Gist options
  • Save qdpham/21b30181a8e0dd50cfcbba57b61e9b70 to your computer and use it in GitHub Desktop.
Save qdpham/21b30181a8e0dd50cfcbba57b61e9b70 to your computer and use it in GitHub Desktop.
Fun-inria MOOC scikit-learn Exervice M4.04: Different outputs for linear regression coefficients
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "c2a558d2",
"metadata": {},
"source": [
"# 📝 Exercise M4.04\n",
"\n",
"In the previous notebook, we saw the effect of applying some regularization\n",
"on the coefficient of a linear model.\n",
"\n",
"In this exercise, we will study the advantage of using some regularization\n",
"when dealing with correlated features.\n",
"\n",
"We will first create a regression dataset. This dataset will contain 2,000\n",
"samples and 5 features from which only 2 features will be informative."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "338e4815",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"System:\n",
" python: 3.9.7 | packaged by conda-forge | (default, Sep 29 2021, 19:20:46) [GCC 9.4.0]\n",
"executable: /opt/conda/bin/python\n",
" machine: Linux-4.15.0-166-generic-x86_64-with-glibc2.31\n",
"\n",
"Python dependencies:\n",
" pip: 22.0.3\n",
" setuptools: 59.8.0\n",
" sklearn: 1.0.2\n",
" numpy: 1.21.5\n",
" scipy: 1.8.0\n",
" Cython: 0.29.28\n",
" pandas: 1.4.1\n",
" matplotlib: 3.5.1\n",
" joblib: 1.1.0\n",
"threadpoolctl: 3.1.0\n",
"\n",
"Built with OpenMP: True\n"
]
}
],
"source": [
"import sklearn\n",
"sklearn.show_versions()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "65182a0c",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.datasets import make_regression\n",
"\n",
"data, target, coef = make_regression(\n",
" n_samples=2_000,\n",
" n_features=5,\n",
" n_informative=2,\n",
" shuffle=False,\n",
" coef=True,\n",
" random_state=0,\n",
" noise=30,\n",
")"
]
},
{
"cell_type": "markdown",
"id": "764a1875",
"metadata": {},
"source": [
"When creating the dataset, `make_regression` returns the true coefficient\n",
"used to generate the dataset. Let's plot this information."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "08023b7a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Relevant feature #0 9.566665\n",
"Relevant feature #1 40.192077\n",
"Noisy feature #0 0.000000\n",
"Noisy feature #1 0.000000\n",
"Noisy feature #2 0.000000\n",
"dtype: float64"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"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": [
"import pandas as pd\n",
"\n",
"feature_names = [\n",
" \"Relevant feature #0\",\n",
" \"Relevant feature #1\",\n",
" \"Noisy feature #0\",\n",
" \"Noisy feature #1\",\n",
" \"Noisy feature #2\",\n",
"]\n",
"coef = pd.Series(coef, index=feature_names)\n",
"coef.plot.barh()\n",
"coef"
]
},
{
"cell_type": "markdown",
"id": "2bd64843",
"metadata": {},
"source": [
"Create a `LinearRegression` regressor and fit on the entire dataset and\n",
"check the value of the coefficients. Are the coefficients of the linear\n",
"regressor close to the coefficients used to generate the dataset?"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "6d4f0b69",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([10.89587004, 40.41128042, -0.20542454, -0.18954462, 0.11129768])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code here.\n",
"\n",
"# solution\n",
"from sklearn.linear_model import LinearRegression\n",
"\n",
"linear_regression = LinearRegression()\n",
"linear_regression.fit(data, target)\n",
"linear_regression.coef_"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "22fc347e",
"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": [
"feature_names = [\n",
" \"Relevant feature #0\",\n",
" \"Relevant feature #1\",\n",
" \"Noisy feature #0\",\n",
" \"Noisy feature #1\",\n",
" \"Noisy feature #2\",\n",
"]\n",
"coef = pd.Series(linear_regression.coef_, index=feature_names)\n",
"_ = coef.plot.barh()"
]
},
{
"cell_type": "markdown",
"id": "ae85010c",
"metadata": {},
"source": [
"We see that the coefficients are close to the coefficients used to generate the dataset. The dispersion is indeed cause by the noise injected during the dataset generation."
]
},
{
"cell_type": "markdown",
"id": "414d2d6c",
"metadata": {},
"source": [
"Now, create a new dataset that will be the same as `data` with 4 additional\n",
"columns that will repeat twice features 0 and 1. This procedure will create\n",
"perfectly correlated features."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "b4a5ca9f",
"metadata": {},
"outputs": [],
"source": [
"# Write your code here.\n",
"# solution\n",
"import numpy as np\n",
"\n",
"data = np.concatenate([data, data[:, [0, 1]], data[:, [0, 1]]], axis=1)"
]
},
{
"cell_type": "markdown",
"id": "ebffeb73",
"metadata": {},
"source": [
"Fit again the linear regressor on this new dataset and check the\n",
"coefficients. What do you observe?"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c044454f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.33594010e+12, -1.62497905e+14, -1.98242188e-01, -1.87133789e-01,\n",
" 9.57031250e-02, -6.67970049e+11, 4.20600332e+13, -6.67970049e+11,\n",
" 1.20437872e+14])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code here.\n",
"\n",
"# solution\n",
"linear_regression = LinearRegression()\n",
"linear_regression.fit(data, target)\n",
"linear_regression.coef_"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "931423cc",
"metadata": {},
"outputs": [
{
"ename": "LinAlgError",
"evalue": "Singular matrix",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mLinAlgError\u001b[0m Traceback (most recent call last)",
"Input \u001b[0;32mIn [8]\u001b[0m, in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Linear regression by hand\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m beta \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlinalg\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mT\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m@\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;241m@\u001b[39m data\u001b[38;5;241m.\u001b[39mT \u001b[38;5;241m@\u001b[39m target\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLinear regression coefficients by hand: \u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m, beta, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n",
"File \u001b[0;32m<__array_function__ internals>:5\u001b[0m, in \u001b[0;36minv\u001b[0;34m(*args, **kwargs)\u001b[0m\n",
"File \u001b[0;32m/opt/conda/lib/python3.9/site-packages/numpy/linalg/linalg.py:545\u001b[0m, in \u001b[0;36minv\u001b[0;34m(a)\u001b[0m\n\u001b[1;32m 543\u001b[0m signature \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mD->D\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m isComplexType(t) \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124md->d\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 544\u001b[0m extobj \u001b[38;5;241m=\u001b[39m get_linalg_error_extobj(_raise_linalgerror_singular)\n\u001b[0;32m--> 545\u001b[0m ainv \u001b[38;5;241m=\u001b[39m \u001b[43m_umath_linalg\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minv\u001b[49m\u001b[43m(\u001b[49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msignature\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msignature\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextobj\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 546\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m wrap(ainv\u001b[38;5;241m.\u001b[39mastype(result_t, copy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m))\n",
"File \u001b[0;32m/opt/conda/lib/python3.9/site-packages/numpy/linalg/linalg.py:88\u001b[0m, in \u001b[0;36m_raise_linalgerror_singular\u001b[0;34m(err, flag)\u001b[0m\n\u001b[1;32m 87\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_raise_linalgerror_singular\u001b[39m(err, flag):\n\u001b[0;32m---> 88\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LinAlgError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSingular matrix\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
"\u001b[0;31mLinAlgError\u001b[0m: Singular matrix"
]
}
],
"source": [
"# Linear regression by hand\n",
"import numpy as np\n",
"beta = np.linalg.inv(data.T @ data) @ data.T @ target\n",
"print(\"Linear regression coefficients by hand: \\n \", beta, \"\\n\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "653f86f1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Determinant of X.T @ X: 0.0\n"
]
}
],
"source": [
"# determinant\n",
"det = np.linalg.det(data.T @ data)\n",
"print(\"Determinant of X.T @ X: \", det)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "c7a06aa5",
"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": [
"feature_names = [\n",
" \"Relevant feature #0\",\n",
" \"Relevant feature #1\",\n",
" \"Noisy feature #0\",\n",
" \"Noisy feature #1\",\n",
" \"Noisy feature #2\",\n",
" \"First repetition of feature #0\",\n",
" \"First repetition of feature #1\",\n",
" \"Second repetition of feature #0\",\n",
" \"Second repetition of feature #1\",\n",
"]\n",
"coef = pd.Series(linear_regression.coef_, index=feature_names)\n",
"_ = coef.plot.barh()"
]
},
{
"cell_type": "markdown",
"id": "a92aeec6",
"metadata": {},
"source": [
"We see that the coefficient values are far from what one could expect. By repeating the informative features, one would have expected these coefficients to be similarly informative.\n",
"\n",
"Instead, we see that some coefficients have a huge norm ~1e14. It indeed means that we try to solve an mathematical ill-posed problem. Indeed, finding coefficients in a linear regression involves inverting the matrix np.dot(data.T, data) which is not possible (or lead to high numerical errors).\n",
"\n",
"Create a ridge regressor and fit on the same dataset. Check the coefficients. What do you observe?"
]
},
{
"cell_type": "markdown",
"id": "c66c7a20",
"metadata": {},
"source": [
"Create a ridge regressor and fit on the same dataset. Check the coefficients.\n",
"What do you observe?"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "0a6fa595",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3.6313933 , 13.46802113, -0.20549345, -0.18929961, 0.11117205,\n",
" 3.6313933 , 13.46802113, 3.6313933 , 13.46802113])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code here.\n",
"# solution\n",
"from sklearn.linear_model import Ridge\n",
"\n",
"ridge = Ridge()\n",
"ridge.fit(data, target)\n",
"ridge.coef_"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "a8dbcb9e",
"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": [
"coef = pd.Series(ridge.coef_, index=feature_names)\n",
"_ = coef.plot.barh()"
]
},
{
"cell_type": "markdown",
"id": "f0bba559",
"metadata": {},
"source": [
"We see that the penalty applied on the weights give a better results: the values of the coefficients do not suffer from numerical issues. Indeed, the matrix to be inverted internally is np.dot(data.T, data) + alpha * I. Adding this penalty alpha allow the inversion without numerical issue."
]
},
{
"cell_type": "markdown",
"id": "0c3130ee",
"metadata": {},
"source": [
"Can you find the relationship between the ridge coefficients and the original\n",
"coefficients?"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "d82fa136",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([10.89417991, 40.40406338, -0.61648035, -0.56789883, 0.33351616])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Write your code here.\n",
"# solution\n",
"ridge.coef_[:5] * 3"
]
},
{
"cell_type": "markdown",
"id": "c00d7bf8",
"metadata": {},
"source": [
"Repeating three times each informative features induced to divide the ridge coefficients by three."
]
}
],
"metadata": {
"jupytext": {
"cell_metadata_filter": "-all",
"encoding": "# -*- coding: utf-8 -*-",
"main_language": "python",
"notebook_metadata_filter": "-all"
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.7"
},
"nbreset": "https://github.com/INRIA/scikit-learn-mooc/raw/main/notebooks/linear_models_ex_04.ipynb"
},
"nbformat": 4,
"nbformat_minor": 5
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@qdpham
Copy link
Author

qdpham commented Feb 25, 2022

Hi,

Here are the two files reproducing the issue, that we talked about in the forum, about exact same coefficients between LinearRegression and Ridge on my machine.

The first file fun_linear_models_ex_04.ipynb is the code run from the fun-inria server and the second my_linear_models_ex_04.ipynb run from my local machine.

Note that I’ve added a cell for computing the coefficients by hand.
I had an error raised from the fun-inria server, as the determinant is computed at exactly 0, however the `LinearRegression’ still provides results without explicit warning (although we can understand that the coefficients are unreasonable).
On the other hand, the determinant is computed at approximately 0 on my machine and so I could proceed and got somewhat reasonable coefficients.

At the end of the day, I get the same coefficients between LineaarRegression and Ridge (regularized) on my machine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment