Làm thế nào để sử dụng kết quả R prcomp để dự đoán?


25

Tôi có một data.frame với 800 obs. trong số 40 biến và muốn sử dụng Phân tích thành phần nguyên tắc để cải thiện kết quả dự đoán của tôi (cho đến nay vẫn hoạt động tốt nhất với Support Vector Machine trên khoảng 15 biến được chọn bằng tay).

Tôi hiểu một prcomp có thể giúp tôi cải thiện dự đoán của mình, nhưng tôi không biết cách sử dụng kết quả của hàm prcomp.

Tôi nhận được kết quả:

> 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

Tôi nghĩ rằng tôi sẽ có được các tham số quan trọng nhất để sử dụng, nhưng tôi không tìm thấy thông tin này. Tất cả những gì tôi thấy là Độ lệch chuẩn, v.v. trên PC. Nhưng làm thế nào để tôi sử dụng điều này để dự đoán?


2
Ngoài ra còn có thư viện R pls(Squial Least Squares), có các công cụ cho PCR ( Regression Thành phần chính ).
Stepan S. Sushko

Câu trả lời:


35

Mặc dù tôi không chắc về bản chất vấn đề của bạn, tôi có thể nói với bạn rằng tôi đã sử dụng PCA như một phương tiện để trích xuất các mẫu chi phối trong một nhóm các biến dự đoán trong quá trình xây dựng mô hình sau này. Trong ví dụ của bạn, chúng sẽ được tìm thấy trong các thành phần nguyên tắc (PC) PCAAnalysis$xvà chúng sẽ dựa trên trọng số của các biến được tìm thấy trong PCAAnalysis$rotation. Một lợi thế của quá trình này là PC là trực giao và do đó bạn loại bỏ các vấn đề về tính đa hình giữa các yếu tố dự đoán mô hình. Thứ hai, là bạn có thể xác định được một tập hợp con PC nhỏ hơn chiếm phần lớn phương sai trong các dự đoán của bạn. Thông tin này có thể được tìm thấy trong summary(PCAAnalysis)hoặc trong PCAAnalysis$sdev. Cuối cùng, nếu bạn muốn sử dụng một tập hợp con của PC để dự đoán, thì bạn có thể đặt toltham số trongprcomp đến một mức cao hơn để loại bỏ các PC đang theo dõi.

Bây giờ, bạn có thể "chiếu" dữ liệu mới lên cơ sở tọa độ PCA bằng cách sử dụng predict.prcomp()chức năng. Vì bạn đang gọi bộ dữ liệu của mình là tập dữ liệu "đào tạo", điều này có thể có ý nghĩa khi đó chiếu dữ liệu xác thực lên cơ sở PCA của bạn để tính toán tọa độ PC tương ứng của chúng. Dưới đây là một ví dụ về việc gắn PCA vào 4 phép đo sinh trắc học của các loài iris khác nhau (tương quan ở một mức độ nào đó). Theo đó, tôi dự đoán các giá trị sinh trắc học của một tập hợp dữ liệu hoa mới có các kết hợp tương tự của các phép đo này cho mỗi ba loài iris. Bạn sẽ thấy từ biểu đồ cuối cùng rằng các PC được chiếu của chúng nằm trong một khu vực tương tự của âm mưu như tập dữ liệu gốc.

Một ví dụ sử dụng tập irisdữ liệu:

### 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()

nhập mô tả hình ảnh ở đây


Cảm ơn bạn đã cung cấp rất nhiều chi tiết. Thật không may, mã ví dụ là quá khó hiểu đối với tôi. Tôi thấy bạn đang sử dụng dự đoán. Hướng dẫn dự đoán prcomp ở đâu? có ở đây không: stat.ethz.ch/R-manual/R-patched/l Library / stat / html / prcomp.html ?
tucson

Bây giờ tôi đã thêm giải thích cho câu trả lời của tôi. Hy vọng nó là rõ ràng hơn với bạn bây giờ. Vâng, bạn đã chính xác trong liên kết của bạn để predict.prcompgiúp đỡ.
Marc trong hộp

11

Thông tin từ lệnh tóm tắt () mà bạn đã đính kèm vào câu hỏi cho phép bạn xem, ví dụ: tỷ lệ phương sai mà mỗi thành phần chính nắm bắt (Tỷ lệ phương sai). Ngoài ra, tỷ lệ tích lũy được tính toán cho đầu ra. Ví dụ: bạn cần có 23 PC để nắm bắt 75% phương sai trong tập dữ liệu của bạn.

Đây chắc chắn không phải là thông tin bạn thường sử dụng làm đầu vào để phân tích thêm. Thay vào đó, những gì bạn thường cần là dữ liệu được xoay, được lưu dưới dạng 'x' trong đối tượng được tạo bởi prcomp.

Sử dụng mã R làm ví dụ ngắn.

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

Sau đó, bạn có thể sử dụng dữ liệu trong newdat để phân tích thêm, ví dụ, làm đầu vào cho SVM hoặc một số mô hình hồi quy. Ngoài ra, hãy xem, ví dụ: /programming/1805149/how-to-fit-a-linear-regression-model-with-two-principal-components-in-r để biết thêm thông tin.


1
Cảm ơn bạn @JTT. Vì vậy, nếu bây giờ tôi sử dụng newdat để tạo mô hình SVM, tôi cho rằng mô hình của tôi lấy đầu vào trong vũ trụ xoay mới này, điều đó có nghĩa là tôi cũng sẽ cần phải xoay dữ liệu Thử nghiệm của mình trước khi áp dụng nó vào mô hình. Điều này có đúng không? Và nếu có, làm thế nào để bạn xoay một dữ liệu thử nghiệm.frame với cùng một vòng quay?
tucson

3
Cách dễ nhất là sử dụng predict()phương pháp cho dữ liệu thử nghiệm. Sử dụng ví dụ trên, predict(pr, USArrests)sẽ trả về cùng một ma trận như pr$x. Đối với dữ liệu thử nghiệm, thay thế USarrests bằng tên của dữ liệu thử nghiệm. Bạn có thể làm điều tương tự bằng tay, nhưng điều này dễ dàng hơn, vì các phương thức dự đoán sẽ tự động chăm sóc tỷ lệ chính xác của tập dữ liệu thử nghiệm.
JTT

1
Làm thế nào để dự đoán làm việc? Liệu nó sử dụng tất cả các Compenents chính. Trong câu trả lời của bạn, bạn đã chỉ chọn 2 Thành phần để bao phủ 80% phương sai. Dự đoán làm gì?
tucson

1
Hàm predict()sử dụng theo mặc định tất cả các thành phần. Tuy nhiên, bạn có thể giới hạn số lượng thành phần được trả về, ví dụ: `dự đoán (pr, USArrests) [, 1: 2]. bạn có muốn công việc kia?
JTT

Bạn có cần phải tập trung và chia tỷ lệ dữ liệu mới của mình trước khi dự đoán không? Hoặc predict()làm điều đó tự động đưa ra các tham số ban đầu với prcomp()?
Dale Kube
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.