def test(self, test_data, label):
     n_pos = 0.0
     for i in range(len(test_data)):
         if sigmoid(self.W, test_data[i]) >= 0.5 and self.label[i] == 1:
             n_pos += 1
         elif sigmoid(self.W, test_data[i]) < 0.5 and self.label[i] == 0:
             n_pos += 1
     
     print n_pos, len(test_data), n_pos / len(test_data)
     print self.W
def gradient(w, lst_data, lst_label):
    g = np.zeros(len(w))
    for index, data in enumerate(lst_data):
        mu = sigmoid(w, data)
        label = lst_label[index]
        g += data * (mu - label) 
    return g
 def gradient(self, w, lst_data, lst_label):
     g = np.zeros(len(w))
     for index, data in enumerate(lst_data):
         mu = sigmoid(w, data)
         label = lst_label[index]
         g += data * (mu - label) 
     g += np.array(w) * self.beta
     return g
 def nll(self, w):
     warnings.filterwarnings("always")
     self.likelihood = 0.0
     for index, sample in enumerate(self.data):
         mu = sigmoid(w, sample)
         label = self.label[index]
         try:
             self.likelihood -= np.log(mu ** label * (1 - mu) ** (1 - label)) 
         except Warning:
             print "NLL, w", w
     return self.likelihood +  self.beta / 2 * np.dot(w, w)