আপনার পোস্ট করা টিউটোরিয়ালটির 13-20 পৃষ্ঠাগুলি পিসিএ মাত্রা হ্রাসের জন্য কীভাবে ব্যবহৃত হয় তার একটি খুব স্বজ্ঞাত জ্যামিতিক ব্যাখ্যা সরবরাহ করে।
আপনি যে 13x13 ম্যাট্রিক্সের কথা উল্লেখ করেছেন সম্ভবত এটি সম্ভবত "লোডিং" বা "রোটেশন" ম্যাট্রিক্স (আমি অনুমান করছি যে আপনার মূল ডেটাতে 13 ভেরিয়েবল ছিল?) যা দুটির (সমতুল্য) উপায়ে ব্যাখ্যা করতে পারে:
আপনার লোডিং ম্যাট্রিক্সের (পরম মানগুলির) কলামগুলি বর্ণনা করে যে প্রতিটি পরিবর্তনশীল প্রতিটি উপাদানকে আনুপাতিকভাবে "অবদান" কত পরিমাণে দেয়।
ঘূর্ণন ম্যাট্রিক্স আপনার ঘূর্ণন ম্যাট্রিক্স দ্বারা সংজ্ঞায়িত ভিত্তিতে আপনার ডেটা ঘোরান। সুতরাং আপনার কাছে যদি 2-D ডেটা থাকে এবং আপনার রোটেশন ম্যাট্রিক্স দিয়ে আপনার ডেটাটিকে গুণিত করে তোলে তবে আপনার নতুন এক্স-অক্ষটি প্রথম মূল উপাদান এবং নতুন Y- অক্ষটি হবে দ্বিতীয় প্রধান উপাদান।
সম্পাদনা: এই প্রশ্নটি অনেক জিজ্ঞাসা করা হয়, তাই আমি মাত্র মাত্রা হ্রাসের জন্য যখন পিসিএ ব্যবহার করি তখন কী চলছে সে সম্পর্কে একটি বিস্তৃত দর্শনীয় ব্যাখ্যা দিতে যাচ্ছি।
Y = x + শব্দ থেকে উত্পন্ন 50 পয়েন্টের একটি নমুনা বিবেচনা করুন। প্রথম মূল উপাদানটি y = x রেখার সাথে শুয়ে থাকবে এবং দ্বিতীয় উপাদানটি নীচের চিত্রের মতো y = -x রেখার সাথে থাকবে।

দিক অনুপাতটি এটিকে কিছুটা মিস করে তবে এর জন্য আমার শব্দটি গ্রহণ করুন যে উপাদানগুলি অরথোগোনাল। পিসিএ প্রয়োগ করা আমাদের ডেটা ঘুরবে যাতে উপাদানগুলি x এবং y অক্ষ হয়ে যায়:

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

আংশিকভাবে আমাদের মূল ডেটাটি মূল অক্ষের দিকে ঘোরানো (ঠিক আছে, প্রজেক্টিং) করে পুনরুদ্ধার করতে পারি।

গা dark় নীল পয়েন্টগুলি "পুনরুদ্ধার করা" ডেটা, যেখানে খালি পয়েন্টগুলি মূল তথ্য। যেমন আপনি দেখতে পাচ্ছেন, আমরা মূল তথ্য থেকে কিছু তথ্য হারিয়েছি, বিশেষ করে দ্বিতীয় প্রধান উপাদানটির দিকের প্রকরণ। তবে অনেকগুলি উদ্দেশ্যে, এই সঙ্কুচিত বিবরণটি (প্রথম প্রধান উপাদানটি সহ প্রক্ষেপণটি ব্যবহার করে) আমাদের প্রয়োজন অনুসারে করতে পারে।
আপনি নিজেই এটির অনুলিপি করতে চান এমন কোডটি আমি এই উদাহরণটি উত্পন্ন করতে ব্যবহার করেছি। আপনি যদি দ্বিতীয় লাইনে শব্দের উপাদানটির বৈকল্পিকতা হ্রাস করেন, পিসিএ রূপান্তর দ্বারা হারিয়ে যাওয়া ডেটার পরিমাণ পাশাপাশি হ্রাস পাবে কারণ ডেটা প্রথম প্রধান উপাদানটিতে রূপান্তরিত হবে:
set.seed(123)
y2 = x + rnorm(n,0,.2)
mydata = cbind(x,y2)
m2 = colMeans(mydata)
p2 = prcomp(mydata, center=F, scale=F)
reduced2= cbind(p2$x[,1], rep(0, nrow(p2$x)))
recovered = reduced2 %*% p2$rotation
plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data with principal component vectors')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+abs(p2$rotation[1,1])
,y1=m2[2]+abs(p2$rotation[2,1])
, col='red')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+p2$rotation[1,2]
,y1=m2[2]+p2$rotation[2,2]
, col='blue')
plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data after PCA transformation')
points(p2$x, col='black', pch=3)
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+abs(p2$rotation[1,1])
,y1=m2[2]+abs(p2$rotation[2,1])
, col='red')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+p2$rotation[1,2]
,y1=m2[2]+p2$rotation[2,2]
, col='blue')
arrows(x0=mean(p2$x[,1])
,y0=0
,x1=mean(p2$x[,1])
,y1=1
,col='blue'
)
arrows(x0=mean(p2$x[,1])
,y0=0
,x1=-1.5
,y1=0
,col='red'
)
lines(x=c(-1,1), y=c(2,-2), lty=2)
plot(p2$x, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='PCA dimensionality reduction')
points(reduced2, pch=20, col="blue")
for(i in 1:n){
lines(rbind(reduced2[i,], p2$x[i,]), col='blue')
}
plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Lossy data recovery after PCA transformation')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+abs(p2$rotation[1,1])
,y1=m2[2]+abs(p2$rotation[2,1])
, col='red')
arrows(x0=m2[1], y0=m2[2]
,x1=m2[1]+p2$rotation[1,2]
,y1=m2[2]+p2$rotation[2,2]
, col='blue')
for(i in 1:n){
lines(rbind(recovered[i,], mydata[i,]), col='blue')
}
points(recovered, col='blue', pch=20)