Correlazione tra due curve [chiuso]

6

Sto cercando di risolvere un problema matematico in due modi diversi e l'output è una curva in entrambi i casi. Voglio confrontare queste curve di output per similarità in Python. C'è qualche funzione o struttura che fornisce questa funzionalità?

Grazie.

    
posta user14299 11.08.2011 - 13:05
fonte

1 risposta

8

Il classico coefficiente di correlazione di Pearson è forse la misura più popolare della similarità della curva. SciPy 's pearsonr ti dà questo.

Il coefficiente di correlazione misura la somiglianza forma ed è (in qualche modo, non completamente) insensibile alla polarizzazione e al ridimensionamento.

Un altro modo per misurare la similarità è misurare direttamente la differenza media delle curve. Puoi utilizzare la differenza RMS . Non sono necessarie librerie, semplicemente qualcosa di simile:

# rms difference of vectors a and b:
rmsdiff = 0
for (x, y) in zip(a, b):
    rmsdiff += (x - y) ** 2  # NOTE: overflow danger if the vectors are long!
rmsdiff = math.sqrt(rmsdiff / min(len(a), len(b))

La differenza RMS accentua le deviazioni di grandi dimensioni, anche se sono locali, e maschera le piccole deviazioni, anche se sono globali. Ad esempio, i vettori

[1 2 3 4 5] and [2 1 4 3 6]

sono più simili in senso RMS di

[1 2 3 4 5] and [1 2 3 4 2]

Non esiste una sola misura "giusta" di somiglianza. Diversi metodi accentuano diverse (dis) somiglianze.

    
risposta data 11.08.2011 - 13:27
fonte

Leggi altre domande sui tag