This repository has been archived on 2026-03-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
TP-ML/ex/Lab14_exercises.ipynb
2022-06-05 15:43:42 +02:00

298 lines
59 KiB
Plaintext

{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Lab14_exercises",
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"#High-dimensional regression"
],
"metadata": {
"id": "VU95foPgSR7C",
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"**Import the necessary libraries**"
],
"metadata": {
"id": "UaQPVA_VSZo4",
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "1X5-IyjYbGFK",
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"import numpy as np\n",
"from sklearn import datasets\n",
"import matplotlib.pyplot as plt \n",
"from sklearn.linear_model import Ridge, Lasso, ElasticNet, LinearRegression\n",
"from sklearn.model_selection import train_test_split, GridSearchCV\n",
"from sklearn.metrics import mean_squared_error\n",
"from sklearn.pipeline import Pipeline \n",
"from sklearn.decomposition import PCA\n"
]
},
{
"cell_type": "markdown",
"source": [
"**Use the code snippet below to generate some data points**"
],
"metadata": {
"id": "kWYl55GYSgyc",
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"source": [
"X, y, coef = datasets.make_regression(n_samples=100,#number of samples\n",
" n_features=5,#number of features\n",
" n_informative=5,#number of useful features \n",
" noise=10,#standard deviation of the guassian noise\n",
" coef=True,#true coefficient used to generated the data\n",
" random_state=0) #set for same data points for each run\n"
],
"metadata": {
"id": "bUOiWN0wbQl4",
"pycharm": {
"name": "#%%\n"
}
},
"execution_count": 2,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"**1) For $\\lambda$ varying between 0 and 1000 by steps of 1, fit a ridge regression to the data and plot the evolution of the coefficients as a function of $\\lambda$. What do you observe ? Redo the same operation for a Lasso regression.**"
],
"metadata": {
"id": "JTVEaod7Sssr",
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 7,
"outputs": [
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"liste_coef = []\n",
"alpha = np.arange(1000)\n",
"for l in alpha:\n",
" model = Ridge(l)\n",
" model.fit(X,y)\n",
" coef = model.coef_\n",
" liste_coef.append(coef)\n",
"\n",
"liste_coef = np.transpose(np.array(liste_coef))\n",
"\n",
"for coef in liste_coef:\n",
" plt.plot(alpha,coef)\n",
"\n"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 9,
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_33188/2023861465.py:5: UserWarning: With alpha=0, this algorithm does not converge well. You are advised to use the LinearRegression estimator\n",
" model.fit(X,y)\n",
"/home/jika/.local/lib/python3.10/site-packages/sklearn/linear_model/_coordinate_descent.py:647: UserWarning: Coordinate descent with no regularization may lead to unexpected results and is discouraged.\n",
" model = cd_fast.enet_coordinate_descent(\n",
"/home/jika/.local/lib/python3.10/site-packages/sklearn/linear_model/_coordinate_descent.py:647: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 4.873e+03, tolerance: 2.135e+02 Linear regression models with null weight for the l1 regularization term are more efficiently fitted using one of the solvers implemented in sklearn.linear_model.Ridge/RidgeCV instead.\n",
" model = cd_fast.enet_coordinate_descent(\n"
]
},
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"liste_coef = []\n",
"alpha = np.arange(100)\n",
"for l in alpha:\n",
" model = Lasso(l)\n",
" model.fit(X,y)\n",
" coef = model.coef_\n",
" liste_coef.append(coef)\n",
"\n",
"liste_coef = np.transpose(np.array(liste_coef))\n",
"\n",
"for coef in liste_coef:\n",
" plt.plot(alpha,coef)\n",
"\n"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"**2) Reuse the code snippet above to generate 100 samples with 90 features, with only 2 being informative on the response $y$. Split your dataset on a train and a test split using a 80/20 partition. For increasing values of $\\lambda$, fit a ridge regression model on the training data and plot its MSE as a function of $\\lambda$. What do you observe ? Do the same for a Lasso regression.**"
],
"metadata": {
"id": "aOvMOvEVUQ4S",
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 24,
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_33188/1005585175.py:8: UserWarning: With alpha=0, this algorithm does not converge well. You are advised to use the LinearRegression estimator\n",
" model.fit(X_train,Y_train)\n",
"/home/jika/.local/lib/python3.10/site-packages/sklearn/linear_model/_coordinate_descent.py:647: UserWarning: Coordinate descent with no regularization may lead to unexpected results and is discouraged.\n",
" model = cd_fast.enet_coordinate_descent(\n"
]
},
{
"data": {
"text/plain": "[<matplotlib.lines.Line2D at 0x7faf56d08c10>]"
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"X_train, X_test, Y_train, Y_test = train_test_split(X,y, train_size=0.8, test_size=0.2, shuffle=True)\n",
"\n",
"\n",
"liste = []\n",
"alpha = np.arange(0,10,0.1)\n",
"for l in alpha:\n",
" model = Lasso(l)\n",
" model.fit(X_train,Y_train)\n",
" mse = mean_squared_error(model.predict(X_test),Y_test)\n",
" liste.append(mse)\n",
"\n",
"plt.plot(alpha,liste)\n",
"\n"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 21,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"**3) Reuse the code above to generate 1000 samples, with 90 features amongst which 2 are actually useful. Split your data into a train and test set following a 80/20 partition. For a Lasso and a Ridge regression, perform a cross-validation on the training data to select the best $\\lambda$. Also perform a cross-validation on a Principal Component Regression to select the best number of components.**\n",
"\n",
"**Once you found the best hyper-parameter for each model, refit them on the training data and report their MSE on the test set. Which model achieves the lowest error ?**"
],
"metadata": {
"id": "UHd9xeGjZJ5g",
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
}
]
}