আমরা প্রথমে কেবলমাত্র সাধারণ বিতরণের কিছু মুহুর্তের উপর নির্ভর করতে এটি হ্রাস করতে পারি: অবশ্যই নোট করুন যে
E[Z+]=[E[(Zi)+]]iCov(Z+)=[Cov((Zi)+,(Zj)+)]ij,
এবং কারণ আমরা একটি সাধারণ বিতরণের কিছু মাত্রার সমন্বয়-বর্ধিত রূপান্তর করছি, আমরা কেবল 1 ডি সেন্সর করা স্বাভাবিকের গড় এবং বৈকল্পিকতা এবং দুটি 2 ডি সেন্সর হওয়া নরমালদের সহজাততা সম্পর্কে চিন্তা করা দরকার।
আমরা এর থেকে কিছু ফলাফল ব্যবহার করব
এস রোজেনবাউম (1961)। একটি কাটা কাটা বাইভারিয়েট সাধারণ বিতরণের মুহুর্তগুলি । জেআরএসএস বি, খণ্ড 23 পিপি 405-408। ( jstor )
রোজেনবাউম
এবং ইভেন্টে ছাঁটাই বিবেচনায় ।
[X~Y~]∼N([00],[1ρρ1]),
V={X~≥aX,Y~≥aY}
বিশেষত, আমরা নিম্নলিখিত তিনটি ফলাফল ব্যবহার করব, তার (1), (3) এবং (5)। প্রথমে নিম্নলিখিতগুলি সংজ্ঞায়িত করুন:
কুইএক্স= ϕ (একটিএক্স)কুইY= ϕ (একটিY)প্রশ্নঃএক্স= Φ ( -একটিএক্স)প্রশ্নঃY= Φ ( -একটিY)আরx y= Φ (ρএকটিএক্স-একটিY1 -ρ2-----√)আরYএক্স= Φ (ρএকটিY-একটিএক্স1 -ρ2-----√)Rx y=1 -ρ2-----√2 π--√ϕ (জ2- 2 ρ এইচ কে +ট21 -ρ2-------------√)
এখন, রোজেনবাউম দেখায় যে:
জনসংযোগ ( ভি) ই[এক্স~∣ ভি]জনসংযোগ ( ভি) ই[এক্স~2∣ ভি]জনসংযোগ ( ভি) ই[এক্স~ওয়াই~∣ ভি]=কুইএক্সআরx y+ + ρকুইYআরYএক্স= Pr ( ভী) +একটিএক্সকুইএক্সআরx y+ +ρ2একটিYকুইYআরYএক্স+ + ρRx y= Ρ Pr ( ভী) + + Ρএকটিএক্সকুইএক্সআরx y+ + ρএকটিYকুইYআরYএক্স+ +Rx y।(1)(3)(5)
(1) এবং (3) এর বিশেষ ক্ষেত্রে , অর্থাত্ 1 ডি ট্রাঙ্কেশন:
সাথে বিবেচনাএকটিY= - ∞
জনসংযোগ ( ভি) ই[এক্স~∣ ভি]জনসংযোগ ( ভি) ই[এক্স~2∣ ভি]=কুইএক্স= Pr ( ভী) =প্রশ্নঃএক্স।(*)(**)
আমরা এখন বিবেচনা করতে চাই
[এক্সওয়াই]=[μxμy]+[σx00σy][X~Y~]∼N([μXμY],[σ2xρσxσyρσxσyσ2y])=N(μ,Σ).
আমরা
যা এবং of মান যখন , ।
ax=−μxσxay=−μyσy,
X~Y~X=0Y=0
এখন, (*) ব্যবহার করে আমরা
এবং উভয় (*) এবং (**) ফলন using
যাতে
E[X+]=Pr(X+>0)E[X∣X>0]+Pr(X+=0)0=Pr(X>0)(μx+σxE[X~∣X~≥ax])=Qxμx+qxσx,
E[X2+]=Pr(X+>0)E[X2∣X>0]+Pr(X+=0)0=Pr(X~≥ax)E[(μx+σxX~)2∣X~≥ax]=Pr(X~≥ax)E[μ2x+μxσxX~+σ2xX~2∣X~≥ax]=Qxμ2x+qxμxσx+Qxσ2x
Var[X+]=E[X2+]−E[X+]2=Qxμ2x+qxμxσx+Qxσ2x−Q2xμ2x−q2xσ2x−2qxQxμxσx=Qx(1−Qx)μ2x+(1−2Qx)qxμxσx+(Qx−q2x)σ2x.
জন্য , আমরা প্রয়োজন হবে
Cov(X+,Y+)
E[X+Y+]=Pr(V)E[XY∣V]+Pr(¬V)0=Pr(V)E[(μx+σxX~)(μy+σyY~)∣V]=μxμyPr(V)+μyσxPr(V)E[X~∣V]+μxσyPr(V)E[Y~∣V]+σxσyPr(V)E[X~Y~∣V]=μxμyPr(V)+μyσx(qxRxy+ρqyRyx)+μxσy(ρqxRxy+qyRyx)+σxσy(ρPr(V)−ρμxqxRxy/σx−ρμyqyRyx/σy+rxy)=(μxμy+σxσyρ)Pr(V)+(μyσx+μxσyρ−ρμxσy)qxRxy+(μyσxρ+μxσy−ρμyσx)qyRyx+σxσyrxy=(μxμy+Σxy)Pr(V)+μyσxqxRxy+μxσyqyRyx+σxσyrxy,
এবং তারপরে বিয়োগ করে আমরা পেয়ে যাব
E[X+]E[Y+]Cov(X+,Y+)=(μxμy+Σxy)Pr(V)+μyσxqxRxy+μxσyqyRyx+σxσyrxy−(Qxμx+qxσx)(Qyμy+qyσy).
মুহুর্তগুলি গণনা করার জন্য এখানে কিছু পাইথন কোড রয়েছে:
import numpy as np
from scipy import stats
def relu_mvn_mean_cov(mu, Sigma):
mu = np.asarray(mu, dtype=float)
Sigma = np.asarray(Sigma, dtype=float)
d, = mu.shape
assert Sigma.shape == (d, d)
x = (slice(None), np.newaxis)
y = (np.newaxis, slice(None))
sigma2s = np.diagonal(Sigma)
sigmas = np.sqrt(sigma2s)
rhos = Sigma / sigmas[x] / sigmas[y]
prob = np.empty((d, d)) # prob[i, j] = Pr(X_i > 0, X_j > 0)
zero = np.zeros(d)
for i in range(d):
prob[i, i] = np.nan
for j in range(i + 1, d):
# Pr(X > 0) = Pr(-X < 0); X ~ N(mu, S) => -X ~ N(-mu, S)
s = [i, j]
prob[i, j] = prob[j, i] = stats.multivariate_normal.cdf(
zero[s], mean=-mu[s], cov=Sigma[np.ix_(s, s)])
mu_sigs = mu / sigmas
Q = stats.norm.cdf(mu_sigs)
q = stats.norm.pdf(mu_sigs)
mean = Q * mu + q * sigmas
# rho_cs is sqrt(1 - rhos**2); but don't calculate diagonal, because
# it'll just be zero and we're dividing by it (but not using result)
# use inf instead of nan; stats.norm.cdf doesn't like nan inputs
rho_cs = 1 - rhos**2
np.fill_diagonal(rho_cs, np.inf)
np.sqrt(rho_cs, out=rho_cs)
R = stats.norm.cdf((mu_sigs[y] - rhos * mu_sigs[x]) / rho_cs)
mu_sigs_sq = mu_sigs ** 2
r_num = mu_sigs_sq[x] + mu_sigs_sq[y] - 2 * rhos * mu_sigs[x] * mu_sigs[y]
np.fill_diagonal(r_num, 1) # don't want slightly negative numerator here
r = rho_cs / np.sqrt(2 * np.pi) * stats.norm.pdf(np.sqrt(r_num) / rho_cs)
bit = mu[y] * sigmas[x] * q[x] * R
cov = (
(mu[x] * mu[y] + Sigma) * prob
+ bit + bit.T
+ sigmas[x] * sigmas[y] * r
- mean[x] * mean[y])
cov[range(d), range(d)] = (
Q * (1 - Q) * mu**2 + (1 - 2 * Q) * q * mu * sigmas
+ (Q - q**2) * sigma2s)
return mean, cov
এবং এটি কাজ করে একটি মন্টি কার্লো পরীক্ষা:
np.random.seed(12)
d = 4
mu = np.random.randn(d)
L = np.random.randn(d, d)
Sigma = L.T.dot(L)
dist = stats.multivariate_normal(mu, Sigma)
mn, cov = relu_mvn_mean_cov(mu, Sigma)
samps = dist.rvs(10**7)
mn_est = samps.mean(axis=0)
cov_est = np.cov(samps, rowvar=False)
print(np.max(np.abs(mn - mn_est)), np.max(np.abs(cov - cov_est)))
যা দেয় 0.000572145310512 0.00298692620286
, ইঙ্গিত করে যে দাবি করা প্রত্যাশা এবং কোভেরিয়েন্স মন্টি কার্লো অনুমানের সাথে মিলিত হয়েছে ( নমুনার ভিত্তিতে )।10,000,000