Exemplo n.º 1
0
def validate(M, lam):
    X_train, Y_train = regressTrainData()
    X_validate, Y_validate = regressValidateData()

    phi_train = phi(X_train, M)
    w = w_ml(phi_train, Y_train, lam, M)

    phi_validate = phi(X_validate, M)
    Y_approx = np.dot(phi_validate, w)
    sse = np.linalg.norm(Y_validate - Y_approx)

    return sse
Exemplo n.º 2
0
def find_lam(X_train, Y_train, M, lam0, e, a):
    X_val_pre, Y_val_pre = regressValidateData()
    X_val = np.array(X_val_pre)[:, 0]
    Y_val = np.array(Y_val_pre)[:, 0]
    dx = 0.01
    while True:
        w_plus = w_ml(X_train, Y_train, lam0 + dx, M)
        w_minus = w_ml(X_train, Y_train, lam0 - dx, M)
        lam1 = lam0 - a * (sse(X_val, Y_val, w_plus, M) -
                           sse(X_val, Y_val, w_minus, M)) / (2 * dx)
        if abs(lam1 - lam0) < e:
            break
        else:
            lam0 = lam1
    w = w_ml(X_train, Y_train, lam1, M)
    ss = sse(X_val, Y_val, w, M)
    return lam1, w, ss
Exemplo n.º 3
0
    results = {}
    for m in M:
        lam, w, ss = find_lam(X_train, Y_train, m, 0.5, 0.01, 0.1)
        print m, lam, ss
        results[m] = {'w': w,
                      'lam': lam,
                      'sse': ss}
    for key, value in results.iteritems():
        print "{}: {}".format(key, value)
    """
    M = 2
    w = [1.12338195, 0.83457492]

    X_train, Y_train = regressTrainData()
    X_test, Y_test = regressTestData()
    X_val, Y_val = regressValidateData()

    pts = [p for p in np.linspace(min(X_test), max(X_test), 100)]
    plt.plot(X_test.T.tolist()[0], Y_test.T.tolist()[0], 'gs')

    y_test_approx = []
    for pt in pts:
        s = 0
        for k in range(M):
            s += w[k] * (pt ** k)
        y_test_approx.append(s)

    plt.plot(pts, y_test_approx)
    plt.title('Test dataset')
    plt.show()