def q20(): def cross_validate(X, y, lamda): Xs = X[:40], X[40:80], X[80:120], X[120:160], X[160:] ys = y[:40], y[40:80], y[80:120], y[120:160], y[160:] reg = ridge.RidgeRegression(lamda) e_cv = 0.0 for i in range(5): X_val, y_val = Xs[i], ys[i] X_train = np.concatenate([Xs[j] for j in range(5) if i != j]) y_train = np.concatenate([ys[j] for j in range(5) if i != j]) reg.fit(X_train, y_train) e_cv += reg.evaluate(X_val, y_val, sign) return e_cv / 5 X_train, y_train = load_train() X_test, y_test = load_test() lamdas = np.logspace(-10, 2, 13) best = (1.0, None) for lamda in lamdas: e_cv = cross_validate(X_train, y_train, lamda) if e_cv <= best[0]: best = (e_cv, lamda) best_reg = ridge.RidgeRegression(best[1]) best_reg.fit(X_train, y_train) print "lamda: %e, E_in: %.3f, E_out: %.3f" % (best[1], best_reg.evaluate(X_train, y_train, sign), best_reg.evaluate(X_test, y_test, sign))
def test(): X_train, y_train = load_train() X_test, y_test = load_test() lamda = 0 reg = ridge.RidgeRegression(lamda) reg.fit(X_train, y_train) e_in = reg.evaluate(X_train, y_train, sign) e_out = reg.evaluate(X_test, y_test, sign) print "E_in: %.3f, E_out: %.3f" % (e_in, e_out)
def cross_validate(X, y, lamda): Xs = X[:40], X[40:80], X[80:120], X[120:160], X[160:] ys = y[:40], y[40:80], y[80:120], y[120:160], y[160:] reg = ridge.RidgeRegression(lamda) e_cv = 0.0 for i in range(5): X_val, y_val = Xs[i], ys[i] X_train = np.concatenate([Xs[j] for j in range(5) if i != j]) y_train = np.concatenate([ys[j] for j in range(5) if i != j]) reg.fit(X_train, y_train) e_cv += reg.evaluate(X_val, y_val, sign) return e_cv / 5
def q15(): X_train, y_train = load_train() X_test, y_test = load_test() lamdas = np.logspace(-10, 2, 13) best = (1.0, None) for lamda in lamdas: reg = ridge.RidgeRegression(lamda) reg.fit(X_train, y_train) e_out = reg.evaluate(X_test, y_test, sign) if e_out <= best[0]: best = (e_out, reg) best_reg = best[1] print "lamda: %e, E_in: %.3f, E_out: %.3f" % ( best_reg.lamda, best_reg.evaluate(X_train, y_train, sign), best_reg.evaluate(X_test, y_test, sign))
def q17(): X, y = load_train() X_train, X_val = X[:120], X[120:] y_train, y_val = y[:120], y[120:] X_test, y_test = load_test() lamdas = np.logspace(-10, 2, 13) best = (1.0, None) for lamda in lamdas: reg = ridge.RidgeRegression(lamda) reg.fit(X_train, y_train) e_val = reg.evaluate(X_val, y_val, sign) if e_val <= best[0]: best = (e_val, reg) best_reg = best[1] print "lamda: %e, E_train: %.3f, E_val: %.3f, E_out: %.3f" % ( best_reg.lamda, best_reg.evaluate(X_train, y_train, sign), best_reg.evaluate(X_val, y_val, sign), best_reg.evaluate(X_test, y_test, sign))
ymin = -1 ymax = 25 fig, axes = plt.subplots(nrows=2, ncols=5) for i in range(5): axes[0, i].set_xlim([xmin, xmax]) axes[0, i].set_ylim([ymin, ymax]) axes[1, i].set_xlim([xmin, xmax]) axes[1, i].set_ylim([ymin, ymax]) xx = x[:2 + i * 2] yy = y[:2 + i * 2] axes[0, i].scatter(xx, yy, color="k") axes[1, i].scatter(xx, yy, color="k") model = linearreg.LinearRegression() model.fit(xx, yy) xs = [xmin, xmax] ys = [model.w_[0] + model.w_[1] * xmin, model.w_[0] + model.w_[1] * xmax] axes[0, i].plot(xs, ys, color="k") model = ridge.RidgeRegression(10.) model.fit(xx, yy) xs = [xmin, xmax] ys = [model.w_[0] + model.w_[1] * xmin, model.w_[0] + model.w_[1] * xmax] axes[1, i].plot(xs, ys, color="k") plt.show()
import ridge import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d x = np.array([1, 3, 4, 6, 7]) y = np.array([1, 3, 3, 5, 4]) model = ridge.RidgeRegression(1.) model.fit(x, y) b, a = model.w_ plt.scatter(x, y, color="k") xmax = x.max() plt.plot([0, xmax], [b, b + a * xmax], color="k") plt.show() n = 100 scale = 10 np.random.seed(0) X = np.random.random((n, 2)) * scale w0 = 1 w1 = 2 w2 = 3 y = w0 + w1 * X[:, 0] + w2 * X[:, 1] + np.random.randn(n) model = ridge.RidgeRegression() model.fit(X, y) xmesh, ymesh = np.meshgrid(np.linspace(0, scale, 20),
import ridge import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d # test1 x = np.array([1, 2, 4, 6, 7]).reshape(-1, 1) y = np.array([1, 3, 3, 5, 4]).reshape(-1, 1) model = ridge.RidgeRegression(lamb=1.) model.fit(x, y) b, a = model.w plt.scatter(x, y, color='k') xmax = x.max() plt.plot([0, xmax], [b, b + a * xmax], color='k') plt.show() # test2 n = 100 scale = 10 np.random.seed(0) X = np.random.random((n, 2)) * scale w0 = 1 w1 = 2 w2 = 3 y = w0 + w1 * X[:, 0] + w2 * X[:, 1] + np.random.randn(n)