45 lines
978 B
Python
45 lines
978 B
Python
from random import random, seed
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from mpl_toolkits.mplot3d import Axes3D
|
|
from matplotlib import cm
|
|
from matplotlib.ticker import LinearLocator, FormatStrFormatter
|
|
import sys
|
|
|
|
# the number of datapoints
|
|
m = 100
|
|
x = 2*np.random.rand(m,1)
|
|
y = 4+3*x+np.random.randn(m,1)
|
|
|
|
xb = np.c_[np.ones((m,1)), x]
|
|
XT_X = xb.T @ xb
|
|
|
|
#Ridge parameter lambda
|
|
lmbda = 0.001
|
|
Id = lmbda* np.eye(XT_X.shape[0])
|
|
|
|
beta_linreg = np.linalg.inv(XT_X+Id) @ xb.T @ y
|
|
print(beta_linreg)
|
|
# Start plain gradient descent
|
|
beta = np.random.randn(2,1)
|
|
|
|
eta = 0.1
|
|
Niterations = 100
|
|
|
|
for iter in range(Niterations):
|
|
gradients = 2.0/m*xb.T @ (xb @ (beta)-y)+2*lmbda*beta
|
|
beta -= eta*gradients
|
|
|
|
print(beta)
|
|
ypredict = xb @ beta
|
|
ypredict2 = xb @ beta_linreg
|
|
plt.plot(x, ypredict, "r-")
|
|
plt.plot(x, ypredict2, "b-")
|
|
plt.plot(x, y ,'ro')
|
|
plt.axis([0,2.0,0, 15.0])
|
|
plt.xlabel(r'$x$')
|
|
plt.ylabel(r'$y$')
|
|
plt.title(r'Gradient descent example for Ridge')
|
|
plt.show()
|
|
|