Как подогнать список 3D-данных к функции нормального распределения 2D (желательно в Python) - PullRequest
2 голосов
/ 05 января 2012

Я ищу любой скрипт (предпочтительно Python) для вычисления двухмерной функции нормального распределения серий трехмерных данных.Если такого не существует, я был бы признателен за любой код или псевдокод, который кто-то мог бы предоставить.

На входе будет представлен список троек, например, так:и стандартное отклонение / дисперсия двумерного нормального распределения, которое наиболее точно представляет данные, чтобы иметь возможность манипулировать ими, а затем воссоздавать их.

пример

Для простоты я остановлюсь на использовании одномерной нормальной функции.Если у меня есть следующие двумерные точки данных

[
    [-4, 0.0001],
    [-3, 0.0044],
    [-2, 0.054 ],
    [-1, 0.242 ],
    [0 , 0.3989],
    [1 , 0.242 ],
    [2 , 0.054 ],
    [3 , 0.0044],
    [4 , 0.0001]
]

, я ожидаю, что скрипт выдаст

mean = 0.0
standard deviation = 1.0
variance = 1.0

Таким образом, если я захочу, например, изменить стандартное отклонение от *От 1018 * до sd = 2.0, я могу изменить кривую, воссоздать ее, выбрать точки -4...4 и переписать значения в данные следующим образом.

[
    [-4, 0.027 ],
    [-3, 0.0648],
    [-2, 0.121 ],
    [-1, 0.176 ],
    [0 , 0.1995],
    [1 , 0.176 ],
    [2 , 0.121 ],
    [3 , 0.0648],
    [4 , 0.027 ]
]

Теперь мой вопрос: как мнесделать это со списком трехмерных точек, которые близко представляют двумерное нормальное распределение?


Я бы предпочел сделать это в Python или вызвать скрипт оболочки.Однако я не был бы против использования таких программ, как MatLab или Maple.

1 Ответ

2 голосов
/ 05 января 2012

В соответствии с примером 1D нам дана последовательность значений (xi, yi), где значения xi являются векторами измерения n (n = 1 или n = 2), а значения yi скаляры. Мы хотим найти среднее mu и ковариационную матрицу sigma для гауссовой функции f размерности n, чтобы значения f(xi) были близки к значениям yi.

Чтобы решить эту проблему, мы должны определить, что означает close . Мы можем выбрать, например, чтобы минимизировать сумму квадратов (yi - f(xi))^2. Результирующая задача нелинейной оптимизации в mu и sigma может быть решена с помощью итерационного метода, такого как Левенберг – Марквардт .


Если используется MatLab, см. Их Руководство по монтажу кривой , в частности, раздел Нелинейный монтаж кривой и примеры lsqnonlin и lsqcurvefit. Если используется Python, вы можете найти привязки библиотек к реализациям Левенберга – Марквардта в C / C ++ или Fortran.

Какой бы подход ни использовался, я рекомендую сначала опробовать решатель на примере 1D.

Другим важным ресурсом является Сборник данных SciPy по обработке данных , который включает в себя раздел по , подходящему для 2D гауссовского .

...