একটি মাল্টিভারিয়েট স্বাভাবিক বিতরণ থেকে নমুনাগুলি আঁকার জন্য কোলেস্কি বনাম আইজেন্ডেকম্পোজিশন


16

আমি একটি নমুনা আঁকতে চাই এক্স~এন(0,Σ)উইকিপিডিয়া হয় একটি ব্যবহার পরামর্শ Cholesky বা Eigendecomposition , অর্থাত্ Σ=D1D1T বা Σ=QΛQT

এবং তাই নমুনাটি আঁকতে পারে: x=D1v বা x=QΛv যেখানে vN(0,I)

উইকিপিডিয়া পরামর্শ দেয় যে তারা উভয়ই নমুনা উত্পন্ন করার জন্য সমানভাবে ভাল, তবে কোলেস্কি পদ্ধতিতে দ্রুত গণনার সময় রয়েছে। এটা কি সত্য? বিশেষত সংখ্যায় মন্টি-কার্লো পদ্ধতি ব্যবহার করার সময়, যেখানে তির্যকগুলি সহ বিভিন্ন প্রকারের ক্রমগুলির সাথে পৃথক হতে পারে? এই সমস্যা সম্পর্কে কোন আনুষ্ঠানিক বিশ্লেষণ আছে?


1
ড্যামিয়েন, কোন প্রোগ্রামটি দ্রুত তা নিশ্চিত করার সেরা রেসিপিটি আপনার সফ্টওয়্যারটিতে এটি পরীক্ষা করে দেখুন: কোলেস্কি- এবং ইজেন- পচনগুলি বিভিন্ন বাস্তবায়নে গতিতে ভিন্ন হতে পারে। কোলেস্কি উপায়ে আরও জনপ্রিয়, আফাইক, তবে ইগন উপায়টি সম্ভবত আরও নমনীয় হতে পারে।
ttnphns

1
আমি বুঝতে Cholesky দ্রুত হতে ( উইকিপিডিয়া ) যেহেতু eigendecomposition হয় হে ( এন 3 ) ( Jacobi Eigenvalue অ্যালগরিদম যাইহোক, আমি দুই আরও সমস্যা।? (1) কি "সম্ভাব্য নমনীয়" গড় এবং (২) রূপগুলি বেশিরভাগ আদেশের দ্বারা পৃথক হয় ( 10 - 4 বনাম 10 - 9 অত্যন্ত চরম উপাদানগুলির জন্য) - এটির কি নির্বাচিত অ্যালগরিদমের উপর কোনও প্রভাব রয়েছে?O(N3/3)O(N3)104109
ড্যামিয়েন

@ ড্যামিয়েন "আরও নমনীয়" এর একটি দিক হ'ল ইগেনডিকোপজিশন, যা কোনও সমবায় ম্যাট্রিক্সের জন্য এসভিডি-র সাথে সামঞ্জস্য করে , সম্পূর্ণ ম্যাট্রিক্সের সর্বোত্তম নিম্ন-স্তরের অনুমান পেতে ছাঁটা যায়। কাটা কাটা এসভিডি সম্পূর্ণ জিনিস গণনা এবং তারপরে ছোট ছোট স্থানীয় স্থানগুলি ছড়িয়ে দেওয়ার পরিবর্তে সরাসরি গণনা করা যায় can
জিওম্যাট 22 22

স্ট্যাক ওভারফ্লোতে আমার উত্তরটি কীভাবে পড়বেন : একটি উপবৃত্তাকার কোভেরিয়েন্স প্লট (নির্মিত car::ellipse) দ্বারা উপবৃত্তের শীর্ষাংশ পাবেন । বিভিন্ন প্রয়োগে প্রশ্ন জিজ্ঞাসা করা হলেও পেছনের তত্ত্বটি একই রকম। আপনি সেখানে জ্যামিতিক ব্যাখ্যার জন্য সুন্দর পরিসংখ্যান দেখতে পাবেন।
李哲源

উত্তর:


12

সমস্যা দ্বারা চর্চিত ছিল Straka et.al জন্য Unscented কালমান ফিল্টার যা অ্যালগরিদম অংশ হিসাবে একটি বহুচলকীয় সাধারন বন্টন থেকে (নির্ণায়ক) নমুনা স্বপক্ষে। কিছু ভাগ্যের সাথে, ফলাফলগুলি মন্টে-কার্লো সমস্যার জন্য প্রযোজ্য হতে পারে।

কোলেস্কি পচন (সিডি) এবং আইজেন পচা (ইডি) - এবং সেই ক্ষেত্রে প্রকৃত ম্যাট্রিক্স স্কোয়ার রুট (এমএসআর) সমস্ত উপায় যা একটি ইতিবাচক আধা-নির্দিষ্ট ম্যাট্রিক্স (পিএসডি) ভেঙে যেতে পারে।

একটি পিডিএস ম্যাট্রিক্সের এসভিডি বিবেচনা করুন , । যেহেতু পি পিএসডি, এটি আসলে পি = ইউ এস ইউ টি এর সাথে ইডির সমান । তদুপরি, আমরা তির্যকীয় ম্যাট্রিক্সকে এর বর্গমূল দিয়ে বিভক্ত করতে পারি: P = U √ √P=USVTP=USUT, লক্ষ্য করে যেP=USSTUTS=ST

আমরা এখন একটি স্বেচ্ছাচারী orthogonal ম্যাট্রিক্স প্রবর্তন করতে পারি :O

P=USOOTSTUT=(USO)(USO)T

পছন্দমত আসলে প্রাক্কলন কর্মক্ষমতা প্রভাবিত, বিশেষ করে যখন সহভেদাংক ম্যাট্রিক্স শক্তিশালী অফ-তির্যক উপাদান নেই। 'O

কাগজ তিন পছন্দ চর্চিত :O

  • , যা ED এর সাথে সম্পর্কিত;O=I
  • থেকেকিউ পচানিএর ইউ O=Q, যা সিডির সাথে মিল; এবংUS=QR
  • যা একটি প্রতিসাম্য ম্যাট্রিক্সের দিকে পরিচালিত করে (যেমন এমএসআর)O=UT

যা থেকে অনেকগুলি বিশ্লেষণ (উদ্ধৃতি) পরে নিম্নলিখিত সিদ্ধান্তগুলি কাগজে আঁকা হয়েছিল:

  • অসামঞ্জস্যিত উপাদানগুলির সাথে একটি রূপান্তরিত র‌্যান্ডম ভেরিয়েবলের জন্য তিনটি বিবেচিত এমডি একই রকম সিগমা পয়েন্ট সরবরাহ করে এবং তাই তারা [আনসেন্টেড ট্রান্সফর্ম] সান্নিধ্যের গুণমানের উপরে প্রায় কোনও পার্থক্য রাখে না। এ জাতীয় ক্ষেত্রে স্বল্প ব্যয়ের জন্য সিডি পছন্দ করা যেতে পারে।

  • যদি এলোমেলো ভেরিয়েবলের মধ্যে পারস্পরিক সম্পর্কযুক্ত উপাদান থাকে, তবে বিভিন্ন [পচন] এর ব্যবহার পরিবর্তিত র্যান্ডম ভেরিয়েবলের গড় বা কোভারিয়েন্স ম্যাট্রিক্সের [আনসেন্টেড ট্রান্সফর্ম] সান্নিধ্যের গুণকে উল্লেখযোগ্যভাবে প্রভাবিত করতে পারে। উপরের দুটি ক্ষেত্রে প্রমাণিত হয়েছে যে [ইডি] পছন্দ করা উচিত।

  • যদি রূপান্তরিত পরিবর্তনশীল উপাদানগুলির উপাদানগুলি দৃ strong় সম্পর্ক স্থাপন করে যাতে সংশ্লিষ্ট সমবায়ু ম্যাট্রিক্সটি প্রায় একবচন হয় তবে অন্য একটি বিষয় অবশ্যই বিবেচনায় নেওয়া উচিত, যা এমডি গণনা করার অ্যালগরিদমের সংখ্যার স্থায়িত্ব। এসভিডি সিএইচডির চেয়ে প্রায় একক কোভেরিয়েন্স ম্যাট্রিক্সের জন্য সংখ্যাগতভাবে স্থিতিশীল।

রেফারেন্স:

  • স্ট্রকা, ও .; ডুনিক, জে .; সিম্যান্ডল, এম। এবং হাভলিক, জে। "সিসেন্টেন্ট কালমন ফিল্টারে ম্যাট্রিক্স পচনের তুলনা এবং তুলনা", আমেরিকান কন্ট্রোল কনফারেন্স (দুদক), 2013, 2013, 3075-3080।

6

দুটি পদ্ধতির গণনার সময়কে তুলনা করতে এখানে R ব্যবহার করে একটি সাধারণ চিত্র তুলে ধরছি।

library(mvtnorm)
library(clusterGeneration)
set.seed(1234)
mean <- rnorm(1000, 0, 1)
sigma <- genPositiveDefMat(1000)
sigma <- sigma$Sigma

eigen.time <- system.time(
  rmvnorm(n=1000, mean=mean, sigma = sigma, method = "eigen")
  )

chol.time <- system.time(
  rmvnorm(n=1000, mean=mean, sigma = sigma, method = "chol")
  )

চলমান সময় হয়

> eigen.time
   user  system elapsed 
   5.16    0.06    5.33 
> chol.time
   user  system elapsed 
   1.74    0.15    1.90

নমুনার আকার 10000 এ বাড়ানোর সময় চলমান সময়গুলি

> eigen.time <- system.time(
+   rmvnorm(n=10000, mean=mean, sigma = sigma, method = "eigen")
+   )
> 
> chol.time <- system.time(
+   rmvnorm(n=10000, mean=mean, sigma = sigma, method = "chol")
+   )
> eigen.time
   user  system elapsed 
   15.74    0.28   16.19 
> chol.time
   user  system elapsed 
   11.61    0.19   11.89 

আশাকরি এটা সাহায্য করবে.


3

এখানে ম্যানুয়ালটি বা দরিদ্র লোকের কাছে নিজেকে প্রমাণ করুন:

> set.seed(0)
> # The correlation matrix
> corr_matrix = matrix(cbind(1, .80, .2, .80, 1, .7, .2, .7, 1), nrow=3)
> nvar = 3 # Three columns of correlated data points
> nobs = 1e6 # One million observations for each column
> std_norm = matrix(rnorm(nvar * nobs),nrow=nobs, ncol=nvar) # N(0,1)   

Corr=[1.8.2.81.7.2.71]

N=[[,1][,2][,3][1,]1.08063380.65639130.8400443[2,]1.14342410.17297380.9884772[999999,]0.48618270.035630062.1176976[1000000,]0.43945511.692655171.9534729]

1. SVD METHOD:

[U[3×3]Σ0.5[d1000d2000d3]NT[3×106]]T
> ptm <- proc.time()
> # Singular Value Decomposition method:
> svd = svd(corr_matrix)   
> rand_data_svd = t(svd$u %*% (diag(3) * sqrt(svd$d)) %*% t(std_norm))
> proc.time() - ptm
   user  system elapsed 
   0.29    0.05    0.34 
> 
> ptm <- proc.time()

2. CHOLESKY METHOD:

[Ch[c1100c21c220c31c32c33]NT[3×106]]T
> # Cholesky method:
> chole = t(chol(corr_matrix))
> rand_data_chole = t(chole %*% t(std_norm))
> proc.time() - ptm
   user  system elapsed 
   0.25    0.03    0.31 

Thank you to @userr11852 for pointing out to me that there is a better way to calculate the difference in performance between SVD and Cholesky, in favor of the latter, using the function microbenchmark. At his suggestion, here is the result:

microbenchmark(chol(corr_matrix), svd(corr_matrix))
Unit: microseconds
              expr     min     lq      mean  median      uq     max neval cld
 chol(corr_matrix)  24.104  25.05  28.74036  25.995  26.467  95.469   100  a 
  svd(corr_matrix) 108.701 110.12 116.27794 111.065 112.719 223.074   100   b

@user11852 Thank you. I read cursorily the entry on microbenchmark and it really makes a difference.
Antoni Parellada

Sure, but does it have a difference in estimation performance?
Damien

Good point. I haven't had time to explore the package.
Antoni Parellada
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.