Saya dapat mengevaluasi kepadatan probabilitas log dari normal multivariat dengan melakukan

import numpy as np
import scipy.stats

scipy.stats.multivariate_normal.logpdf([0,0], mean = np.zeros(2), cov = np.eye(2))

Sekarang, saya tertarik untuk mengevaluasi kepadatan log dari titik [0,0] pada berbagai nilai rata-rata. Inilah yang saya coba

import numpy as np
import scipy.stats

grid = np.linspace(-2,2,51)
x,y = np.meshgrid(grid,grid)
scipy.stats.multivariate_normal.logpdf([0,0], mean = np.stack([x,y], axis = -1), cov = np.eye(2))

Ini menghasilkan kesalahan: ValueError: Array 'mean' must be a vector of length 5202.

Bagaimana saya bisa mengevaluasi kepadatan log dari multivariat normal pada berbagai nilai mean?

2
Demetri Pananos 5 Agustus 2019, 20:33

1 menjawab

Jawaban Terbaik

Seperti yang disarankan kesalahan Anda logpdf sedang menunggu larik 1D untuk argumen mean. Karena matriks kovarians Anda adalah 2x2, Anda harus memberinya array 2x1 ke mean.

Jika Anda ingin mengevaluasi kerapatan untuk beberapa nilai rata-rata, Anda dapat menggunakan perulangan for setelah meratakan x dan y sebagai berikut :

import numpy as np
import scipy.stats

grid = np.linspace(-2,2,51)
x,y = np.meshgrid(grid,grid)

x,y = x.flatten(), y.flatten()

res = []

for i in range(len(x)):
    x_i, y_i = x[i], y[i]
    res.append(scipy.stats.multivariate_normal.logpdf([0,0], mean =[x_i,y_i], cov = np.eye(2)))

Anda juga dapat menggunakan pemahaman daftar sebagai pengganti for loop :

res = [scipy.stats.multivariate_normal.logpdf([0,0], mean =[x_i,y_i], cov = np.eye(2)) for i in range(len(x))]

Untuk memvisualisasikan hasilnya, Anda dapat menggunakan matplotlib.pyplot :

import matplotlib.pyplot as plt

plt.figure()
plt.scatter(x,y,c=res)
plt.show()

Tetapi saya tidak melihat gunanya mencoba mengevaluasi logpdf gaussian multivariat pada beberapa nilai rata-rata.

Dalam kasus distribusi normal multivariat argumen x dan mean m memiliki peran simetris seperti yang Anda lihat dalam suku eksponensial : (x-m)^T Sigam^(-1) (x-m).

Apa yang Anda lakukan setara dengan mengevaluasi logpdf dari gaussian multivariat rata-rata [0,0] dan kovarians eye(2).

0
Adakor 6 Agustus 2019, 13:54