বহুভুজটির কোভারিয়েন্স ম্যাট্রিক্সটি কীভাবে খুঁজে পাবেন?


9

স্থানাঙ্কের একটি সেট দ্বারা সংজ্ঞায়িত আপনার বহুভুজ রয়েছে তা কল্পনা করুন (x1,y1)...(xn,yn) এবং এর ভর কেন্দ্র হয় (0,0)। বহুভুজ সীমানা সহ আপনি বহুভুজকে অভিন্ন বন্টন হিসাবে বিবেচনা করতে পারেন । এখানে চিত্র বর্ণনা লিখুন

আমি এমন একটি পদ্ধতির পরে আছি যা বহুভুজের কোভারিয়েন্স ম্যাট্রিক্সটি খুঁজে পাবে

আমি সন্দেহ করি যে বহুভুজের কোভরিয়েন্স ম্যাট্রিক্স এলাকার দ্বিতীয় মুহুর্তের সাথে ঘনিষ্ঠভাবে জড়িত , তবে সেগুলি সমান কিনা তা আমি নিশ্চিত নই। আমি উইকিপিডিয়া নিবন্ধটিতে যে সূত্রগুলি সংযুক্ত করেছি তার মধ্যে সূত্রগুলি মনে হয় (বহুগুণে মূল অক্ষের পরিবর্তে x, y এবং z অক্ষের চারপাশে ঘূর্ণন জড়তা বোঝাতে এখানে অনুমান, এটি নিবন্ধ থেকে আমার কাছে বিশেষভাবে পরিষ্কার নয়)।

(প্রসঙ্গক্রমে, যদি কেউ আমাকে বহুভুজের মূল অক্ষগুলি গণনা করতে পারেন তবে এটি আমার পক্ষেও কার্যকর হবে)

এটি কেবল স্থানাঙ্কগুলিতে পিসিএ চালানোর জন্য লোভনীয় , তবে এমনটি করে যে বিষয়টি স্থানাঙ্কগুলি বহুভুজের চারপাশে সমানভাবে সমানভাবে ছড়িয়ে পড়ে না এবং তাই বহুভুজের ঘনত্বের প্রতিনিধি নয়। একটি চূড়ান্ত উদাহরণ হ'ল উত্তর ডাকোটার রূপরেখা, যার বহুভুজটি লাল নদীর নীচে প্রচুর সংখ্যক পয়েন্ট দ্বারা সংজ্ঞায়িত হয়েছে, এবং আরও দুটি পয়েন্ট রাজ্যের পশ্চিম প্রান্তকে সংজ্ঞায়িত করছে।


"সন্ধান করুন" দ্বারা, আমি বহুভুজ থেকে সহজভাবে নমুনা ধরে নিয়েছি, তারপরে নমুনাগুলির covariance গণনা করা, আপনার মনে কি নেই?
স্টিফান কোলাসা

এছাড়াও, আপনার বহুভুক্তের স্থানাঙ্কগুলি অন্তর্ভুক্ত করার জন্য আপনি কি আপনার পোস্টটি সম্পাদনা করতে পারেন, যাতে লোকেরা এটির চারপাশে খেলতে পারে?
স্টিফান কোলাসা

1
@ স্টেফানকোলাসা বলতে বোঝায় বহুভুজ সীমানা সহ বহুভুজ সম্ভাব্য ঘনত্ব হিসাবে বহুভুজকে চিকিত্সা করা। অবশ্যই, আপনি পয়েন্টগুলি নমুনা করতে পারেন এবং সীমাটি একই জিনিস হবে, তবে আমি একটি প্রাক-প্রাকৃতিক পদ্ধতি খুঁজছি। ছবিটি আমি ব্যবহৃত পেইন্টের একটি চিত্র মাত্র। আসল বিশ্ব ডেটা যেটি আমি ব্যবহার করতে চাই তা হ'ল রাজ্য এবং অঞ্চলগুলির রূপরেখা।
ইংলিফ

1
আপনি সঠিক যে "কোভারিয়েন্স ম্যাট্রিক্স" এর জন্য সাধারণ শব্দটি জড়ের মুহূর্ত বা দ্বিতীয় মুহুর্ত। প্রধান অক্ষগুলি এর ইজেনডায়ার্কেশনগুলিতে ভিত্তি করে। স্থানাঙ্কগুলিতে পিসিএ চালানো ভুল: এটি সমস্ত ভরটি শীর্ষে অবস্থিত এটি ধরে নেওয়া সমান। বেরিয়েন্সারের গণনার সর্বাধিক প্রত্যক্ষ পদ্ধতি - প্রথম মুহূর্ত - gis.stackexchange.com/a/22744/664 এ আমার পোস্টে আলোচনা করা হয়েছে । দ্বিতীয় মুহুর্তগুলিকে একইভাবে গৌণ পরিবর্তনের সাথে গণনা করা হয়। গোলকের বিষয়ে বিশেষ বিবেচনার প্রয়োজন।
শুক্র

2
এটি অন্যভাবে কাজ করে: ইনটারিয়াল টেনসর গণনা করুন এবং সেখান থেকে এর প্রধান অক্ষগুলি সন্ধান করুন। আপনার ক্ষেত্রে কৌশলটিতে গ্রিনের উপপাদ্য জড়িত, যা দেখায় যে প্রয়োজনীয় ইন্টিগ্রালগুলি
μk,l(P)=Pxkyldxdy
ওয়ান-ফর্ম around এর কাছাকাছি কনট্যুর সংহত হিসাবে গণনা করা যেতে পারে যেখানেএই জাতীয় রূপগুলি খুঁজে পাওয়া সহজ কারণ এবং কোনও উপযুক্ত লিনিয়ার সংমিশ্রণ কাজ করবে। কনট্যুর ইন্টিগ্রালটি প্রান্তগুলির উপরে একত্রিতাকারের যোগফল। Pωdω=xkyldxdy.xkyl+1dxxk+1yldy
whuber

উত্তর:


10

প্রথমে কিছু বিশ্লেষণ করা যাক।

মনে করুন বহুভুজ within এর মধ্যে এর সম্ভাব্যতা ঘনত্ব আনুপাতিক ফাংশন তারপরে আনুপাতিকতার ধ্রুবক হ'ল বহুভুজের উপর এর অবিচ্ছেদ্য বিপরীত ,Pp(x,y).p

μ0,0(P)=Pp(x,y)dxdy.

সাধারণ কেন্দ্র বহুভুজ গড় স্থানাঙ্ক তাদের প্রথম মুহূর্ত হিসেবে নির্ণিত বিন্দু। প্রথম এক

μ1,0(P)=1μ0,0(P)Pxp(x,y)dxdy.

নিষ্ক্রিয় টেন্সর ম্যাট্রিক্স যে,: বহুভুজ অনুবাদ মূল তার সাধারণ কেন্দ্র লাগাতে পর নির্ণিত দ্বিতীয় মুহূর্তের প্রতিসম অ্যারের হিসাবে প্রতিনিধিত্ব করা যেতে পারে কেন্দ্রীয় দ্বিতীয় মুহূর্ত

μk,l(P)=1μ0,0(P)P(xμ1,0(P))k(yμ0,1(P))lp(x,y)dxdy

যেখানে থেকে পরিসীমা থেকে থেকে টেনসর নিজেই - ওরফে কোভেরিয়েন্স ম্যাট্রিক্স - হয়(k,l)(2,0)(1,1)(0,2).

I(P)=(μ2,0(P)μ1,1(P)μ1,1(P)μ0,2(P)).

একটি PCA of এর মূল অক্ষগুলি অর্জন করে এগুলি তাদের ইউনিটগুলি দ্বারা মাপানো একক আইজিভেক্টর।I(P)P:


এর পরে, গণনাগুলি কীভাবে করা যায় তার বিষয়ে কাজ করা যাক। যেহেতু বহুভুজটি তার কেন্দ্রিক সীমানা বর্ণনা করে উল্লম্বের অনুক্রম হিসাবে উপস্থাপিত হয়েছে তাই অনুরোধ করা স্বাভাবিক isP,

গ্রিনের উপপাদ্য: যেখানে form এবং

Pdω=Pω
ω=M(x,y)dx+N(x,y)dyP
dω=(xN(x,y)yM(x,y))dxdy.

উদাহরণস্বরূপ, এবং ধ্রুবক ( অর্থাত্ , ইউনিফর্ম) ঘনত্ব আমরা (পরিদর্শন করে) অনেকগুলি মধ্যে একটি বেছে নিতে পারি সমাধানগুলি, যেমনdω=xkyldxdyp,

ω(x,y)=1l+1xkyl+1dx.

এর বিন্দুটি হ'ল কনট্যুর ইন্টিগ্রালটি লম্বাংশের ক্রম দ্বারা নির্ধারিত রেখাংশগুলি অনুসরণ করে। ভার্টেক্স থেকে ভার্টেক্স পর্যন্ত যে কোনও লাইন বিভাগকে ফর্মের মধ্যে একটি বাস্তব পরিবর্তনশীল দ্বারা প্যারামিটারাইজ করা যেতে পারেuvt

tu+tw

যেখানে হ'ল একক সাধারণ দিক direction থেকেমান তাই থেকে পরিসীমা থেকে অধীনে এই একখান এবং রৈখিক ফাংশন হয় এবং এবং রৈখিক ফাংশন হয় এভাবে প্রতিটি প্রান্ত উপর কনট্যুর অবিচ্ছেদ্য এর integrand একটি হয়ে বহুপদী ফাংশন এর যা খুব সহজেই ছোট মূল্যায়ন করা হয় এবংwvuuv.t0|vu|.xytdxdydt.t,kl.


এই বিশ্লেষণটি কার্যকর করা এর উপাদানগুলির কোডিংয়ের মতোই সহজ। সর্বনিম্ন স্তরে আমাদের একটি লাইন বিভাগের উপর বহুবচনীয় এক-রূপকে সংহত করার জন্য একটি ফাংশন প্রয়োজন। উচ্চ স্তরের ক্রিয়াকলাপগুলি এগুলিকে একত্রিত করে ব্যারিসেন্টার এবং জড়তাভুক্ত টেনসর পেতে কাঁচা এবং কেন্দ্রীয় মুহুর্তগুলি গণনা করতে পারে এবং শেষ পর্যন্ত আমরা মূল টুকরো (যা এর আকারযুক্ত আইজেনেক্টরগুলি হয়) খুঁজে পেতে সেই টেন্সরের উপর পরিচালনা করতে পারি। Rসঞ্চালিত নিচের কোড এই কাজ। এটি দক্ষতার কোনও প্রবণতা তৈরি করে না: এটি কেবল পূর্ববর্তী বিশ্লেষণের ব্যবহারিক প্রয়োগকে চিত্রিত করার উদ্দেশ্যে। প্রতিটি ফাংশন সোজা এবং নামকরণ কনভেনশনগুলি বিশ্লেষণের সাথে সমান্তরাল হয়।

কোডটিতে অন্তর্ভুক্তটি হ'ল বৈধ বদ্ধ, সহজভাবে সংযুক্ত, অ-স্ব-ছেদ করা বহুভুজগুলি তৈরি করার পদ্ধতি (এলোমেলোভাবে একটি বৃত্ত বরাবর পয়েন্টগুলি বিকৃত করে এবং একটি বদ্ধ লুপ তৈরির জন্য তার চূড়ান্ত বিন্দু হিসাবে প্রারম্ভিক শীর্ষটি সহ)। বহুভুজকে প্লট করার জন্য এর কয়েকটি সূচনা অনুসরণ করা হয়েছে, এর শীর্ষকোষগুলি প্রদর্শন করতে হবে, ব্যারিসেনটার সংযুক্ত করুন এবং মূল (বৃহত্তর) এবং নীল (ক্ষুদ্রতম) মূল অক্ষগুলি প্লট করুন, বহুভুজ কেন্দ্রিক ইতিবাচক-ভিত্তিক সমন্বয় ব্যবস্থা তৈরি করুন।

বহুভুজ এবং প্রধান অক্ষগুলি দেখায় চিত্র

#
# Integrate a monomial one-form x^k*y^l*dx along the line segment given as an 
# origin, unit direction vector, and distance.
#
lintegrate <- function(k, l, origin, normal, distance) {
  # Binomial theorem expansion of (u + tw)^k
  expand <- function(k, u, w) {
    i <- seq_len(k+1)-1
    u^i * w^rev(i) * choose(k,i)
  }
  # Construction of the product of two polynomials times a constant.
  omega <- normal[1] * convolve(rev(expand(k, origin[1], normal[1])), 
                                expand(l, origin[2], normal[2]),
                                type="open")
  # Integrate the resulting polynomial from 0 to `distance`.
  sum(omega * distance^seq_along(omega) / seq_along(omega))
}
#
# Integrate monomials along a piecewise linear path given as a sequence of
# (x,y) vertices.
#
cintegrate <- function(xy, k, l) {
  n <- dim(xy)[1]-1 # Number of edges
  sum(sapply(1:n, function(i) {
    dv <- xy[i+1,] - xy[i,]               # The direction vector
    lambda <- sum(dv * dv)
    if (isTRUE(all.equal(lambda, 0.0))) {
      0.0
    } else {
      lambda <- sqrt(lambda)              # Length of the direction vector
      -lintegrate(k, l+1, xy[i,], dv/lambda, lambda) / (l+1)
    }
  }))
}
#
# Compute moments of inertia.
#
inertia <- function(xy) {
  mass <- cintegrate(xy, 0, 0)
  barycenter = c(cintegrate(xy, 1, 0), cintegrate(xy, 0, 1)) / mass
  uv <- t(t(xy) - barycenter)   # Recenter the polygon to obtain central moments
  i <- matrix(0.0, 2, 2)
  i[1,1] <- cintegrate(uv, 2, 0)
  i[1,2] <- i[2,1] <- cintegrate(uv, 1, 1)
  i[2,2] <- cintegrate(uv, 0, 2)
  list(Mass=mass,
       Barycenter=barycenter,
       Inertia=i / mass)
}
#
# Find principal axes of an inertial tensor.
#
principal.axes <- function(i.xy) {
  obj <- eigen(i.xy)
  t(t(obj$vectors) * obj$values)
}
#
# Construct a polygon.
#
circle <- t(sapply(seq(0, 2*pi, length.out=11), function(a) c(cos(a), sin(a))))
set.seed(17)
radii <- (1 + rgamma(dim(circle)[1]-1, 3, 3))
radii <- c(radii, radii[1])  # Closes the loop
xy <- circle * radii
#
# Compute principal axes.
#
i.xy <- inertia(xy)
axes <- principal.axes(i.xy$Inertia)
sign <- sign(det(axes))
#
# Plot barycenter and principal axes.
#
plot(xy, bty="n", xaxt="n", yaxt="n", asp=1, xlab="x", ylab="y",
     main="A random polygon\nand its principal axes", cex.main=0.75)
polygon(xy, col="#e0e0e080")
arrows(rep(i.xy$Barycenter[1], 2), 
       rep(i.xy$Barycenter[2], 2),
       -axes[1,] + i.xy$Barycenter[1],     # The -signs make the first axis .. 
       -axes[2,]*sign + i.xy$Barycenter[2],# .. point to the right or down.
       length=0.1, angle=15, col=c("#e02020", "#4040c0"), lwd=2)
points(matrix(i.xy$Barycenter, 1, 2), pch=21, bg="#404040")

+1 বাহ, এটি দুর্দান্ত উত্তর!
অ্যামিবা

7

সম্পাদনা: খেয়াল করেননি যে ইতিমধ্যে whuber উত্তর দিয়েছে। আমি এটিকে সমস্যার আরেকটি (সম্ভবত কম মার্জিত) পদ্ধতির উদাহরণ হিসাবে রেখে দেব।

কোভেরিয়েন্স ম্যাট্রিক্স

যাক একটি বহুভুজ উপর সমবন্টন থেকে একটি র্যান্ডম বিন্দু হতে এলাকার সঙ্গে । সমবায় ম্যাট্রিক্স হ'ল:(X,Y)PA

C=[CXXCXYCXYCYY]

যেখানে হ'ল এর বৈকল্পিক , হ'ল , এবং হ'ল মধ্যকার এবং । বহুভুজ কেন্দ্রের ভর কেন্দ্র থেকে যেহেতু এটি শূন্য গড় ধরে নেয়। অভিন্ন বিতরণ প্রতিটি পয়েন্টে ধ্রুব সম্ভাবনার ঘনত্ব নির্ধারণ করে , তাই:CXX=E[X2]XCYY=E[Y2]YCXY=E[XY]XY1AP

(1)CXX=1APx2dVCYY=1APy2dVCXY=1APxydV

triangulation

মতো জটিল অঞ্চলে সরাসরি সংহত করার চেষ্টা করার পরিবর্তে , আমরা কে ত্রিভুজাকৃতির উপমঞ্চে বিভক্ত করে সমস্যাটিকে সহজ করতে পারি :PPn

P=T1Tn

আপনার উদাহরণে, সম্ভাব্য একটি পার্টিশনটি এরকম দেখাচ্ছে:

এখানে চিত্র বর্ণনা লিখুন

ত্রিকোণ উত্পাদন করার বিভিন্ন উপায় রয়েছে ( এখানে দেখুন )। উদাহরণস্বরূপ, আপনি শিখরগুলির ডেলাউন ট্রাইঙ্গুলেশন গণনা করতে পারেন , তারপরে বাইরে পড়া প্রান্তগুলি বাতিল করুন (যেহেতু এটি উদাহরণ হিসাবে ননকনভেক্স হতে পারে )।P

ওভার ইন্টেগ্রাল তারপর ত্রিভুজ উপর ইন্টেগ্রাল সমষ্টির বিভক্ত করা যেতে পারে:P

(2)CXX=1Ai=1nTix2dVCYY=1Ai=1nTiy2dVCXY=1Ai=1nTixydV

একটি ত্রিভুজটির সুন্দর, সরল সীমানা রয়েছে তাই এই অখণ্ডগুলি মূল্যায়ন করা সহজ।

ত্রিভুজগুলির উপর একীকরণ করা হচ্ছে

ত্রিভুজগুলির উপর একীকরণের বিভিন্ন উপায় রয়েছে। এই ক্ষেত্রে, আমি একটি কৌশল ব্যবহার করেছি যাতে ইউনিট স্কোয়ারে ত্রিভুজটি ম্যাপিংয়ের সাথে জড়িত। বারিসেন্ট্রিক স্থানাঙ্কে রূপান্তর করা আরও ভাল বিকল্প হতে পারে।

এখানে উপরে সমাকলনের জন্য সমাধান, একটি অবাধ ত্রিভুজ জন্য ছেদচিহ্ন দ্বারা সংজ্ঞায়িত । দিন:T(x1,y1),(x2,y2),(x3,y3)

vx=[x1x2x3]vy=[y1y2y3]1=[111]L=[100110111]

তারপর:

(3)Tx2dV=A6Tr(vxvxTL)Ty2dV=A6Tr(vyvyTL)TxydV=A12(1TvxvyT1+vxTvy)

একসাথে সব কিছু রাখা

যাক এবং এক্স / প্রতিটি ত্রিভুজ জন্য ছেদচিহ্ন এর Y স্থানাঙ্ক ধারণ , যেমন উপরে। প্লাগ মধ্যে প্রতিটি ত্রিভুজ জন্য, তিনি লক্ষ করেন এলাকায় পদ বাদ গেল। এটি সমাধান দেয়:vxivyiTi(3)(2)

(4)CXX=16i=1nTr(vxi(vxi)TL)CYY=16i=1nTr(vyi(vyi)TL)CXY=112i=1n(1Tvxi(vyi)T1+(vxi)Tvyi)

অধ্যক্ষ কুঠার

মূল অক্ষগুলি পিসিএর মতো কোভেরিয়েন্স ম্যাট্রিক্স এর ইগেনভেেক্টর দ্বারা দেওয়া হয় । পিসিএর বিপরীতে, স্যাম্পলড ডেটা পয়েন্টগুলি থেকে এটি অনুমান করার চেয়ে আমাদের জন্য বিশ্লেষণাত্মক অভিব্যক্তি রয়েছে । নোট করুন যে উল্লম্বগুলি নিজেরাই তে অভিন্ন বন্টনের কোনও প্রতিনিধি নমুনা নয় , সুতরাং কেউ কেবল উল্লম্বের নমুনা কোভারিয়েন্স ম্যাট্রিক্স নিতে পারে না। তবে, * * শীর্ষে অবস্থিত একটি অপেক্ষাকৃত সাধারণ ফাংশন, দেখা হিসাবে ।CCPC(4)


2
+1 এটি ওরিয়েন্টেড ত্রিভুজগুলির অনুমতি দিয়ে সহজ করা যেতে পারে , যার ফলে যথাযথ ত্রিভুজটির প্রয়োজনীয়তা দূর হয়। পরিবর্তে, আপনি শুধু একটি অবাধ কেন্দ্র স্থাপন করতে পারেন এবং (স্বাক্ষরিত) মান যোগফল উপর ত্রিভুজ কিভাবে এই এটা প্রায়ই সম্পন্ন করা হয়েছে কারণ এটি অনেক কম ব্যস্তবাগীশ হয়। এটি সহজেই দেখা যায় যে এই জাতীয় সংমিশ্রণটি মূলত গ্রিনের উপপাদ্য প্রয়োগ করার মতো একই জিনিস, কারণ সংক্ষেপে প্রতিটি শব্দই শেষ পর্যন্ত edge প্রান্তের ফাংশনএই পদ্ধতিটি কোয়ান্টডেক.কম / এসওয়াইএসএন597/GTKAV/section2/chapter_11.htm "অঞ্চল" বিভাগে চিত্রিত হয়েছে । OOPiPi+1:PiPi+1.
whuber

@ হুবুহু আকর্ষণীয়, এটি দেখানোর জন্য ধন্যবাদ
ব্যবহারকারী ২০১201

এই উভয় উত্তর ভাল, আমার শিক্ষা স্তর কিছুটা হলেও। একবার আমি নিশ্চিত হয়েছি যে আমি তাদের পুরোপুরি বুঝতে পেরেছি who
ইঙ্গোলিফস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.