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 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 :
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:
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:
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].
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