Come risolvere la minima deviazione assoluta con il metodo simplex?


12

Ecco il problema di deviazione meno assoluto in questione: argminwL(w)=i=1n|yiwTx| . So che può essere riorganizzato come problema LP nel seguente modo:

mini=1nui

uixTwyii=1,,n

ui(xTwyi)i=1,,n

Ma non ho idea di risolverlo passo dopo passo, dato che sono un principiante di LP. Hai qualche idea? Grazie in anticipo!

MODIFICARE:

Ecco l'ultima fase che ho raggiunto a questo problema. Sto cercando di risolvere il problema seguendo questa nota :

Passaggio 1: formularlo in un modulo standard

minZ=i=1nui

xTwui+s1=yii=1,,n

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

soggetto as10;s20;ui0 i=1,...,n

Passaggio 2: costruire un tableau iniziale

           |      |    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

Passaggio 3: Scegli le variabili di base

ui è scelto come variabile base di input. Ecco che arriva un problema. Quando si sceglie la variabile base di output, è ovvio . Secondo la nota, se , il problema ha una soluzione illimitata.yi/1=yi/1=yiyi0

Sono totalmente perso qui. Mi chiedo se c'è qualcosa che non va e come devo continuare i seguenti passi.


2
Pragmaticamente, usi un risolutore di programmi lineare invece di scrivere il tuo. Consiglio Gurobi.
Matthew Drury,

1
@MatthewDrury Grazie per la risposta. Ma voglio sapere esattamente come funziona LP in questo problema, invece di prendere semplicemente la risposta.
sud

1
Conosci o hai "il metodo simplex" di Google?

2
Il programma lineare è solo una formulazione del tuo problema in termini di massimizzazione (o minimizzazione) della funzione dell'obiettivo lineare soggetta ad alcuni vincoli lineari. Non si "risolve" da solo. Ci sono un sacco di algoritmi che risolvono questi programmi appositamente formulati, uno dei più comunemente usati è Simplex
Łukasz Grad

1
@fcop Sì, in effetti ho letto alcune note del metodo simplex. Ma non ho idea di come generarlo per questo problema. Come gli esempi in quelle note sono molto semplici e specifici. Non riesco a trovarne uno che inizi con problemi generali. Ho già trascorso due notti in questo problema, ma sono ancora confuso. Scusa.
sud

Risposte:


5

Volete un esempio per risolvere la deviazione minima assoluta mediante la programmazione lineare. Ti mostrerò una semplice implementazione in R. La regressione quantile è una generalizzazione della deviazione minima assoluta, come nel caso del quantile 0.5, quindi mostrerò una soluzione per la regressione quantile. Quindi puoi controllare i risultati con il quantregpacchetto R :

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)
    }

Quindi lo usiamo in un semplice esempio:

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

allora tu stesso puoi fare il controllo con quantreg.


2
+1 Sono un grande fan di fare le cose manualmente e in modo diverso, quindi confrontare!
Haitao Du

3
Per un post con un po 'più di spiegazioni vedi regressione quantile
Stop Closing Questions Fast

2

La programmazione lineare può essere generalizzata con l'ottimizzazione convessa, dove oltre al simplex sono disponibili molti algoritmi più affidabili.

Vorrei suggerire di controllare il libro di ottimizzazione convesso e la cassetta degli attrezzi CVX che hanno fornito. Dove puoi facilmente formulare la minima deviazione assoluta con la regolarizzazione.

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

http://cvxr.com/cvx/


2
Grazie per la tua risposta. Ma quando provo a cercare il termine "metodo simplex" nel libro, non riesco a trovarne. E la cassetta degli attrezzi CVX è solo uno strumento per prendere input come problema LP ed eseguire l'algoritmo. Ma quello che voglio davvero è come funziona l'algoritmo in questo problema. Né il risultato finale, né come formulare il problema. Ma il passo per ottenere il risultato. grazie
southdoor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.