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:

lezione
lezione
Processo di calcolo automatico delle curve ROC
Tipo di risorsa Tipo: lezione
Materia di appartenenza Materia: Sistemi di calcolo automatico
Avanzamento Avanzamento: lezione completa al 100%

Utilizzo delle curve ROC per la determinazione della variabile d

modifica

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

 
figura 1  

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

modifica

Un 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

modifica

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

 
figura 2 Pannello di calcolo

Esempio di calcolo

modifica

Premessa:

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:

 
figura 3 Pannello di calcolo con dati elaborati

Il listato della routine di calcolo in Visual Basic

modifica

In ambiente di sviluppo Visual Basic inserimento degli oggetti nel Form come indicato in figura 4 nel rispetto della numerazione indicata in rosso.[6].

 
figura 4 Pannello di controllo

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
  1. (Receiver Operating Characteristic, anche note come Relative Operating Characteristic)
  2. La probabiità di falso allarme è indicata indifferentemente con   o P.fa.
  3. La probabilità di scoperta è indicata indifferentemente con   o P.riv.
  4. La fase di calcolo di   è relativamente veloce
  5. La fase di calcolo di   è lenta; il tempo dipende naturalmente dalla velocità della CPU del P.C.
  6. Il listato del programma non è commentato
  7. 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