এক্সএক্স এবং এক্স'এক্সের ইগেনভ্যালু পচানোর মাধ্যমে কেন আমি X এর একটি বৈধ এসভিডি পেতে পারি না?


9

আমি হাতে হাতে এসভিডি করার চেষ্টা করছি:

m<-matrix(c(1,0,1,2,1,1,1,0,0),byrow=TRUE,nrow=3)

U=eigen(m%*%t(m))$vector
V=eigen(t(m)%*%m)$vector
D=sqrt(diag(eigen(m%*%t(m))$values))

U1=svd(m)$u
V1=svd(m)$v
D1=diag(svd(m)$d)

U1%*%D1%*%t(V1)
U%*%D%*%t(V)

তবে শেষ লাইনটি আর ফিরে আসে না m। কেন? মনে হচ্ছে এই আইজেনভেেক্টরগুলির লক্ষণগুলির সাথে কিছু করার আছে ... বা আমি পদ্ধতিটি ভুল বুঝেছি?



আমাকে বারবার বলা হয়েছে যে এসভিডিগুলিতে চিহ্নটি কিছু যায় আসে না ... এর মতো
ব্যর্থতাবাদী

অ্যামোবা এটি পরিষ্কার করার জন্য আপনাকে ধন্যবাদ আমি কোডের চেয়ে ইংরেজি প্রশ্নে ফোকাস করছিলাম। ব্যর্থতাবাদী বিজ্ঞানী: দেখুন D=diag(c(-1,1,1)*sqrt(eigen(m%*%t(m))$values))এবং কী মনে রাখবেন যে বর্গমূল (পাশাপাশি কোনও সাধারণীকৃত ইগেনভেেক্টর ) কেবল সাইন আপ করার জন্য সংজ্ঞায়িত হয়েছে। আরও অন্তর্দৃষ্টি জন্য, পরিবর্তন mকরুন m <- matrix(-2,1,1)এবং ,1,1)কল প্রতিটি কল শেষে অন্তর্ভুক্ত diag। এটি উদাহরণ যা একই সমস্যা তৈরি করে - তবে এটি এতটাই সহজ যে সমস্যাটির প্রকৃতি পুরোপুরি স্পষ্ট হয়ে উঠবে। 1×1
whuber

1
বুঝেছি. ধন্যবাদ! আপনার কাছে ভেক্টর সি (-1, 1, 1) নির্ধারণের একটি সাধারণ নিয়ম আছে? বা দুটি পচনের লক্ষণগুলি কীভাবে সংযুক্ত করা উচিত?
ব্যর্থতাবাদী বিজ্ঞানী

1
মনে রাখবেন যে @ হুইলবারের কৌশলগুলি c(-1,1,1)কাজ করে তবে এর Dমতো সংজ্ঞায়িত করা আপনাকে একবাক্য মান দেয় না। সংজ্ঞাবদ্ধ মানগুলি অবশ্যই সংজ্ঞা অনুসারে ইতিবাচক হওয়া উচিত। কিভাবে লক্ষণ লিঙ্ক করতে প্রশ্নে Uএবং Vভাল, এবং আমি একটি উত্তর হবে না। আপনি শুধু একটি এসভিডি করবেন না কেন? :-)
অ্যামিবা

উত্তর:


13

সমস্যার বিশ্লেষণ

কোনও ম্যাট্রিক্সের এসভিডি কখনও অনন্য নয়। ম্যাট্রিক্স মাত্রা এবং তার এসভিডি হতে দিনAn×k

A=UDV

অরথনোমালাল কলামগুলির সাথে একটি ম্যাট্রিক্স , অ-নেতিবাচক এন্ট্রি সহ একটি ত্রিভুজ ম্যাট্রিক্স এবং অরথনোমালাল কলামগুলির সাথে একটি ম্যাট্রিক্সn×pUp×pDk×pV

এখন নির্বাচন করুন, ইচ্ছামত কোন তির্যক ম্যাট্রিক্স থাকার তির্যক উপর গুলি, যাতে হয় পরিচয় । তারপরp×pS±1S2=Ip×pIp

A=UDV=UIDIV=U(S2)D(S2)V=(US)(SDS)(VS)

এছাড়াও একটি এর SVD কারণ প্রমান orthonormal কলাম হয়েছে এবং অনুরূপ গণনা এর অর্থোন্নাল কলামগুলি দেখায় । তদুপরি, এবং তির্যক হওয়ায়, তারা চলে আসে, যেহেতু দেখায় যে এখনও অ-নেতিবাচক এন্ট্রি রয়েছে।A

(US)(US)=SUUS=SIpS=SS=S2=Ip
USVSSD
SDS=DS2=D
D

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

AA=(UDV)(UDV)=UDVVDU=UD2U
V
AA=VD2V.
DD2UV

একটি সমাধান

পরিবর্তে, খোঁজার পর এই ধরনের একটি এবং এই ধরনের একটি তাদের গনা ব্যবহারUV

UAV=U(UDV)V=(UU)D(VV)=D

সরাসরি এবং দক্ষতার সাথে। এই এর তির্যক মানগুলি ইতিবাচক নয়। D (এটি কারণ বা উভয়ই তির্যককরণ প্রক্রিয়া সম্পর্কে কিছুই নেই যা গ্যারান্টি দেবে যেহেতু সেই দুটি প্রক্রিয়া পৃথকভাবে পরিচালিত হয়েছিল।) এর তির্যক বরাবর এন্ট্রি নির্বাচন করে তাদের ইতিবাচক করুন Make এর এন্ট্রিগুলির চিহ্নগুলি সমান করতে , যাতে সমস্ত ধনাত্মক মান থাকে। ডান-গুন দ্বারা এই ক্ষতিপূরণ দ্বারা :AAAASDSDUS

A=UDV=(US)(SD)V.

যে একটি SVD হয়।

উদাহরণ

সাথে আসুন । একটি এসভিডি হ'লn=p=k=1A=(2)

(2)=(1)(2)(1)

সঙ্গে , , এবং ।U=(1)D=(2)V=(1)

আপনি যদি টিটি তির্যক করেন তবে আপনি স্বাভাবিকভাবেই এবং । অনুরূপভাবে যদি আপনি diagonalize আপনি বেছে নেবেন । দুর্ভাগ্যক্রমে, পরিবর্তে, গণনা কারণ এটি নেতিবাচক, সেট । এই adjusts থেকে এবং করতে । আপনি যা দুটি সম্ভাব্য এসভিডি (তবে মূলের মতো নয়!) এর মধ্যে একটি।AA=(4)U=(1)D=(4)=(2)AA=(4)V=(1)

UDV=(1)(2)(1)=(2)A.
D=UAV=(1)(2)(1)=(2).
S=(1)UUS=(1)(1)=(1)DSD=(1)(2)=(2)
A=(1)(2)(1),

কোড

এখানে কোড পরিবর্তিত হয়। এর আউটপুট নিশ্চিত করে

  1. পদ্ধতিটি mসঠিকভাবে পুনরায় তৈরি করে ।
  2. U এবং সত্যই এখনও orthonormal হয়।V
  3. তবে ফলাফলটি একই এসভিডি দ্বারা ফিরে আসে না svd। (উভয়ই সমানভাবে বৈধ)
m <- matrix(c(1,0,1,2,1,1,1,0,0),byrow=TRUE,nrow=3)

U <- eigen(tcrossprod(m))$vector
V <- eigen(crossprod(m))$vector
D <- diag(zapsmall(diag(t(U) %*% m %*% V)))
s <- diag(sign(diag(D)))  # Find the signs of the eigenvalues
U <- U %*% s              # Adjust the columns of U
D <- s %*% D              # Fix up D.  (D <- abs(D) would be more efficient.)

U1=svd(m)$u
V1=svd(m)$v
D1=diag(svd(m)$d,n,n)

zapsmall(U1 %*% D1 %*% t(V1)) # SVD
zapsmall(U %*% D %*% t(V))    # Hand-rolled SVD
zapsmall(crossprod(U))        # Check that U is orthonormal
zapsmall(tcrossprod(V))       # Check that V' is orthonormal

1
+1 টি। এটা খুব পরিষ্কার। আমি কেবল এটি যুক্ত করব যে অনুশীলনে এটি গননা Uবা Vতারপরে আরও গুণমানের মাধ্যমে অন্য ম্যাট্রিক্স পাওয়ার জন্য যথেষ্ট A। এইভাবে একজন কেবলমাত্র দুটি (দুটি পরিবর্তে) আইজেন্ডেকম্পোজিশনগুলি সম্পাদন করে, এবং চিহ্নগুলি সঠিকভাবে প্রকাশিত হবে।
অ্যামিবা

2
@ আমোবা এটি সঠিক: একটি এসভিডি হ্যান্ড-কম্পিউটিংয়ের আত্মায়, সম্ভবত এটি একটি শিক্ষামূলক অনুশীলন, দক্ষতার দিকে এখানে কোনও মনোযোগ দেওয়া হয় না।
হোবার

2
আপনার সদয় সহায়তার জন্য আপনাকে ধন্যবাদ! আমি মনে করি আমি এই বিষয়টি বুঝতে পারি (শেষ অবধি)।
ব্যর্থতাবিরোধী

3
@ ফেডেরিকো সেই অনুস্মারকটির জন্য আপনাকে ধন্যবাদ। আপনি বেশ সঠিক - আমি স্পষ্টতই ধরে নিয়েছি যে সমস্ত ইগনভ্যালুগুলি স্বতন্ত্র, কারণ এটি অবশ্যই পরিসংখ্যান প্রয়োগের ক্ষেত্রে ঘটবে এবং "অধঃপতিত" ইগেনস্পেসগুলির সাথে অস্পষ্টতা বিবেচনা করার অভ্যাস থেকে বেরিয়ে যায়।
whuber

3
আপনি সঠিক, এটি কেবলমাত্র একটি প্রান্তের কেস এবং সত্যই জটিল। কিছুটা অর্থে, এটি একই সমস্যার আরেকটি বহিঃপ্রকাশ যা আপনি নিজের উত্তরে উল্লেখ করেছেন যে এই পদ্ধতিটি এবং এর কলামগুলির মধ্যে একটি "ম্যাচিং" নিশ্চিত করে না । এজেনডেকপজিশনগুলি থেকে শুরু হওয়া এসভিডি গণনা করা এখনও একটি দুর্দান্ত শিক্ষার উদাহরণ। UV
ফেডেরিকো পোলোনি

5

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

সমস্যাটি হ'ল বারবার ইগেনালুগুলি হতে পারে, এবং এই ক্ষেত্রে এবং অনন্য নয় এবং এবং এর সমস্ত পছন্দ তির্যক ফ্যাক্টর পুনরুদ্ধার করতে ব্যবহার করা যাবে না। উদাহরণস্বরূপ, আপনি যদি কোনও অ-তির্যক অরথোগোনাল ম্যাট্রিক্স নেন (বলুন, ), তবে । এর eigenvector ম্যাট্রিক্স জন্য সম্ভাব্য সব পছন্দ মধ্যে , ফিরে আসবে , এইভাবে এই ক্ষেত্রে তির্যক নয়।AAAAUVA=[3/54/54/53/5]AA=AA=IIeigenU=V=IUAV=A

স্বজ্ঞাতভাবে, এটি একই সমস্যাটির আরেকটি প্রকাশ যা @ শুভর রূপরেখা বলেছে যে এবং এর কলামগুলির মধ্যে একটি "ম্যাচিং" থাকতে হবে এবং দুটি আইজেন্ডেকম্পজিশন পৃথকভাবে গণনা করা এটি নিশ্চিত করে না।UV

সব একবচন মান যদি স্বতন্ত্র, তারপর eigendecomposition অনন্য (স্কেলিং / লক্ষণ পর্যন্ত) এবং পদ্ধতি কাজ। মন্তব্য: ভাসমান পয়েন্ট পাটিগণিত সহ কম্পিউটারে উত্পাদন কোডে এটি ব্যবহার করা এখনও ভাল ধারণা নয় , কারণ আপনি যখন এবং পণ্য তৈরি করেন তখন ফলাফলটি the ক্রমের পরিমাণের দ্বারা বিভ্রান্ত হতে পারে , যেখানে মেশিনের নির্ভুলতা। যদি একবাক্য মানেরগুলির দৈর্ঘ্য ব্যাপকভাবে পৃথক হয় (প্রায় of এর চেয়ে বেশি ) তবে এটি ক্ষুদ্রতমগুলির সংখ্যাসূচক নির্ভুলতার জন্য ক্ষতিকারক।AAAAAA2uu2×1016108

দুটি eigendecompositions থেকে এসভিডি গণনা একটি দুর্দান্ত শিক্ষণ উদাহরণ, কিন্তু বাস্তব জীবনে অ্যাপ্লিকেশন সর্বদা svdএকক মান পচন গণনা করতে আর এর ফাংশন ব্যবহার ।


1
এই মন্তব্যটি ভাল পরামর্শ। তবে দয়া করে নোট করুন, এই থ্রেডটি এসভিডি গণনা করার সঠিক উপায় সম্পর্কে উদ্বিগ্ন নয় (এবং আমি বিশ্বাস করি যে কেউ আপনার সুপারিশের বিরুদ্ধে তর্ক করবে না)। ওপি স্পষ্টভাবে গ্রহণ করে যে svdকাজ করে। প্রকৃতপক্ষে, তারা এটিকে কোনও মান হিসাবে তুলনা করার জন্য একটি মান হিসাবে ব্যবহার করে, যার উদ্দেশ্য বোঝাপড়া পরীক্ষা করা, কোনওভাবে প্রতিস্থাপন করা নয় svd
whuber

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