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)