Processo di calcolo automatico delle curve ROC
Nel calcolo delle caratteristiche dei sistemi di correlazione sono sovente impiegate le curve ROC [1] per la valutazione del parametro che è una delle variabili che concorrono nel computo del Differenziale di riconoscimento:
Utilizzo delle curve ROC per la determinazione della variabile d
modificaPer la determinazione della variabile , una volta stabilita la probabilità di falso allarme [2] accettata e la probabilità di scoperta [3] voluta, si procede all'individuazione del tra le diverse rette disponibili nel diagramma delle curve ROC.
In figura 1 una particolare traccia delle curve ROC relativa al solo valore ; curva estrapolata dalla famiglia delle curve standard tra e :
Il grafico mostra come l’intersezione tra la retta di ascissa e la retta di ordinata individui un punto della retta .
Dato che le curve ROC disponibili, su diversi testi relativi alle tematiche del sonar, mostrano soltanto sei curve per i valori: 1 ; 4 ; 9 ; 16 ; 25 ; 36 si comprende come sia estremamente difficile estrapolare valori del tra curve adiacenti.
Una delle soluzioni del problema
modificaUn metodo per il calcolo del parametro consiste nella soluzione delle due equazioni trascendenti:
dove nella prima, impostato il valore della accettata, si determina la variabile ; nella seconda, inserendo il valore di calcolato in precedenza e impostando il valore di voluto si ottiene il valore del relativo alla coppia : .
La soluzione delle due equazioni è affidata a routine di calcolo iterativo da sviluppare su di un P.C. con le seguenti limitazioni:
- variabile da a
Le routine di calcolo
modificaLa routine di calcolo implementata nel P.C. è scritta in linguaggio Visual Basic, copiando gli algoritmi dal listato del programma in calce si può realizzare la routine in qualsiasi linguaggio.
Il pannello di controllo del calcolatore è mostrato in figura 2:
Esempio di calcolo
modificaPremessa:
Nelle due sezioni di calcolo ( sinistra e destra ), dopo l'esecuzione della routine, vengono indicati come dati calcolati valori di e non sempre identici a quelli impostati, ciò dipende dall'anello di calcolo iterativo che procede a passi discreti, seppur piccoli, per non impiegare tempi di elaborazione eccessivi.
Più precisamente :
- nella sezione di sinistra il valore di corrisponde alla indicata come "'dato calcolato'" e non alla "impostata" anche se tra i due valori le differenze sono minime.
- nella sezione di destra il valore di corrisponde alla indicata come "dato calcolato" e non alla "impostata" , anche in questo caso le differenze tra i due valori sono minime.
Un semplice esempio d'impostazione dati e calcolo.
S'inizia nella sezione di sinistra:
- Se la probabilità di falso allarme accettata è: si digita tale valore nel TextBox e si preme il pulsante verde dati a calcolo, il pulsante cambia colore in rosso nella fase [4] di calcolo, una volta ultimata la fase il valore di compare nel nello shape del pannello di calcolo assieme al valore di , valore di ricalcolo cmpatibile con e il pulsante diventa verde.
In automatico il valore di è trasferito alla sezione di calcolo di destra.
Si agisce ora nella sezione di destra:
- Se la probabilità di scoperta voluta è: si digita tale valore nel TextBox e si preme il pulsante verde dati a calcolo, il pulsante cambia colore in rosso nella fase[5] di calcolo, una volta ultimata il valore di compare nello shape del pannello di calcolo assieme al valore di , valore di ricalcolo compatibile con e il pulsante diventa verde.
Il pannello relativo all'esempio è mostrato in figura 3:
Il listato della routine di calcolo in Visual Basic
modificaIn ambiente di sviluppo Visual Basic inserimento degli oggetti nel Form come indicato in figura 4 nel rispetto della numerazione indicata in rosso.[6].
Azione di copia e incolla [7] del programma:
Dim y As Double Dim p As Double Dim i As Double Dim erfx As Double Dim erfCx As Double Dim y1 As Double Dim p1 As Double Dim i1 As Double Dim erfx1 As Double Dim erfCx1 As Double Dim q As Double Dim d1 As Double Dim d2 As Double Dim pfa As Double Dim pd As Double
Private Sub text1_KeyPress(KeyAscii As Integer) If InStr("0123456789.-" + Chr(&H8), Chr(KeyAscii)) = 0 Then KeyAscii = 0 End Sub Private Sub text2_KeyPress(KeyAscii As Integer) If InStr("0123456789.-" + Chr(&H8), Chr(KeyAscii)) = 0 Then KeyAscii = 0 End Sub
Private Sub Command1_Click() Label14.Caption = "" Label16.Caption = "" Label20.Caption = "" Label27.Caption = "" Text2.Text = "" Command1.BackColor = vbRed Label19.Caption = "" Label11.Caption = "" s1 End Sub
Sub s1() 'ROUTINE PER IL CALCOLO ITERATIVO DEL q = f(pFA) Cls pFAvoluto = Val(Text1.Text) If pFAvoluto = 0 Then GoTo fineroutine If pFAvoluto > 49.5 Then Text1.Text = "" If pFAvoluto > 49.5 Then GoTo fineroutine
'ROUTINE PER IL CALCOLO DELLA Pfa '=======dati d'ingresso========= '(q solo per PFA); (q e d solo per Pd) d = 4 For q = 0 To 3 Step 0.01 'valore del rapporto (T/deviaz.st.) i = 0 e = 2.718281828 s = 0.0001 a = q / Sqr(2) ini: For x = 0 To a Step s y = e ^ -((x) ^ 2) p = s * y i = i + p erfx = (2 / Sqr(3.141592654)) * i Next erfCx = 1 - erfx pfa = 100 * erfCx / 2 If pfa < pFAvoluto Then GoTo fine Next q fine: fineroutine: Label19.Caption = Format(pfa, "##.####") Label11.Caption = Format(q, "##.####") Command1.BackColor = vbGreen End Sub
Private Sub Command2_Click() Command2.BackColor = vbRed Label14.Caption = "" Label16.Caption = "" End Sub
Sub s2() 'ROUTINE PER IL CALCOLO ITERATIVO DEL d = f(q, pD) pdvoluto = Val(Text2.Text) If pdvoluto < 0 Then GoTo finerout If pdvoluto < pfa Then Text2.Text = "" If pdvoluto < pfa Then GoTo finerout For d1 = 0 To 30 Step 0.0001 e = 2.718281828 s = 0.001 a1 = Abs(q - Sqr(d1)) / Sqr(2) i1 = 0 For x = 0 To a1 Step s y1 = e ^ -((x) ^ 2) p1 = s * y1 i1 = i1 + p1 Next erfx1 = (2 / Sqr(3.14159)) * i1 If (q - Sqr(d1)) > 0 Then erfCx1 = 1 - erfx1 If (q - Sqr(d1)) < 0 Then erfCx1 = 1 + erfx1 pd = 100 * erfCx1 / 2 If pd > pdvoluto Then GoTo fine Next fine: Label14.Caption = Format(pd, " ##.##") Label16.Caption = Format(d1, "##.#####") finerout: Command2.BackColor = vbGreen End Sub
Sub s3() 'ROUTINE PER IL CALCOLO DEL del p(D) = f(q, d) If dvoluto < 0 Then GoTo finerout If dvoluto < 0 Then Text2.Text = "" If dvoluto > 40 Then GoTo finerout e = 2.718281828 s = 0.0001 d2 = dvoluto a1 = Abs(q - Sqr(d2)) / Sqr(2) i1 = 0 For x = 0 To a1 Step s y1 = e ^ -((x) ^ 2) p1 = s * y1 i1 = i1 + p1 Next erfx1 = (2 / Sqr(3.14159)) * i1 If (q - Sqr(d2)) > 0 Then erfCx1 = 1 - erfx1 If (q - Sqr(d2)) < 0 Then erfCx1 = 1 + erfx1 pd = 100 * erfCx1 / 2 fine: Label27.Caption = Format(pd, " ##.##") finerout: End Sub
Private Sub Timer1_Timer() If Command2.BackColor = vbRed Then s2 End Sub
Note
modifica- ↑ (Receiver Operating Characteristic, anche note come Relative Operating Characteristic)
- ↑ La probabiità di falso allarme è indicata indifferentemente con o P.fa.
- ↑ La probabilità di scoperta è indicata indifferentemente con o P.riv.
- ↑ La fase di calcolo di è relativamente veloce
- ↑ La fase di calcolo di è lenta; il tempo dipende naturalmente dalla velocità della CPU del P.C.
- ↑ Il listato del programma non è commentato
- ↑ Prestare attenzione alle righe di programma che in base alla pagina possono essere scritte in parte a capo
Bibliografia
modifica- Cesare Del Turco, La correlazione , Collana scientifica ed. Moderna La Spezia,1993