Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.78 KB | None | 0 0
  1. simple.logistic = function(x, y, w, iters=30, l1_penalty=0) {
  2. d = ncol(x)
  3. n = nrow(x)
  4. x_c = colMeans(x)
  5. x = (x - matrix(rep(x_c, n), nrow=n, byrow = T))
  6. x_s = sqrt(colMeans(x^2))
  7. x = (x / matrix(rep(x_s, n), nrow=n, byrow = T))
  8. beta = rep(0,d)
  9. p = weighted.mean(y, w = w)
  10. beta_0 = log(p) - log(1-p)
  11. for (iter_ in 1:iters) {
  12. pred = 1 / (1 + exp(-x %*% beta - beta_0))
  13. weights = w * pred * (1 - pred)
  14. rw = matrix(rep(weights, d), ncol=d)
  15. ob = beta
  16. XTX = t(x) %*% (rw * x)
  17. XTX = XTX + sum(w) * l1_penalty * diag(1/(abs(beta)+1e-5))
  18. beta = beta + qr.solve(XTX, t(x) %*% (w * (y - pred)))
  19. if (mean((beta - ob)^2)<1e-6) {
  20. break
  21. }
  22. }
  23. obj = list(beta=beta, beta_0=beta_0, x_c = x_c, x_s = x_s)
  24. class(obj) = "simple.logistic"
  25. return(obj)
  26. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement