Precisione proporzionale alle dimensioni

1

Ho elenchi di dati che sto cercando di organizzare dove la lista con la minima variazione / maggior precisione / più vicina alla media e la maggior parte dei dati è la più votata. Alcuni degli elenchi sono come 2000 numeri lunghi e altri hanno solo 1 numero. Ovviamente la media aritmetica di una lista con un numero sarà esattamente il valore del numero uno. Qualsiasi valore individuale da un elenco di 2000 numeri potrebbe non essere il più vicino alla media aritmetica. Quando si ordinano questi, tutti gli elenchi più piccoli avranno un punteggio più alto.

Sembra davvero facile, ma non riesco a trovare un modo per ordinare la lista in modo più proporzionato.

Esempi di elenchi:

Elenco 1

12, 20, 15, 17, 9, 19

Average of list:

12+20+15+17+9+19/6=15

Score: (15-12) + (20-15) + (15-15) + (17-15) + (15-9) + (19-15)= 20

Elenco 2

30

Average of list: 30/1=30

Score: (30-30) = 0

Elenco 3

10, 10, 10, 10, 10, 10, 10, 10, 10, 9

Score: (10-10)...etc = 1

Classifica

  • Elenco 2: Punteggio = 0

  • Elenco 3: Punteggio = 1

  • Elenco 1: Punteggio = 20

Questo è quello che ho adesso. Il problema con questo è che la lista 2 sarà in cima perché è piccola. Mi piacerebbe che la lista 3 fosse al top perché il punteggio è piccolo e ha molti membri. Non sono sicuro di come aggiungere peso alla dimensione però. L'elenco 1 è un esempio di un elenco con molti membri, nessuno dei quali è veramente vicino alla media. Ecco due cose brutte quindi dovrebbe essere in fondo.

Per quanto riguarda i valori anomali, non vengono trattati in modo diverso. Se un numero altissimo dà una lista un punteggio veramente brutto va bene.

    
posta user3525258 08.02.2015 - 02:46
fonte

1 risposta

2

Un approccio comune per misurare ciò che stai descrivendo è utilizzare la deviazione standard del set di numeri. Altri preferiscono utilizzare la varianza . Fortunatamente, calcolare entrambi è abbastanza semplice una volta compreso l'algoritmo.

Per la varianza e la deviazione standard, segui questi passaggi:

  1. Trova la media del tuo set di numeri:
float avgValue;  
float totalValue = 0;  
for( var i in setOfNumbers ){  
    totalValue += i;  
}  
avgValue = totalValue / setOfNumbers.Count();  // or use Length() instead ...
  1. Somma i quadrati della differenza rispetto al valore medio.
  2. Trova la varianza trovando la media dal punto 2.
//Find sum of squares of the difference from average
float sumOfSquares = 0;  
for( var i in setOfNumbers ){  
    float diffFromAvg = i - avgValue;  
    sumOfSquares += diffFromAvg^2; // use your language's square function  
}

//find variance
float variance = 0;  
variance = sumOfSquares / setOfNumbers.Count();  // or use Length() instead ...
  1. Se vuoi la deviazione standard, questa è la radice quadrata della varianza.

Questo link e questo link offre anche alcune spiegazioni aggiuntive per il calcolo della varianza o della deviazione standard.
Hai detto che la lista più lunga che hai è di 2000 numeri, quindi non avrai probabilmente bisogno di algoritmi alternativi. Detto questo ci sono diversi modi per calcolare la varianza e deviazione standard in un unico passaggio .
Ma come con tutte le cose nella vita, ci sono dispute oltre l'approccio migliore , così fai la tua ricerca aggiuntiva se superi gli algoritmi di base.

    
risposta data 08.02.2015 - 15:28
fonte

Leggi altre domande sui tag