вычислить, как красиво выглядит набор значений (насколько хорошо распределение) - PullRequest
0 голосов
/ 24 января 2011

этот набор значений: 1 2 3 3 4 1 выглядит довольно хорошо, если вы думаете об этом на гистограмме:

*   *
* * * *
=======
1 2 3 4 

, а это выглядит плохо .. 1 2 2 2 2 2 22 2 9 8

  *
  *
  * 
  * 
  *
  *
  *
* *           * *
=================
1 2 3 4 5 6 7 8 9

Это потому, что между 2 и 8 существует много 2 и большой разрыв ...

Мне нужно найти формулу, которая вычисляет, какхороший набор чисел выглядит .. я думаю, мне понадобится некоторая функция отклонения .. есть идеи?

спасибо

Ответы [ 3 ]

3 голосов
/ 24 января 2011

A анализ хи-квадрат - это, вероятно, то, что вы ищете.При правильном использовании он даст вам число, описывающее, насколько близок ваш дистрибутив к дискретному равномерному распределению.Дискретное равномерное распределение будет плоским (т. Е. Иметь примерно одинаковое количество элементов в каждом из блоков гистограммы), что, по-видимому, соответствует вашему определению «nice».

1 голос
/ 24 января 2011

Это кажется мне разумным, но у меня довольно ограниченные знания статистики:

from collections import Counter
def tonums( s ):
        return [int(x) for x in s if x!=' ']

def nice( nums ):
    # how far do they spread
    used_range = range(min(nums), max(nums)+1)

    # how often would each number occur if they were equally distributed
    expected = 1.0*len(nums)/len(used_range)

    # how often do they actually occur
    counter = Counter(nums)

    # compute the variance
    return sum((count-expected)**2 for item, count in counter.iteritems())


# should be fst < snd
print nice(tonums('1 2 3 3 4 1'))
print nice(tonums('1 2 2 2 2 2 2 2 2 9 8'))

# these should be 0
print nice(tonums('1'))
print nice(tonums('1 1 1 1'))

# should be equal
print nice(tonums('1 1 2 3'))
print nice(tonums('1 2 2 3'))
0 голосов
/ 24 января 2011

Ваше определение слова "хороший" довольно широкое. Я бы предложил два подхода к этому, основанные на моей интерпретации того, что вы подразумеваете под хорошим

  1. Вычислите (или оцените) как далеко от нормально распределенного ваших данных. Об этом следует обсудить в учебнике статистики или пакете статистики.
  2. Выполнить какое-то преобразование Фурье - многие высокочастотные компоненты, вероятно, не "хороши".
...