भविष्यवाणी के लिए आर prcomp परिणामों का उपयोग कैसे करें?


25

मेरे पास 800 अवलोकन के साथ एक डेटा.फ्रेम है। 40 चर की, और मेरी भविष्यवाणी के परिणामों को बेहतर बनाने के लिए सिद्धांत घटक विश्लेषण का उपयोग करना चाहेंगे (जो अब तक कुछ 15 हाथ से चुने गए चर पर सपोर्ट वेक्टर मशीन के साथ सबसे अच्छा काम कर रहा है)।

मैं समझता हूं कि एक prcomp मुझे अपनी भविष्यवाणियों को बेहतर बनाने में मदद कर सकता है, लेकिन मुझे नहीं पता कि prcomp फ़ंक्शन के परिणामों का उपयोग कैसे किया जाए।

मैं परिणाम प्राप्त करता हूं:

> PCAAnalysis <- prcomp(TrainTrainingData, scale.=TRUE)
> summary(PCAAnalysis)
Importance of components:
                          PC1    PC2    PC3    PC4    PC5   PC6    PC7    PC8    PC9   PC10   PC11   PC12   PC13   PC14
Standard deviation     1.7231 1.5802 1.3358 1.2542 1.1899 1.166 1.1249 1.1082 1.0888 1.0863 1.0805 1.0679 1.0568 1.0520
Proportion of Variance 0.0742 0.0624 0.0446 0.0393 0.0354 0.034 0.0316 0.0307 0.0296 0.0295 0.0292 0.0285 0.0279 0.0277
Cumulative Proportion  0.0742 0.1367 0.1813 0.2206 0.2560 0.290 0.3216 0.3523 0.3820 0.4115 0.4407 0.4692 0.4971 0.5248
                         PC15   PC16   PC17   PC18  PC19   PC20   PC21   PC22   PC23   PC24   PC25   PC26   PC27   PC28
Standard deviation     1.0419 1.0283 1.0170 1.0071 1.001 0.9923 0.9819 0.9691 0.9635 0.9451 0.9427 0.9238 0.9111 0.9073
Proportion of Variance 0.0271 0.0264 0.0259 0.0254 0.025 0.0246 0.0241 0.0235 0.0232 0.0223 0.0222 0.0213 0.0208 0.0206
Cumulative Proportion  0.5519 0.5783 0.6042 0.6296 0.655 0.6792 0.7033 0.7268 0.7500 0.7723 0.7945 0.8159 0.8366 0.8572
                         PC29   PC30   PC31   PC32   PC33   PC34   PC35   PC36    PC37                 PC38
Standard deviation     0.8961 0.8825 0.8759 0.8617 0.8325 0.7643 0.7238 0.6704 0.60846 0.000000000000000765
Proportion of Variance 0.0201 0.0195 0.0192 0.0186 0.0173 0.0146 0.0131 0.0112 0.00926 0.000000000000000000
Cumulative Proportion  0.8773 0.8967 0.9159 0.9345 0.9518 0.9664 0.9795 0.9907 1.00000 1.000000000000000000
                                       PC39                 PC40
Standard deviation     0.000000000000000223 0.000000000000000223
Proportion of Variance 0.000000000000000000 0.000000000000000000
Cumulative Proportion  1.000000000000000000 1.000000000000000000

मैंने सोचा था कि मैं उन मापदंडों को प्राप्त करूंगा जो उपयोग करने के लिए सबसे महत्वपूर्ण हैं, लेकिन मुझे अभी यह जानकारी नहीं मिली है। सभी मैं देख रहा हूं कि पीसी पर मानक विचलन आदि हैं। लेकिन मैं भविष्यवाणी के लिए इसका उपयोग कैसे करूं?


2
इसमें आर लाइब्रेरी pls(पार्शियल लेस्टर स्क्वेयर) भी है, जिसमें पीसीआर ( प्रिंसिपल कंपोनेंट रिग्रेशन ) के उपकरण हैं।
Stepan S. Sushko

जवाबों:


35

जब मैं आपकी समस्या की प्रकृति के बारे में अनिश्चित हूं, तो मैं आपको बता सकता हूं कि मैंने मॉडल के बाद की इमारत में भविष्यवक्ता चर के समूह में प्रमुख पैटर्न को निकालने के साधन के रूप में पीसीए का उपयोग किया है। आपके उदाहरण में, ये सिद्धांत घटकों (पीसी) में पाए जाएंगे PCAAnalysis$x, और ये इसमें पाए जाने वाले चर के भार के आधार पर होंगे PCAAnalysis$rotation। इस प्रक्रिया का एक फायदा यह है कि पीसी ऑर्थोगोनल होते हैं, और इसलिए आप मॉडल प्रेडिक्टर्स के बीच मल्टीकोलिनरिटी के मुद्दों को दूर करते हैं। दूसरा, यह है कि आप पीसी के एक छोटे उपसमूह की पहचान करने में सक्षम हो सकते हैं, जो आपके पूर्ववर्तियों में बहुसंख्यक विचरण को पकड़ लेता है। यह जानकारी अंदर summary(PCAAnalysis)या बाहर पाई जा सकती है PCAAnalysis$sdev। अंत में, यदि आप भविष्यवाणी के लिए पीसी के सबसेट का उपयोग करने में रुचि रखते हैं, तो आप tolपैरामीटर को अंदर सेट कर सकते हैंprcomp अनुगामी पीसी को निकालने के लिए एक उच्च स्तर पर।

अब, आप predict.prcomp()फ़ंक्शन का उपयोग करके पीसीए समन्वय आधार पर नए डेटा को "प्रोजेक्ट" कर सकते हैं । जब से आप अपने डेटा सेट को "प्रशिक्षण" डेटा सेट कह रहे हैं, तब यह आपके पीसीए आधार पर उनके संबंधित पीसी निर्देशांक की गणना के लिए एक सत्यापन डेटा सेट कर सकता है। नीचे विभिन्न आइरिस प्रजातियों के 4 बायोमेट्रिक माप (जो कुछ हद तक सहसंबद्ध हैं) में पीसीए फिट करने का एक उदाहरण है। इसके बाद, मैं फूलों के एक नए डेटा सेट के बायोमेट्रिक मूल्यों को प्रोजेक्ट करता हूं जिसमें आईरिस की तीन प्रजातियों में से प्रत्येक के लिए इन मापों के समान संयोजन होते हैं। आप अंतिम ग्राफ से देखेंगे कि उनके अनुमानित पीसी मूल डेटा सेट के रूप में भूखंड के समान क्षेत्र में स्थित हैं।

irisडेटा सेट का उपयोग कर एक उदाहरण :

### pca - calculated for the first 4 columns of the data set that correspond to biometric measurements ("Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width")
data(iris)

# split data into 2 parts for pca training (75%) and prediction (25%)
set.seed(1)
samp <- sample(nrow(iris), nrow(iris)*0.75)
iris.train <- iris[samp,]
iris.valid <- iris[-samp,]

# conduct PCA on training dataset
pca <- prcomp(iris.train[,1:4], retx=TRUE, center=TRUE, scale=TRUE)
expl.var <- round(pca$sdev^2/sum(pca$sdev^2)*100) # percent explained variance

# prediction of PCs for validation dataset
pred <- predict(pca, newdata=iris.valid[,1:4])

###Plot result
COLOR <- c(2:4)
PCH <- c(1,16)

pc <- c(1,2) # principal components to plot

png("pca_pred.png", units="in", width=5, height=4, res=200)
op <- par(mar=c(4,4,1,1), ps=10)
plot(pca$x[,pc], col=COLOR[iris.train$Species], cex=PCH[1], 
 xlab=paste0("PC ", pc[1], " (", expl.var[pc[1]], "%)"), 
 ylab=paste0("PC ", pc[2], " (", expl.var[pc[2]], "%)")
)
points(pred[,pc], col=COLOR[iris.valid$Species], pch=PCH[2])
legend("topright", legend=levels(iris$Species), fill = COLOR, border=COLOR)
legend("topleft", legend=c("training data", "validation data"), col=1, pch=PCH)
par(op)
dev.off()

यहाँ छवि विवरण दर्ज करें


इतनी जानकारी प्रदान करने के लिए धन्यवाद। दुर्भाग्य से उदाहरण कोड मेरे लिए बहुत गूढ़ है। मैं देख रहा हूं कि आप भविष्यवाणी का उपयोग कर रहे हैं। Prcomp की भविष्यवाणी के लिए मैनुअल कहाँ है? क्या यह यहाँ है: stat.ethz.ch/R-manual/R-patched/library/stats/html/compcomp.html ?
tucson

मैंने अब अपने उत्तर में और व्याख्या जोड़ दी है। उम्मीद है कि अब यह आपके लिए स्पष्ट है। हां, आप predict.prcompमदद के लिए अपने लिंक में सही थे ।
बॉक्स में मार्क

11

सारांश () कमांड से जो जानकारी आपने प्रश्न से जुड़ी है, वह आपको देखने की अनुमति देती है, उदाहरण के लिए, प्रत्येक प्रमुख घटक के विचरण का अनुपात कैप्चर (प्रसरण का अनुपात)। इसके अलावा, संचयी अनुपात आउटपुट के लिए गणना की जाती है। उदाहरण के लिए, आपके डेटा सेट में 75% विचरण को पकड़ने के लिए आपके पास 23 पीसी होना आवश्यक है।

यह निश्चित रूप से जानकारी नहीं है जिसे आप आमतौर पर आगे के विश्लेषण के इनपुट के रूप में उपयोग करते हैं। बल्कि, आपको आमतौर पर जिस चीज की आवश्यकता होती है, वह घुमाया हुआ डेटा है, जिसे prcomp द्वारा बनाई गई ऑब्जेक्ट में 'x' के रूप में सहेजा जाता है।

एक संक्षिप्त उदाहरण के रूप में आर कोड का उपयोग करना।

pr<-prcomp(USArrests, scale = TRUE)
summary(pr) # two PCs for cumulative proportion of >80% 
newdat<-pr$x[,1:2]

फिर आप नए डेटा में डेटा का उपयोग आगे के विश्लेषण के लिए कर सकते हैं, उदाहरण के लिए, एसवीएम या कुछ प्रतिगमन मॉडल के इनपुट के रूप में। इसके अलावा, देखें, उदाहरण के लिए, /programming/1805149/how-to-fit-a-linear-regression-model-with-two-principal-compenders-in-r पर अधिक जानकारी के लिए।


1
शुक्रिया @JTT इसलिए यदि मैं अब SVM मॉडल बनाने के लिए newdat का उपयोग करता हूं, तो मुझे लगता है कि मेरा मॉडल इस नए घुमाए गए ब्रह्मांड में इनपुट लेता है, जिसका अर्थ है कि मुझे मॉडल को लागू करने से पहले अपने टेस्ट डेटा को भी घुमाना होगा। क्या ये सही है? और यदि हाँ, तो आप एक ही घुमाव के साथ एक परीक्षण data.frame कैसे घुमाते हैं?
टक्सन

3
सबसे आसान तरीका predict()परीक्षण डेटा के लिए विधि का उपयोग करना है । ऊपर दिए गए उदाहरण का उपयोग करते हुए, predict(pr, USArrests)उसी मैट्रिक्स को वापस करेंगे pr$x। परीक्षण डेटा के लिए, USarrests को परीक्षण डेटा के नाम से प्रतिस्थापित करें। आप हाथ से एक ही काम कर सकते हैं, लेकिन यह आसान है, क्योंकि भविष्यवाणी के तरीके परीक्षण डेटा सेट की सही स्केलिंग का स्वचालित रूप से ध्यान रखते हैं।
जेटीटी

1
भविष्यवाणी कैसे काम करती है? क्या यह सभी प्रिंसिपल कम्पेनेंट्स का उपयोग करता है। अपने उत्तर में आपने 80% विचरण को कवर करने के लिए केवल 2 अवयवों को चुना था। भविष्यवाणी क्या करती है?
tucson

1
फ़ंक्शन predict()सभी घटकों को डिफ़ॉल्ट रूप से उपयोग करता है। हालाँकि, आप दिए गए घटकों की संख्या को सीमित कर सकते हैं, जैसे, 'पूर्वसूचना (पीआर, यूएसएस्ट्रैट्स) [, 1: 2]। क्या वह काम तुम्हारे लिये होगा?
जेटीटी

क्या आपको भविष्यवाणी से पहले अपने नए डेटा को केंद्र और स्केल करने की आवश्यकता है? या ऐसा predict()नहीं करता है कि स्वचालित रूप से प्रारंभिक पैरामीटर दिए गए हैं prcomp()?
डेल क्यूब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.