আর-তে পিসিএ দিয়ে মাত্রিকতা হ্রাস কীভাবে সম্পাদন করতে হয়


30

আমার কাছে একটি বড় ডেটাসেট রয়েছে এবং আমি একটি মাত্রিক হ্রাস করতে চাই।

এখন যেখানেই আমি পড়ি আমি এর জন্য পিসিএ ব্যবহার করতে পারি। যাইহোক, পিসিএ গণনা / সম্পাদন করার পরে আমি কী করব তা এখনও মনে হচ্ছে না। আর এ সহজেই কমান্ড দিয়ে সম্পন্ন হয় princomp

তবে পিসিএ গণনার পরে কী করবেন? যদি আমি স্থির করেছিলাম যে আমি প্রথম মূল উপাদান ব্যবহার করতে চাই তবে আমি কীভাবে আমার ডেটাসেট হ্রাস করব?100


এই প্রশ্নের খুব স্পষ্ট নয় (100 পিসিতে হয় হ্রাস মাত্রা আপনার ডেটা সেটটি), কিন্তু বিশেষভাবে মূল ভেরিয়েবল (গৃহীত উত্তর বিষয়) দেখতে পুনর্গঠনে এছাড়াও সম্পর্কে: পিসিএ বিপরীত এবং বেশ কিছু প্রধান উপাদান থেকে মূল ভেরিয়েবল পুনর্গঠনে কিভাবে?
অ্যামিবা বলছেন

উত্তর:


35

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

প্রথমে একটি সিনথেটিক ডেটাসেট দিন, Xtআপনি পিসিএ সম্পাদন করেন (সাধারণত আপনি পিসির কোভরিয়েন্স ম্যাট্রিক্স সম্পর্কিত সম্পর্কিত নমুনাগুলি কেন্দ্র করে রাখতেন:

#Generate data
m=50
n=100
frac.gaps <- 0.5 # the fraction of data with NaNs
N.S.ratio <- 0.25 # the Noise to Signal ratio for adding noise to data

x <- (seq(m)*2*pi)/m
t <- (seq(n)*2*pi)/n

#True field
Xt <- 
 outer(sin(x), sin(t)) + 
 outer(sin(2.1*x), sin(2.1*t)) + 
 outer(sin(3.1*x), sin(3.1*t)) +
 outer(tanh(x), cos(t)) + 
 outer(tanh(2*x), cos(2.1*t)) + 
 outer(tanh(4*x), cos(0.1*t)) + 
 outer(tanh(2.4*x), cos(1.1*t)) + 
 tanh(outer(x, t, FUN="+")) + 
 tanh(outer(x, 2*t, FUN="+"))

Xt <- t(Xt)

#PCA
res <- prcomp(Xt, center = TRUE, scale = FALSE)
names(res)

ফলাফলগুলিতে বা prcompআপনি, পিসির ( res$x), ইগেনভ্যালুগুলি ( res$sdev) প্রতিটি পিসির পরিমাণ এবং লোডিং ( res$rotation) বোঝাতে পারেন ।

res$sdev
length(res$sdev)
res$rotation
dim(res$rotation)
res$x
dim(res$x)

ইগেনভ্যালুগুলি স্কোয়ার করে আপনি প্রতিটি পিসি দ্বারা ব্যাখ্যাটি পেয়ে যাবেন:

plot(cumsum(res$sdev^2/sum(res$sdev^2))) #cumulative explained variance

অবশেষে, আপনি কেবল শীর্ষস্থানীয় (গুরুত্বপূর্ণ) পিসি ব্যবহার করে আপনার ডেটার একটি কাটা সংস্করণ তৈরি করতে পারেন:

pc.use <- 3 # explains 93% of variance
trunc <- res$x[,1:pc.use] %*% t(res$rotation[,1:pc.use])

#and add the center (and re-scale) back to data
if(res$scale != FALSE){
	trunc <- scale(trunc, center = FALSE , scale=1/res$scale)
}
if(res$center != FALSE){
    trunc <- scale(trunc, center = -1 * res$center, scale=FALSE)
}
dim(trunc); dim(Xt)

আপনি দেখতে পাচ্ছেন যে ফলাফলটি কিছুটা মসৃণ ডেটা ম্যাট্রিক্স, ছোট স্কেল বৈশিষ্ট্যগুলি ফিল্টার আউট:

RAN <- range(cbind(Xt, trunc))
BREAKS <- seq(RAN[1], RAN[2],,100)
COLS <- rainbow(length(BREAKS)-1)
par(mfcol=c(1,2), mar=c(1,1,2,1))
image(Xt, main="Original matrix", xlab="", ylab="", xaxt="n", yaxt="n", breaks=BREAKS, col=COLS)
box()
image(trunc, main="Truncated matrix (3 PCs)", xlab="", ylab="", xaxt="n", yaxt="n", breaks=BREAKS, col=COLS)
box()

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

এবং এখানে একটি খুব প্রাথমিক পদ্ধতি যা আপনি প্রম্পম্প ফাংশনের বাইরে করতে পারেন:

#alternate approach
Xt.cen <- scale(Xt, center=TRUE, scale=FALSE)
C <- cov(Xt.cen, use="pair")
E <- svd(C)
A <- Xt.cen %*% E$u

#To remove units from principal components (A)
#function for the exponent of a matrix
"%^%" <- function(S, power)
     with(eigen(S), vectors %*% (values^power * t(vectors)))
Asc <- A %*% (diag(E$d) %^% -0.5) # scaled principal components

#Relationship between eigenvalues from both approaches
plot(res$sdev^2, E$d) #PCA via a covariance matrix - the eigenvalues now hold variance, not stdev
abline(0,1) # same results

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


2
মার্ক, আপনার স্পষ্টভাবে কেন্দ্র রেকর্ড এবং স্কেল করার দরকার prcompনেই, এটি আপনার জন্য করে। দেখুন res$centerএবং res$scale। IMHO এগুলি ব্যবহার করার প্রবণতা কম ত্রুটিযুক্ত (কেন্দ্রীভূত করা বা না / স্কেলিং সম্পর্কিত স্পষ্ট কল scaleএবং কলটির মধ্যে কোনও দুর্ঘটনাজনক পার্থক্য নেই prcomp)।
সিবিলেটগুলি

1
এই উত্তরটির সম্প্রসারণ প্রয়োজন কারণ এটি ওপির প্রশ্নের উত্তর দেয় না what to do after calculating the PCAবা how do I reduce my dataset exactly? ওপি তার নমুনায় পিসিএ পরিচালনা করেছে তা প্রদত্ত, তার প্রশ্ন হল এটি দিয়ে কী করা যায় এবং এই সাবমেলগুলি আসলে কী নিয়ে যায়; কিভাবে পিসিএ করবেন না। আমরা পাশাপাশি E <- eigen(cov(Sample)); A<- scale(scale=F, Sample) %*% E$vectorsস্কোরগুলি পাওয়ার আরও একটি উপায় পাওয়ার জন্য প্রস্তাব করতে পারি (এটি আসলে প্রিনম্পম্প যা করে stats:::princomp.default)।
usεr11852

1
@ ব্যবহারকারী ১১৮৮২ - প্রশ্নটি বিশেষ করে ডেটা সেট হ্রাস করার বিষয়ে উল্লেখ করে (অর্থাত আমি এখানে প্রদর্শিত ট্রান্সকেশন)। তিনি যা খুঁজছিলেন তা এই ছিল কি না তা স্থির করার জন্য আমি তার উপর ছেড়ে দেব।
মার্ক করুন

1
@ মার্ক, প্রতিক্রিয়া জন্য ধন্যবাদ। আমি মনে করি আমার ফিরে যেতে হবে এবং আবারও সমস্ত কিছু পুনরায় পড়ার দরকার হতে পারে, কারণ উপরের যে কোনও উত্তর মাত্রিকতা হ্রাসের সাথে কীভাবে ডিল করে তা নিয়ে আমি আটকে আছি। কারণ আপনি যেমন দেখান, ডিম (ট্রাঙ্ক) = ম্লান (এক্সটি)। এতে কী কী লাভ হয়েছিল, মাত্রাও কমেনি।
বি_মিনার

2
@ বি_মিনার - কেবল মনে রাখবেন যে ডেটাতে মূল নিদর্শনগুলিতে ফোকাস দেওয়ার জন্য এবং ছোট আকারের নিদর্শনগুলি এবং শব্দকে ছাঁটাইতে কাটা ব্যবহৃত হয় used কাটা ডেটা এর মাত্রাগুলির ক্ষেত্রে ছোট নয়, তবে "ক্লিনার"। যাইহোক, কাটাছাটি কেবলমাত্র কয়েকটি ভেক্টর দিয়ে পুরো ম্যাট্রিক্সকে পুনর্গঠন করা যেতে পারে এমন ডেটার পরিমাণ হ্রাস করে। চিত্রের সংকোচনের জন্য পিসিএ ব্যবহারের একটি দুর্দান্ত উদাহরণ, যেখানে চিত্রটি পুনর্গঠন করতে খুব কম সংখ্যক পিসি ব্যবহার করা যেতে পারে। এই ভেক্টরগুলির এই ছোট উপসেটটি কম স্মৃতি গ্রহণ করে তবে পুনর্গঠনটি ছোট আকারের বিশদে কিছুটা ক্ষতিগ্রস্ত হবে।
মার্ক

3

এই অন্যান্য উত্তরগুলি খুব ভাল এবং বিস্তারিত, তবে আমি ভাবছি আপনি যদি আসলেই আরও অনেক মৌলিক প্রশ্ন জিজ্ঞাসা করেন: আপনার পিসি হয়ে গেলে আপনি কী করবেন?

প্রতিটি পিসি সহজভাবে একটি নতুন পরিবর্তনশীল হয়ে ওঠে। বলুন পিসি 1 মোট প্রকরণের 60% এবং পিসি 2 অ্যাকাউন্ট 30% for মোট ভ্যারিয়েশনের 90% হিসাবে এটি যেহেতু আপনি সহজেই এই দুটি নতুন ভেরিয়েবল (পিসি) আপনার মূল ভেরিয়েবলের সরলিকৃত সংস্করণ হিসাবে নিতে পারেন। এর অর্থ হ'ল মডেলগুলিতে সেগুলি ফিট করা, যদি আপনি আগ্রহী হন। যখন আপনার ফলাফলগুলি ব্যাখ্যা করার সময় আসে, আপনি প্রতিটি পিসির সাথে সম্পর্কিত মূল ভেরিয়েবলের প্রসঙ্গে।

দুঃখিত যদি আমি প্রশ্নের ক্ষেত্রকে অবমূল্যায়ন করেছি!


2

আমিλআমিΣ=1পিλপিপি=784λ

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

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

একটি মন্তব্য : আমি মনে করি যে উপাদানগুলির সংখ্যা ধরে রাখার জন্য সর্বোত্তম নিষ্পাপ উপায়টি আপনার অনুমানকে নমুনা পরিবর্তনের কিছু প্রান্তিকের উপর ভিত্তি করে তৈরি করা হয় যা আপনি কেবল কিছু স্বেচ্ছাসেবী সংখ্যার চেয়ে আপনার হ্রাস মাত্রিকতার নমুনায় ধরে রাখতে চান। 3, 100, 200. হিসাবে ব্যবহারকারী 4959 ব্যাখ্যা করেছেন আপনি $loadingsউত্পাদিত তালিকার অবজেক্টে ক্ষেত্রের নিচে তালিকার প্রাসঙ্গিক ক্ষেত্রটি পরীক্ষা করে সেই संचयी প্রকরণটি পরীক্ষা করতে পারেন princomp


1
আপনি যেমন প্রিন্সিপাল কম্পোনেন্ট রিগ্রেশন উল্লেখ করেছেন, R তে যা প্যাকেজ প্লিজ সরবরাহ করে। উপাদানগুলির সংখ্যা ধরে রাখতে, আমি কোনও% এর চেয়ে% বৈকল্পিকতা সিদ্ধান্ত নেওয়ার কোনও আসল সুবিধা দেখতে পাচ্ছি না। উপাদানগুলির (সম্ভবত এটি হ'ল কারণ আমি এমন ডেটা নিয়ে কাজ করি যা খুব কম মাত্রায় শব্দ করে @ উচিত) ডেটা টাইপ এবং অনুসরণ করা ডেটা বিশ্লেষণের ধরণের উপর নির্ভর করে।
সিবিলেটগুলি মনিকা

plsprincomp {stats}কেকেডিডি

1
হ্যাঁ, এটি নিষ্পাপ। আমি সম্মত নই যে বর্ণিত বৈকল্পিকের একটি স্বেচ্ছাসেবক% নির্ধারণের অন্য কোনও স্বেচ্ছাসেবক কাট-অফের একটি অভ্যন্তরীণ সুবিধা রয়েছে। তবে যাইহোক এটি এ হিসাবে লড়াইয়ের পক্ষে মূল্যহীন নয়) ওপি কখনই নম্বরটি বেছে নেওয়ার বিষয়ে পরামর্শ চাননি। পিসি রাখার জন্য এবং খ) আমি মনে করি যে আমরা যেভাবেই হোক পিসিএ মডেলের যথাযথ পরিদর্শন করা উচিত agree
সিবেলাইটস মনিকাকে

সমস্যা নেই; এটি যাইহোক আমার উত্তর দেওয়ার আগে কেবল একটি মন্তব্য ছিল। (আমি আমার মন্তব্যের অনুচ্ছেদটি শেষ হিসাবে রাখব কারণ আমি কী বলতে চাই তা স্পষ্ট করে না দিয়ে বিভ্রান্ত হয়)
ইউএসআর 11852

0

পিসিএ করার পরে আপনি প্রথম দুটি উপাদান এবং প্লট নির্বাচন করতে পারেন .. আপনি আর এ স্ক্রি প্লট ব্যবহার করে উপাদানগুলির বিভিন্নতা দেখতে পাবেন load লোডিংস = টি সহ সারাংশ ফাংশন ব্যবহার করে আপনি উপাদানগুলির সাথে বৈশিষ্ট্যগুলির প্রকরণকে ফিন করতে পারেন।

আপনি এই http://www.statmethods.net/advstats/factor.html এবং http://statmath.wu.ac.at/~hornik/QFS1/prصولal_comp घटक-vignette.pdf এও দেখতে পারেন

আপনি যা চান তা ভাবার চেষ্টা করুন। আপনি পিসিএ বিশ্লেষণ থেকে প্রচুর জিনিস ব্যাখ্যা করতে পারেন।

সেরা অভীক

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