Интеграция по региону, чтобы найти вероятность - PullRequest
0 голосов
/ 09 октября 2018

У меня есть совместный PDF p(x,y), где 0<x<1, 0<y<1.Я хочу найти вероятность посадки в определенном регионе в пространстве параметров.Пространство параметров разделено следующим образом:

enter image description here

Деление регулируется списком flist.Точки, где flist[i][j] = 1 окрашены в желтый цвет, flist[i][j]=-1 окрашены в фиолетовый и flist[i][j]=0 окрашены в бирюзовый.Деление пространства является дискретным, то есть нет функции g(x,y), которая возвращает 1,-1,0, а список flist был рассчитан с конечным разрешением, что не имеет отношения к вопросу.

Списокflist не было сгенерировано распределением вероятностей .Это независимая вещь, используемая только для разделения пространства параметров.

Теперь, учитывая PDF p(x,y), я хочу найти вероятность посадки в желтой зоне.Мне нужно интегрировать по желтой зоне, чтобы найти это значение.Дело в том, что у меня нет формулы для кривой, которая отделяет желтую область от остальных.Я боюсь использовать тяжелые инструменты машинного обучения, так как я не знаком с ними.

Есть ли более простой способ, используя список flist, интегрировать в желтую область?

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете использовать вхождение каждого цвета / числа во флисте в качестве индикации.Я предполагаю, что flist - это двумерный список.

import numpy as np

farray = np.array(flist)
prob_yellow = (farray==1).sum()/ (farray.shape[0] * farray.shape[1])
prob_purple = (farray==-1).sum()/ (farray.shape[0] * farray.shape[1])
prob_turqoise = (farray==0).sum()/ (farray.shape[0] * farray.shape[1])

Другой способ - это численная интеграция, если у вас есть массивы x и y линий, разделяющих цветные плоскости.Например:

from scipy import integrate
import numpy as np

x = np.arange(0,1,0.1)
y_purple = np.exp(-x)
prob_purple = integrate.simps(y_purple,x)

Редактировать: теперь я понимаю, что флист распределяется неравномерно.В этом случае я сначала преобразовал бы его в равномерно распределенный список, а затем использовал первый упомянутый метод.

Я создаю точки и флист:

points = np.array([[0,0],[0.4, 0.5],[0.5, 0.6],[1, 1]])
flist = np.random.randint(-1,2, size=len(points))

Затем выполняю интерполяцию:

import scipy.interpolate as intp
fintp = intp.NearestNDInterpolator(points, flist)

x = np.linspace(0,1,6)
y = np.linspace(0,1,6)
xx, yy = np.meshgrid(x, y)
positions = np.column_stack((xx.ravel(),yy.ravel()))

f_evenly = fintp(positions).reshape(len(x), len(y))

и вычисляю вероятность:

prob_yellow = (f_evenly==1).sum()/ (f_evenly.shape[0] * f_evenly.shape[1])
prob_turqoise = (f_evenly==0).sum()/ (f_evenly.shape[0] * f_evenly.shape[1])
prob_purple = (f_evenly==-1).sum()/ (f_evenly.shape[0] * f_evenly.shape[1])

Проверьте результат:

plt.imshow(f_evenly, extent=[0,1,0,1])
plt.show()
print('probabilities: \nyellow: %.2f\nturqoise: %.2f\npurple: %.2f'%(prob_yellow,  prob_turqoise, prob_purple))

Result

probabilities: 
yellow: 0.47
turqoise: 0.36
purple: 0.17
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...