심플 렉스 방법으로 최소 절대 편차를 해결하는 방법은 무엇입니까?


12

다음은 가장 절대적인 편차 문제입니다.. LP 방식으로 다음과 같이 재배치 할 수 있다는 것을 알고 있습니다.argminwL(w)=i=1n|yiwTx|

mini=1nui

uixTwyii=1,,n

ui(xTwyi)i=1,,n

그러나 LP의 초보자이기 때문에 단계별로 해결할 생각이 없습니다. 당신은 어떤 아이디어가 있습니까? 미리 감사드립니다!

편집하다:

이 문제에 도달 한 최신 단계는 다음과 같습니다. 이 메모에 따라 문제를 해결하려고합니다 .

1 단계 : 표준 양식으로 공식화

minZ=i=1nui

xTwui+s1=yii=1,,n

xTw+ui+s2=yii=1,,n

s_1 \ ge 0이 적용됩니다 s10;s20;ui0 i=1,...,n

2 단계 : 초기 타블로 구성

           |      |    0      |    1   |  0  |   0   |   0    
 basic var | coef |  $p_0$    |  $u_i$ |  W  | $s_1$ | $s_2$ 
      $s_1$| 0    |  $y_i$    |   -1   |  x  |   1   |   0
      $s_2 | 0    |  $-y_i$   |    1   |  x  |   0   |   1
      z    |      |    0      |    -1  |  0  |   0   |   0

3 단계 : 기본 변수 선택

ui 는 입력 기본 변수로 선택됩니다. 여기에 문제가 있습니다. 출력 기본 변수를 선택할 때 명백한 yi/1=yi/1=yi 입니다. 참고에 따르면 yi0 인 경우 문제는 무한한 해결책입니다.

나는 여기서 완전히 길을 잃었다. 문제가 있는지, 다음 단계를 어떻게 계속해야하는지 궁금합니다.


2
실제로는 직접 작성하는 대신 선형 프로그램 솔버를 사용합니다. 구로 비를 추천합니다.
Matthew Drury

1
@MatthewDrury 답장을 보내 주셔서 감사합니다. 그러나 나는 대답을하는 대신 LP가 어떻게이 문제에서 작동하는지 정확하게 알고 싶습니다.
southdoor

1
Google '단순 방법'을 알고 있습니까?

2
선형 프로그램은 일부 선형 제약 조건에 따라 선형 목표 함수의 최대화 (또는 최소화) 측면에서 문제의 공식입니다. 자체적으로 "해결"되지 않습니다. 이러한 특별히 공식화 프로그램, 가장 일반적으로 사용되는 중 하나를 해결 알고리즘의 무리가 있습니다 것은 단순하다
의 Łukasz 대학원

1
@fcop 예, 실제로 나는 단순한 방법에 대한 몇 가지 참고 사항을 읽었습니다. 그러나이 문제에 어떻게 생성 해야할지 모르겠습니다. 이 노트의 예제는 매우 간단하고 구체적입니다. 일반적인 문제로 시작하는 것을 찾을 수 없습니다. 나는이 문제에서 벌써 이틀을 보냈지 만 여전히 혼란 스러웠다. 죄송합니다.
southdoor

답변:


5

선형 프로그래밍으로 최소 절대 편차를 해결하는 예제가 필요합니다. R에서 간단한 구현을 보여 드리겠습니다. Quantile 회귀는 최소 절대 편차의 일반화입니다. 이것은 Quantile 0.5의 경우입니다. 따라서 Quantile 회귀에 대한 솔루션을 보여 드리겠습니다. 그런 다음 R quantreg패키지로 결과를 확인할 수 있습니다 .

rq_LP  <-  function(x, Y, r=0.5, intercept=TRUE) {
    require("lpSolve")
    if (intercept) X  <-  cbind(1, x) else X <-  cbind(x)
    N   <-  length(Y)
    n  <-  nrow(X)
    stopifnot(n == N)
    p  <-  ncol(X)
    c  <-  c(rep(r, n), rep(1-r, n), rep(0, 2*p))  # cost coefficient vector
    A  <- cbind(diag(n), -diag(n), X, -X)
    res  <-  lp("min", c, A, "=", Y, compute.sens=1)
### Desempaquetar los coefs:
    sol <- res$solution
    coef1  <-  sol[(2*n+1):(2*n+2*p)]
    coef <- numeric(length=p)
    for (i in seq(along=coef)) {
         coef[i] <- (if(coef1[i]<=0)-1 else +1) *  max(coef1[i], coef1[i+p])
    }
    return(coef)
    }

그런 다음 간단한 예에서 사용합니다.

library(robustbase)
data(starsCYG)
Y  <- starsCYG[, 2]
x  <- starsCYG[, 1]
rq_LP(x, Y)
[1]  8.1492045 -0.6931818

그럼 당신은 직접 확인을 할 수 있습니다 quantreg.


2
+1 나는 수동으로 다르게 행동하는 것을 좋아하는 팬입니다.
Haitao Du

3
조금 더 설명이있는 게시물은 Quantile regression
Closing Questions Fast를

2

선형 프로그래밍은 볼록 최적화를 통해 일반화 될 수 있으며, 단순한 것 외에도 더욱 신뢰할 수있는 알고리즘이 많이 있습니다.

Convex Optimization Book과 그들이 제공 한 CVX 툴박스를 확인하시기 바랍니다. 정규화로 최소 절대 편차를 쉽게 공식화 할 수 있습니다.

https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf

http://cvxr.com/cvx/


2
답변 주셔서 감사합니다. 그러나 책에서 "단순 방법"이라는 용어를 검색하려고하면 찾을 수 없습니다. 그리고 CVX 툴박스는 LP 문제로 입력을 받고 알고리즘을 실행하기위한 툴일뿐입니다. 그러나 내가 정말로 원하는 것은이 문제에서 알고리즘이 작동하는 방식입니다. 최종 결과도 문제를 구성하는 방법도 아닙니다. 그러나 결과를 얻는 단계. 감사합니다
southdoor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.