Vantaggio dell'analisi statistica non deterministica?

0

Sto lavorando con una libreria Java utilizzata per identificare la lingua di un determinato testo. Si basa su un'analisi n-gram del testo per restituire un insieme di lingue che potrebbe essere e la "sicurezza" che è quella lingua.

Ho scritto una classe wrapper per eseguirlo, tuttavia, non è deterministico (i risultati sono generalmente non corretti con l'input di < 200 caratteri, non preoccuparti per questo):

C:\wamp\www\langdetect [master]> java Detect viking rowboat
af:0.8571411945873898 lt:0.1428569473433962
C:\wamp\www\langdetect [master]> java Detect viking rowboat
af:0.5714268373011915 sw:0.2857137271014559 lt:0.14285898741269984
C:\wamp\www\langdetect [master]> java Detect viking rowboat
af:0.9999958253321346

L'analisi non è deterministica per impostazione predefinita (può essere definita deterministica in questo modo: link ) ma la mia domanda è questa:

C'è qualche vantaggio che questa analisi sia non deterministica?

L'unico vantaggio che posso pensare è che un algoritmo deterministico, statisticamente, sarà errato in una percentuale del tempo (anche con input validi), mentre non deterministico rimuove questa garanzia (ma a volte non è corretta). Questo ha senso?

    
posta Will 03.06.2015 - 22:00
fonte

2 risposte

1

Solitamente il vantaggio derivante dall'uso di algoritmi non deterministici è semplice: Runtime.

È spesso usato negli algoritmi Monte-Carlo , che fondamentalmente provano un numero predefinito di possibilità (es. "È questo testo tedesco? "-" No "," Questo testo è in spagnolo? "-" No "," Beh, non ne ho idea ".). Mentre la soluzione deterministica sarebbe quella di provare ogni singola possibilità, che a volte è impraticabile.

Tuttavia, questo è non nel tuo esempio . Nella tua biblioteca un insieme di numeri casuali è generato da un seme. Se questo seme è calcolato a caso, il ralgorithm non è deterministico e produrrà risultati diversi per diverse esecuzioni.

Se il tuo seme è costante (in questo esempio sarebbe zero), tuttavia, produrrà lo stesso risultato ad ogni esecuzione. Ciò non solo non migliora il risultato, ma rimuove anche un importante vantaggio: più spesso esegui il programma non deterministico, migliori saranno i tuoi risultati. Questo non si applica all'approccio deterministico.

Quindi, perché dovresti usare l'approccio deterministico allora? Un esempio a cui posso pensare è il test. I test unitari sui risultati casuali sono praticamente il dolore più grande che puoi provare. Immagina di apportare una modifica in una parte del programma e per qualche motivo il tuo test dell'unità fallisce. Lo fai di nuovo e fallisce di nuovo. Quindi inizi a scavare, dove non c'è niente da trovare.

TL; DR:

Se vuoi ottenere buoni risultati: esegui il tuo programma non deterministico (probabilmente più volte).

Se vuoi ottenere risultati riproducibili (ad es. test): usa l'approccio deterministico.

    
risposta data 16.07.2015 - 13:51
fonte
0

Sembra che restituisca risultati prima che i risultati siano realmente convergenti. Troverò i risultati variabili preoccupanti e inaffidabili. La correzione dovrebbe essere quella di eseguire più campioni, non utilizzare un algoritmo "deterministico" che restituisca costantemente lo stesso risultato fuorviante. Inoltre, se i risultati non sono attendibili con stringhe di input brevi, non dovresti fidarti di percentuali molto sicure come 0.99999: scarterei i numeri di confidenza, o assumo barre di errore come 0.99999 ± 0.9.

    
risposta data 03.06.2015 - 22:17
fonte

Leggi altre domande sui tag