def train(self, data):
reg_weight = self.regularization_weight()
def f(theta):
ll = 0
for d in data:
session = d['session']
if DEBUG:
assert len(session) > 5
assert len(session) < 15
ll += self.log_likelihood(theta, session, d['serp'], d['sat'], f_only=True).full
N = len(data)
reg_term = 0.5 * self.reg_coeff / N * np.multiply(reg_weight, theta).dot(theta)
if DEBUG:
self.debug_theta(theta)
print 'mean LL = %f, reg_term = %f, N = %d' % (ll/N, reg_term, N)
return -ll / N + reg_term
def fprime(theta):
ll_prime = np.zeros(self.num_features)
for d in data:
ll_prime += self.log_likelihood(theta, d['session'], d['serp'], d['sat']).gaussian
N = len(data)
return -ll_prime / N + self.reg_coeff / N * np.multiply(reg_weight, theta)
theta0 = self.initial_guess()
opt_res = scipy.optimize.minimize(f, theta0, method='L-BFGS-B', jac=fprime, options=dict(maxiter=100))
return opt_res.x
评论列表
文章目录