design a regress function whose coeficients satisfy certain conditions

Problem:

  Given n points (x_1, x_2, ...x_n) as independent variables, where x_i can be a value or a vector,  and the dependent variables (y_1, y_2, ... y_i), design a regression that satifies:

  1. f(x) = t(w) * x  (assume the the attribute of x corresponding w_0 is 1)

  2. sigma(w) = 1

  3. w_i >= 0

  3. minimize sigma(y - f(x))^2


Solution:

  The solution is based on KKT condition which is a generized from langrange muptiply method.

  KKT conditions of this question:

    1. delta(siagma(y - f(x))^2 + a * delta(w) + sigma(b_i * delta(w_i)) = 0

     2. sigma(w) = 1

  solve about equotions, we  get:

     b_i = 0 

     rbind(

        cbind(2 * t(X) *X, c(1, ....), 

         c(w, 1)

     )  * c(w, a) = 2 * t(X) * Y


R code: ( assume x is a vector, whose first element is 1 correponding w_0)

   

regress <- function(x, y) {
  A <- 2 * t(x) %*% x
  B <- rep(1, nrow(A))
  C <- 2 * t(x) %*% y
  D <- c(rep(1, nrow(A)), 0)
  left <- rbind(cbind(A, B), D)
  coef <- solve(left, c(C, 1))
  coef[1:length(coef) - 1]
}

你可能感兴趣的:(conditions,KKT)