Overfitting (4 lettori)

Cren

Forumer storico
E' l'istinto materno che ci frega sempre :(
Ma no, siete adorabili quando fate così, te inclusa ovviamente :D

Invece sono le donne che si prendono tremendamente sul serio che non riesco a sopportare, e sfortunatamente nel mio ambiente ce ne sono fin troppe di questa specie :wall:
 

Ronzy2001

Forumer storico
operativamente non è certo utilizzabile, ma dite che rientra proprio nella normalità delle probabilià che una martingala qualsiasi non esaurisca il capitale di 100.000 $ su 300 trade di quel tipo?

Su un cross come l'euro dollaro non è così anomalo, vista la natura "swingarola" dello strumento....
 

pprllo

Nuovo forumer
Che poi su una perdita del genere qualunque broker ti chiamerebbe lo stop out e tanti saluti.

@Cren: Usa il metodo del rilassamento. Prendi un punto a caso, lo verifichi su tutte le condizioni, prendi la condizione che "sballa" di piu', proietti il punto sull'iperpiano che rappresenta la condizione, ripeti.
Nota: per proiettare il punto sull'iperpiano ti basta spostare il punto lungo il vettore dell'iperpiano fino ad azzerare lo "sballamento".
PPS: Se dopo 100.000 iterazioni o giu' di li' non trovi un punto che soddisfa tutte le condizioni probabilmente sono sbagliate le condizioni. Per aiutarti a debuggare ti conviene metterti in output il numero della riga che si sta "rilassando" ed il punto risultante, perche' di solito avviene che il metodo va in loop infinito sulle condizioni "sospette".

Ad es., con le condizioni che hai scritto, supponiamo di partire:
P = [1, 2, 3]
1 + 2 + 3 = 6 >= 0 OK
-1 - 2 - 3 + 1 = - 5 >= 0 STICAZZI
Spostiamo lungo il vettore [-1, -1, -1] fino a rispettare la condizione:
(P + a*[-1, -1, -1]) * [-1, -1, -1] + 1 = 0
a * |[-1, -1, -1]|^2 = 5
a = 5/3
P' = [1, 2, 3] + 5/3 * [-1, -1, -1] = [-2/3, 1/3, 4/3]
-2/3 + 1/3 + 4/3 = 1 >= 0 OK
2/3 - 1/3 - 4/3 + 1 = 0 >= 0 OK
FINE

PPPS: Se la condizione e' > (strettamente maggiore), invece di fare
(P + a*[-1, -1, -1]) * [-1, -1, -1] + 1 = 0
fai
(P + a*[-1, -1, -1]) * [-1, -1, -1] + 1 = epsilon
con epsilon piccolo a piacere.
Usare questa forma puo' anche aiutare ad accelerare la convergenza del metodo, che a volte puo' essere lentissima anche per problemi semplicissimi (es. nel piano, due rette ad angolo acuto, punto di partenza dell'algoritmo nella regione che rigetta entrambe le condizioni, il punto continua a "rimbalzare" avvicinandosi asintoticamente al punto d'incontro delle due rette, ma ci mette un'eternita', se invece aggiungi una epsilon a ogni "rimbalzo" ci mette molto molto di meno).
 
Ultima modifica:

Cren

Forumer storico
Trovata soluzione solo a ragionamento (GiuliaP sarebbe così fiera di me... :D).

Si tratta di vincoli in forma lineare, pertanto il limite superiore alla regione ammissibile non è necessario: è sufficiente lasciare libero l'algoritmo di produrre il valore dei parametri che preferisce con vincoli di non negatività e normalizzare i risultati alla fine "scalandoli" all'interno della regione ammissibile.

Che pollo che sono... però funziona (provato numericamente)! :lol:

P.S.: nel frattempo qualcuno rimproveri cammello che ha sicuramente qualche avviso di notifica: non appena un'anima pia scrive qualcosa qui, lui si palesa in sordina tra i lettori... non si fanno queste cose :noo:
 
Ultima modifica:

Paolo1956

Forumer attivo
Trovata soluzione solo a ragionamento (GiuliaP sarebbe così fiera di me... :D).

Si tratta di vincoli in forma lineare, pertanto il limite superiore alla regione ammissibile non è necessario: è sufficiente lasciare libero l'algoritmo di produrre il valore dei parametri che preferisce con vincoli di non negatività e normalizzare i risultati alla fine "scalandoli" all'interno della regione ammissibile.

Non ci ho capito una cippa in quello che hai scritto.

Ricordati però che se fai trasformazioni sulla regione ammissibile, perdi l'uniforme distribuzione all'interno della stessa (ovviamente).

:)
 

skew

Nuovo forumer
domanda:

ma se la funzione obiettivo non è "smooth enough" (e la tua non dovrebbe esserlo, visto che è il risultato di una simulazione) i metodi tradizionali non si dovrebbero inchiodare? Non hai informazioni sul gradiente...

mi sa che ti devi buttare su qualche algoritmo di ottimizzazione stocastica... vedi Generalized Pattern Search o qualcosa del genere...
 

Cren

Forumer storico
ma se la funzione obiettivo non è "smooth enough" (e la tua non dovrebbe esserlo, visto che è il risultato di una simulazione) i metodi tradizionali non si dovrebbero inchiodare? Non hai informazioni sul gradiente...
Ale, purtroppo non posso darti certezze perchè da lì andiamo oltre le mie competenze, solo raccontarti che la procedura usata offre la possibilità di ricavare il gradiente per via numerica in automatico se si sceglie di usare il metodo Nelder-Mead.

Per quanto riguarda la "morbidezza" della funzione, ho fatto diverse simulazioni partendo dai valori iniziali più disparati e ho quasi sempre ottenuto risultati coerenti con quello teorico, anche perchè il "processo stocastico" che simulo è davvero robetta (estrazioni casuali da una Normale multivariata) persino paragonato ai processi stocastici più semplici (GBM e CIR), niente di impossibile.

Insomma, credo che pressapoco dovrei esserci :)
...supponiamo di partire:
P = [1, 2, 3]
1 + 2 + 3 = 6 >= 0 OK
-1 - 2 - 3 + 1 = - 5 >= 0 STICAZZI
Sei un grande :clap:
Spostiamo lungo il vettore [-1, -1, -1] fino a rispettare la condizione:
(P + a*[-1, -1, -1]) * [-1, -1, -1] + 1 = 0
a * |[-1, -1, -1]|^2 = 5
Quella nella terza riga immagino sia la norma del vettore, piuttosto non ho capito il perchè della relazione nella seconda riga.

Chiaramente a livello di conto mi torna, è la ratio della procedura iniziale che mi sfugge.
 
Ultima modifica:

Paolo1956

Forumer attivo
A partire da P si sposta ortogonalmente al secondo iperpiano fino a incontrarlo.

La seconda condizione è lo sviluppo della prima.

Ciaoooooo
 

Users who are viewing this thread

Alto