import numpy as np
def main(): X = np.matrix([[1., 1.2], [1., 0.2], [1., -0.2], [1., -0.5], [1., -1.0], [1., -1.5]]) b = np.matrix([[1., 0.], [1., 0.], [1., 0.], [0., 1.], [0., 1.], [0., 1.]])
W = np.matrix(np.random.random((b.shape[1], X.shape[1])))
rho = 0.4 for k in xrange(1): for i in xrange(X.shape[0]): learn_widrow_hoff(W, X[i, :].T, b[i, :].T, rho) print W x = -(W[0, 0] - W[0, 1]) / (W[1, 0] - W[1, 1]) print 'x=', x, 'error=', calc_error(W, X, b)
def learn_widrow_hoff(W, xp, bp, rho): e = W.T * xp - bp W -= rho * (xp * e.T)
def calc_error(W, X, b): e = X * W - b J = np.vectorize(lambda x: x * x)(e).sum() return J
if __name__ == '__main__': main()
|