scikit-learn/examples/linear_model/plot_sgd_penalties.py

66 lines
1.5 KiB
Python
Raw Normal View History

2010-10-27 01:10:08 +08:00
"""
==============
SGD: Penalties
==============
2011-12-24 02:12:26 +08:00
Plot the contours of the three penalties supported by
`sklearn.linear_model.stochastic_gradient`.
2010-10-27 01:10:08 +08:00
"""
from __future__ import division
print __doc__
2010-10-27 01:10:08 +08:00
import numpy as np
import pylab as pl
2011-12-24 02:12:26 +08:00
def l1(xs):
return np.array([np.sqrt((1 - np.sqrt(x ** 2.0)) ** 2.0) for x in xs])
def l2(xs):
return np.array([np.sqrt(1.0 - x ** 2.0) for x in xs])
2010-10-27 01:10:08 +08:00
def el(xs, z):
2011-12-24 02:12:26 +08:00
return np.array([(2 - 2 * x - 2 * z + 4 * x * z -
(4 * z ** 2
- 8 * x * z ** 2
+ 8 * x ** 2 * z ** 2
- 16 * x ** 2 * z ** 3
+ 8 * x * z ** 3 + 4 * x ** 2 * z ** 4) ** (1. / 2)
- 2 * x * z ** 2) / (2 - 4 * z) for x in xs])
2010-10-27 01:10:08 +08:00
def cross(ext):
2011-12-24 02:12:26 +08:00
pl.plot([-ext, ext], [0, 0], "k-")
pl.plot([0, 0], [-ext, ext], "k-")
2010-10-27 01:10:08 +08:00
xs = np.linspace(0, 1, 100)
2011-12-24 02:12:26 +08:00
alpha = 0.501 # 0.5 division throuh zero
2010-10-27 01:10:08 +08:00
cross(1.2)
pl.plot(xs, l1(xs), "r-", label="L1")
2011-12-24 02:12:26 +08:00
pl.plot(xs, -1.0 * l1(xs), "r-")
pl.plot(-1 * xs, l1(xs), "r-")
pl.plot(-1 * xs, -1.0 * l1(xs), "r-")
2010-10-27 01:10:08 +08:00
pl.plot(xs, l2(xs), "b-", label="L2")
pl.plot(xs, -1.0 * l2(xs), "b-")
2011-12-24 02:12:26 +08:00
pl.plot(-1 * xs, l2(xs), "b-")
pl.plot(-1 * xs, -1.0 * l2(xs), "b-")
2010-10-27 01:10:08 +08:00
pl.plot(xs, el(xs, alpha), "y-", label="Elastic Net")
pl.plot(xs, -1.0 * el(xs, alpha), "y-")
2011-12-24 02:12:26 +08:00
pl.plot(-1 * xs, el(xs, alpha), "y-")
pl.plot(-1 * xs, -1.0 * el(xs, alpha), "y-")
2010-10-27 01:10:08 +08:00
pl.xlabel(r"$w_0$")
pl.ylabel(r"$w_1$")
2010-10-27 01:10:08 +08:00
pl.legend()
pl.axis("equal")
pl.show()