def ridge_regression(data, labels, mu=0.0):
r"""Implementation of the Regularized Least Squares solver.
It solves the ridge regression problem with parameter ``mu`` on the
`l2-norm`.
Parameters
----------
data : (N, P) ndarray
Data matrix.
labels : (N,) or (N, 1) ndarray
Labels vector.
mu : float, optional (default is `0.0`)
`l2-norm` penalty.
Returns
--------
beta : (P, 1) ndarray
Ridge regression solution.
Examples
--------
>>> X = numpy.array([[0.1, 1.1, 0.3], [0.2, 1.2, 1.6], [0.3, 1.3, -0.6]])
>>> beta = numpy.array([0.1, 0.1, 0.0])
>>> Y = numpy.dot(X, beta)
>>> beta = l1l2py.algorithms.ridge_regression(X, Y, 1e3).T
>>> len(numpy.flatnonzero(beta))
3
"""
n, p = data.shape
if n < p:
tmp = np.dot(data, data.T)
if mu:
tmp += mu * n * np.eye(n)
tmp = la.pinv(tmp)
return np.dot(np.dot(data.T, tmp), labels.reshape(-1, 1))
else:
tmp = np.dot(data.T, data)
if mu:
tmp += mu * n * np.eye(p)
tmp = la.pinv(tmp)
return np.dot(tmp, np.dot(data.T, labels.reshape(-1, 1)))
评论列表
文章目录