Giải hệ phương trình với dữ liệu thưa


11

Tôi đang cố gắng giải một tập hợp các phương trình có 40 biến độc lập (x1, ..., x40) và một biến phụ thuộc (y). Tổng số phương trình (số hàng) là ~ 300 và tôi muốn giải quyết tập hợp 40 hệ số giúp giảm thiểu tổng sai số tổng bình phương giữa y và giá trị dự đoán.

Vấn đề của tôi là ma trận rất thưa thớt và tôi không biết cách tốt nhất để giải hệ phương trình với dữ liệu thưa. Một ví dụ về bộ dữ liệu được hiển thị dưới đây:

   y    x1  x2 x3 x4 x5 x6 ... x40
87169   14  0  1  0  0  2  ... 0 
46449   0   0  4  0  1  4  ... 12
846449  0   0  0  0  0  3  ... 0
....

Tôi hiện đang sử dụng Thuật toán di truyền để giải quyết vấn đề này và kết quả được đưa ra với khoảng một yếu tố của hai sự khác biệt giữa quan sát và dự kiến.

Bất cứ ai cũng có thể đề xuất các phương pháp hoặc kỹ thuật khác nhau có khả năng giải một tập hợp các phương trình với dữ liệu thưa thớt.


2
Typo trong tiêu đề: tùng => thưa thớt.
Alexanderr Blekh

Câu trả lời:


11

Nếu tôi hiểu bạn một cách chính xác, đây là trường hợp hồi quy tuyến tính nhiều với dữ liệu thưa thớt ( hồi quy thưa thớt ). Giả sử rằng, tôi hy vọng bạn sẽ tìm thấy các tài nguyên sau hữu ích.

1) Bài giảng NCSU trình bày về hồi quy thưa thớt với tổng quan về thuật toán, ghi chú, công thức, đồ họa và tài liệu tham khảo cho tài liệu: http://www.stat.ncsu.edu/people/zhou/cifts/st810/notes/lect23spzzy.pdf

2) Rhệ sinh thái cung cấp nhiều gói , hữu ích cho phân tích hồi quy thưa thớt, bao gồm:

3) Một bài đăng trên blog với một ví dụ về giải pháp hồi quy thưa thớt , dựa trên SparseM: http : // aleph-n think.blogspot.com/2012/03/multipl-linear-regression-with-spude.html

4) Một bài đăng trên blog về việc sử dụng ma trận thưa thớt trong R , trong đó bao gồm một đoạn mồi về việc sử dụng glmnet: http://www.johnmstylewhite.com/notebook/2011/10/31/USE-spude-matrices-in-r

5) thể tìm thấy nhiều ví dụ và một số thảo luận về chủ đề này trên StackOverflow : /programming/3169371/large-scale-regression-in-r-with-a-spzzy-feature-matrix

CẬP NHẬT (dựa trên nhận xét của bạn):

Nếu bạn đang cố gắng giải quyết vấn đề LP bằng các ràng buộc, bạn có thể thấy bài viết lý thuyết này hữu ích: http://web.stanford.edu/group/SOL/ con / gmsw84.pdf .

Ngoài ra, hãy kiểm tra gói R limSolve : http://cran.r-project.org/web/packages/limSolve . Và, nói chung, hãy kiểm tra các gói trong CRAN Nhiệm vụ xem "Tối ưu hóa và lập trình toán học" : http://cran.r-project.org/web/view/Optimization.html .

Cuối cùng, kiểm tra cuốn sách "Sử dụng R để phân tích số trong khoa học và kỹ thuật" (của Victor A. Bloomfield). Nó có một phần về giải các hệ phương trình, được biểu thị bằng các ma trận thưa thớt (phần 5.7, trang 99-104), bao gồm các ví dụ, dựa trên một số gói được đề cập ở trên: http://books.google.com.vn/books? id = 9ph_AwAAQBAJ & pg = PA99 & LPG = PA99 & dq = r + limsolve + thưa thớt + ma trận & source = bl & OTS = PHDE8nXljQ & sig = sPi4n5Wk0M02ywkubq7R7KD_b04 & hl = vi & sa = X & ei = FZjiU-ioIcjmsATGkYDAAg & ved = 0CDUQ6AEwAw # v = onepage & q = r% 20limsolve% 20sparse% 20matrix & f = false .


3
Cảm ơn bạn đã trả lời tuyệt vời! Tôi do dự khi phân loại vấn đề là hồi quy thưa thớt vì tôi không thực sự cố gắng mô hình hóa và dự đoán mà chỉ giải quyết một tập hợp các hệ số. Lý do tôi đang sử dụng Thuật toán di truyền là vì tôi cũng có thể sử dụng các ràng buộc trên phương trình. Nếu không có câu trả lời nào khác thông qua, tôi sẽ sẵn sàng chấp nhận điều này.
mike1886

1
@ mike1886: Niềm vui của tôi! Tôi đã cập nhật câu trả lời của tôi, dựa trên nhận xét của bạn. Hy vọng nó giúp.
Alexanderr Blekh

7

Câu trả lời của Alexanderr là hoàn toàn chính xác.

Tuy nhiên, cách đặt câu hỏi ngụ ý rằng đây là câu hỏi hồi quy bình phương nhỏ nhất bình thường đơn giản: giảm thiểu tổng số dư bình phương giữa một biến phụ thuộc và kết hợp tuyến tính của các yếu tố dự đoán.

Bây giờ, trong khi có thể có nhiều số không trong ma trận thiết kế của bạn, thì hệ thống của bạn không quá lớn: 300 quan sát trên 40 dự đoán không quá cỡ trung bình. Bạn có thể chạy hồi quy như vậy bằng R mà không cần bất kỳ nỗ lực đặc biệt nào cho dữ liệu thưa thớt. Chỉ cần sử dụng lm()lệnh (cho "mô hình tuyến tính"). Sử dụng ?lmđể xem trang trợ giúp. Và lưu ý rằng lmtheo mặc định sẽ âm thầm thêm một cột không đổi vào ma trận thiết kế của bạn (phần chặn) - bao gồm một -1bên phải của công thức của bạn để loại bỏ điều này. Nhìn chung, giả sử tất cả dữ liệu của bạn (và không có gì khác) được data.framegọi foo, bạn có thể thực hiện việc này:

model <- lm(y~.-1,data=foo)

Và sau đó bạn có thể xem các ước tính tham số, v.v. như thế này:

summary(model)
residuals(model)

Nếu hệ thống của bạn lớn hơn nhiều , hãy nói theo thứ tự 10.000 quan sát và hàng trăm dự đoán, xem xét các bộ giải thưa thớt chuyên dụng theo câu trả lời của Alexanderr có thể bắt đầu có ý nghĩa.

Cuối cùng, trong bình luận của bạn cho câu trả lời của Alexanderr , bạn đề cập đến các ràng buộc về phương trình của bạn. Nếu đó thực sự là vấn đề chính của bạn, có nhiều cách để tính bình phương tối thiểu bị ràng buộc trong R. Cá nhân tôi thích pcls()trong mgcvgói. Có lẽ bạn muốn chỉnh sửa câu hỏi của mình để bao gồm loại ràng buộc (ràng buộc hộp, ràng buộc không âm, ràng buộc tích phân, ràng buộc tuyến tính, ...) mà bạn gặp phải?


1
Stephan, tôi đánh giá cao những lời tốt đẹp của bạn! Nâng cao câu trả lời tốt đẹp của bạn. Bạn có thể quan tâm đến bản cập nhật tôi thực hiện cho câu trả lời của tôi, dựa trên nhận xét của tác giả câu hỏi.
Alexanderr Blekh
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.