Skip to content

Instantly share code, notes, and snippets.

@yohm
Last active November 4, 2016 07:27
Show Gist options
  • Save yohm/788ec7aae716777db7b0d97278f0847e to your computer and use it in GitHub Desktop.
Save yohm/788ec7aae716777db7b0d97278f0847e to your computer and use it in GitHub Desktop.
A sample of Ridge regression using scikit-learn.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([[-4.],\n",
" [-2.],\n",
" [ 0.],\n",
" [ 1.],\n",
" [ 2.],\n",
" [ 3.]]), array([-243., -43., -3., 2., 21., 72.]))"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import Ridge\n",
"import numpy as np\n",
"\n",
"def f(x):\n",
" return 3*x**3 -2*x**2 + 4*x - 3\n",
" \n",
"data = np.array( [-4.,-2.,0.,1.,2.,3.] )\n",
"y = f(data)\n",
"X = data[:, np.newaxis]\n",
"X, y"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0. , -1.6803361 , 1.90073195, -2.06398288, 2.13322824],\n",
" [ 0. , -0.84016805, -0.30656967, -0.07117182, -0.50129034],\n",
" [ 0. , 0. , -1.04233688, 0.21351547, -0.67692491],\n",
" [ 0. , 0.42008403, -0.85839508, 0.24910138, -0.66594775],\n",
" [ 0. , 0.84016805, -0.30656967, 0.49820276, -0.50129034],\n",
" [ 0. , 1.26025208, 0.61313934, 1.17433509, 0.21222511]])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import PolynomialFeatures\n",
"from sklearn.preprocessing import StandardScaler\n",
"\n",
"def fit_transform(X):\n",
" poly = PolynomialFeatures(degree=4)\n",
" scaler = StandardScaler()\n",
" X_scaled = poly.fit_transform(X)\n",
" X_scaled = scaler.fit_transform(X_scaled)\n",
" def apply_transform( x_ ):\n",
" return scaler.transform( poly.transform(x_) )\n",
" return (X_scaled, apply_transform)\n",
"\n",
"X, apply_transform = fit_transform(X)\n",
"X"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0. , 19.62341835, -1.74990833, 67.42210602, -15.6186712 ])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"reg = Ridge(alpha=0.1, fit_intercept=True)\n",
"reg.fit( X, y )\n",
"reg.coef_"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1118bd470>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"x = np.linspace(-5,5,100)\n",
"X = x[:, np.newaxis]\n",
"X = apply_transform(X)\n",
"predicted = reg.predict(X)\n",
"\n",
"plt.plot(x, predicted, label='predicted')\n",
"plt.plot(x, f(x), label='ground truth')\n",
"plt.scatter( data, f(data), label='training data' )\n",
"plt.legend(loc='lower right')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.96983999821657219"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Evaluation\n",
"from sklearn.metrics import explained_variance_score\n",
"\n",
"test_x = np.random.randn( 100 )\n",
"test_X = test_x[:, np.newaxis ]\n",
"test_X = apply_transform(test_X)\n",
"test_predicted = reg.predict( test_X )\n",
"test_y = f( test_x )\n",
"\n",
"explained_variance_score( test_y, test_predicted )"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(Ridge(alpha=0.001, copy_X=True, fit_intercept=True, max_iter=None,\n",
" normalize=False, random_state=None, solver='auto', tol=0.001),\n",
" array([ 0.00000000e+00, 1.94763712e+01, -5.57650928e+01,\n",
" 9.49536306e+02, -2.31762763e-02]))"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Tuning hyper-parameter by Cross-validation\n",
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"data = np.random.randn( 100 ) * 5\n",
"y = f(data)\n",
"X = data[:, np.newaxis]\n",
"\n",
"X, apply_transform = fit_transform(X)\n",
"\n",
"reg = GridSearchCV( Ridge(fit_intercept=True) , cv=5, param_grid={'alpha': np.logspace(-3,3,7)})\n",
"reg.fit(X, y)\n",
"\n",
"reg.best_estimator_, reg.best_estimator_.coef_"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x104b82710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(-5,5,100)\n",
"X = x[:, np.newaxis]\n",
"predicted = reg.predict( apply_transform(X) )\n",
"plt.plot(x, predicted, label='predicted')\n",
"plt.plot(x, f(x), label='ground truth')\n",
"plt.legend(loc='lower right')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.99999990192787824"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tests = np.random.randn( 100 )\n",
"X = tests[:, np.newaxis ]\n",
"predicted = reg.predict( apply_transform(X) )\n",
"truth = f( tests )\n",
"\n",
"explained_variance_score( truth, predicted )"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [conda env:ml]",
"language": "python",
"name": "conda-env-ml-py"
},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
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.
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment