Problem 4


In [33]:
import numpy as np
import math

In [55]:
def s(gamma):
    return 1.0/(1.0 + math.exp(-gamma))

def R(w, X, y):
    net = 0
    for i in range(X.shape[0]):
        print(X[i])
        net += y[i] * math.log(s(np.dot(w, X[i]))) + (1-y[i])*math.log(s(np.dot(w, X[i])))
    return -net

In [56]:
X = np.array([[0,3,1],
              [1,3,1],
              [0,1,1],
              [1,1,1]])
y = np.array([1,1,0,0])
w0 = np.array([-2,1,0])

In [57]:
R(w0,X,y)


[0 3 1]
[1 3 1]
[0 1 1]
[1 1 1]
Out[57]:
1.9883724141284103

In [58]:
def delta_w(w,X,y):
    net = np.zeros(w.shape[0])
    for i in range(X.shape[0]):
        net += y[i] - s(np.dot(X[i], w))*X[i]
    return -net

In [59]:
w1 = w0 + delta_w(w0, X,y)
w1


Out[59]:
array([-3.        ,  5.05089812,  0.68363271])

In [60]:
R(w1,X,y)


[0 3 1]
[1 3 1]
[0 1 1]
[1 1 1]
Out[60]:
0.066133848540594925

In [61]:
w2 = w1 + delta_w(w0, X,y)
w2


Out[61]:
array([-4.        ,  9.10179623,  1.36726541])

In [62]:
R(w2,X,y)


[0 3 1]
[1 3 1]
[0 1 1]
[1 1 1]
Out[62]:
0.0015778803918752944

In [ ]: