def l2_clogistic_llh(X, Y, alpha, beta, penalty_matrix, offset):
""" Penalized log likelihood function for proportional odds cumulative logit model
Args:
X : array_like. design matrix
Y : array_like. response matrix
alpha : array_like. intercepts.\
must have shape == one less than the number of columns of `Y`
beta : array_like. parameters.\
must have shape == number of columns of X
penalty_matrix : array_like. Regularization matrix
offset : array_like, optional. Defaults to 0
Returns:
scalar : penalized loglikelihood
"""
offset = 0.0 if offset is None else offset
obj = 0.0
J = Y.shape[1]
Xb = dot(X, beta) + offset
for j in range(J):
if j == 0:
obj += dot(np.log(expit(alpha[j] + Xb)), Y[:, j])
elif j == J - 1:
obj += dot(np.log(1 - expit(alpha[j - 1] + Xb)), Y[:, j])
else:
obj += dot(np.log(expit(alpha[j] + Xb) - expit(alpha[j - 1] + Xb)), Y[:, j])
obj -= 0.5 * dot(beta, dot(penalty_matrix, beta))
return -np.inf if np.isnan(obj) else obj
评论列表
文章目录