Processo di calcolo automatico delle curve ROC

Da Wikiversità, l'apprendimento libero.
Jump to navigation Jump to search
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%.

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 [modifica]

Per la determinazione della variabile , una volta stabilita la probabiltà 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

Note[modifica]

  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