Làm thế nào để nhanh chóng chọn các biến quan trọng từ một tập dữ liệu rất lớn?


9

Tôi có một bộ dữ liệu với khoảng 2.000 biến nhị phân / 200.000 hàng và tôi đang cố gắng dự đoán một biến phụ thuộc nhị phân duy nhất. Mục tiêu chính của tôi trong giai đoạn này không phải là dự đoán chính xác, mà là xác định biến nào trong số các biến này là yếu tố dự báo quan trọng. Tôi muốn giảm số lượng biến trong mô hình cuối cùng của tôi xuống còn khoảng 100.

Có một cách tương đối nhanh chóng để có được các biến quan trọng nhất? RandomForest dường như mất nhiều thời gian.

Tôi không phải sử dụng tất cả 200.000 quan sát, vì vậy lấy mẫu là một tùy chọn trên bàn.


Bằng cách dự đoán "quan trọng" thay vì "chính xác", bạn có nghĩa là bạn muốn tìm những người là ứng cử viên tốt nhất để giải thích kết quả và giúp bạn xây dựng một lý thuyết? Nếu vậy, 100 biến giải thích là một con số rất lớn - cực kỳ lớn. Xây dựng lý thuyết và giải thích thực sự (chứ không phải chỉ là dự đoán) có thể sẽ yêu cầu bạn giảm số lượng X xuống còn 10 hoặc 15.
rolando2

2
@ rolando2 Trong một số ứng dụng 100 không lớn chút nào. Ví dụ, tài liệu về khả năng tiếp cận các điểm băng rộng tốc độ cao với khoảng 150 biến (trong số hàng trăm phân tích) và tất cả chúng đều hợp lý: chúng liên quan đến việc dễ dàng kỹ thuật (địa hình, loại đá, khí hậu, v.v.), về kinh tế (SES, v.v.), đối với nhân khẩu học, hình học của cơ sở hạ tầng giao thông địa phương, chính trị (thuế và môi trường kinh doanh), v.v. Tôi tin rằng nhiều mô hình kinh tế tương tự có thể bao gồm hàng trăm biến số quan trọng về mặt lý thuyết.
whuber

@whuber - Tôi đang suy nghĩ về quan điểm của bạn ... Bạn có đồng ý rằng cần phải có một nhà phân tích chuyên nghiệp, tài năng và dày dạn kinh nghiệm để sắp xếp các vai trò nhân quả (thay vì chỉ dự đoán) được chơi bởi rất nhiều biến số?
rolando2

@rolando Chắc chắn rồi. 2000 biến là rất nhiều công việc!
whuber

Câu trả lời:


6

Bạn có thể bắt đầu với bộ lọc Univariate đơn giản và sử dụng xác thực chéo để quyết định biến nào sẽ giữ. Các sbfchức năng trong caretgói cho R là thực sự hữu ích. Bạn có thể đọc thêm về nó ở đây , bắt đầu từ trang 19.


Cảm ơn. Tôi chỉ đọc bài báo và nó có vẻ như là một cách tiếp cận vững chắc. Tuy nhiên, tôi đang gặp một số vấn đề về bộ nhớ trên hệ thống Bộ nhớ 4 MB 64 bit của mình.
DevX

1
@DevX: Nếu bạn có quá nhiều dữ liệu, bạn có thể thử lấy một mẫu và chọn các biến dựa trên mẫu không?
Zach

13

Điều này có vẻ như là một vấn đề phù hợp cho Lasso và bạn bè làm co rút và lựa chọn biến. Các yếu tố của học thống kê mô tả lasso và lưới đàn hồi cho hồi quy và, điều gì phù hợp hơn cho vấn đề này, hồi quy logistic.

Các tác giả của cuốn sách đã thực hiện hiệu quả lasso và lưới đàn hồi có sẵn dưới dạng gói R được gọi là glmnet . Trước đây tôi đã sử dụng gói này để phân tích dữ liệu nhị phân với ma trận dữ liệu khoảng 250.000 hàng, mặc dù có ít cột hơn nhưng thực sự chạy hồi quy của tất cả các cột so với tất cả các cột khác. Nếu ma trận dữ liệu cũng thưa thớt, việc triển khai cũng có thể tận dụng lợi thế đó và tôi tin rằng phương thức này thực sự có thể hoạt động đối với tập dữ liệu đầy đủ của OP. Dưới đây là một số ý kiến ​​về Lasso:

  • Lasso đạt được lựa chọn biến bằng cách sử dụng hàm hình phạt không trơn tru ( -norm), thường dẫn đến ước tính tham số với một số tham số chính xác bằng 0. Có bao nhiêu tham số khác không được ước tính và bao nhiêu các tham số khác không được thu nhỏ lại, được xác định bởi tham số điều chỉnh. Hiệu quả của việc thực hiện trong glmnet phụ thuộc rất nhiều vào thực tế là đối với một hình phạt lớn chỉ có một vài tham số khác 0.1
  • Việc lựa chọn tham số điều chỉnh thường được thực hiện bằng xác thực chéo, nhưng ngay cả khi không có bước xác thực chéo, phương thức có thể đưa ra một chuỗi các biến được chọn được lập chỉ mục bởi tham số hình phạt.
  • Mặt khác, đối với lựa chọn biến, là Lasso có thể không ổn định trong việc lựa chọn các biến, đặc biệt, nếu chúng có phần tương quan. Hình phạt ròng đàn hồi tổng quát hơn đã được phát minh để cải thiện sự bất ổn này, nhưng nó không giải quyết được hoàn toàn vấn đề. Thích ứng lasso là một ý tưởng khác để cải thiện lựa chọn biến cho lasso.
  • Lựa chọn ổn định là một phương pháp chung được đề xuất bởi Meinshausen và Bühlmann để đạt được sự ổn định cao hơn của các biến được chọn với các phương thức như lasso. Nó đòi hỏi một số sự phù hợp với các mẫu con của tập dữ liệu và, do đó, đòi hỏi tính toán cao hơn nhiều.
  • Một cách suy nghĩ hợp lý về Lasso là một phương pháp để tạo ra một tập hợp các mô hình "tốt" một chiều, từ mô hình một biến đến một mô hình phức tạp hơn (không nhất thiết phải bao gồm tất cả các biến) được tham số hóa bởi tham số hình phạt. Ngược lại, các bộ lọc đơn biến chỉ tạo ra một lựa chọn hoặc sắp xếp các mô hình biến đơn duy nhất.

Đối với Python, có một triển khai trong scikit-learn về các phương thức như lasso và lưới đàn hồi.


Như một khái niệm bổ sung, nếu số lượng các yếu tố dự đoán tiềm năng, như trong GWAS, bạn có thể làm một cái gì đó giống như trong bài viết này để chọn trước: Phân tích liên kết toàn bộ bộ gen bằng phương pháp hồi quy logistic bị trừng phạt
Nick Sabbe

@NickSabbe, cảm ơn bạn đã tham khảo. Nó rất là hữu ích. Trong bối cảnh của GWAS, và có lẽ trong các bối cảnh khác với số lượng lớn các yếu tố dự đoán tương quan, tôi đã nghe Sylvia Richardson đề xuất lựa chọn mô hình Bayes dựa trên một số so sánh với lựa chọn ổn định. Các tính toán MCMC thực sự đòi hỏi, mặc dù.
NRH

Tôi nghĩ rằng đáng để nhấn mạnh Lasso Thích ứng hơn vì nó dễ thực hiện (hầu như chỉ có hai cuộc gọi thay vì một cuộc gọi đến glmnetR). Một lựa chọn khác là Threshold the Lasso cũng khá đơn giản để thực hiện. Xem phần 2.9 của springer.com/gp/book/9783642201912 .
Benjamin Christoffersen

2

Bạn có thể thực hiện kiểm tra hồi quy logistic / kiểm tra chi bình phương cho mỗi biến và chỉ giữ lại những biến có giá trị p nhỏ hơn một số giá trị, giả sử .2.


4
Để hiểu được đề xuất này có thể diễn ra như thế nào, hãy xem xét trường hợp có 100 (dự đoán) các yếu tố dự đoán quan trọng (tương quan cao với biến phụ thuộc) và phần còn lại hoàn toàn không liên quan đến biến phụ thuộc và lẫn nhau. Giữ lại những giá trị p nhỏ hơn 0,2 đảm bảo rằng bạn sẽ kết thúc với khoảng 100 + 0,2 * (2000-100) = 480 biến, trong đó 380 là vô giá trị. Đối với các bộ dữ liệu nhỏ , cách tiếp cận này đôi khi được sử dụng như một màn hình ban đầu nhanh chóng, nhưng nó thực sự không thể được xem xét nghiêm túc ở đây.
whuber

Điểm tốt @whuber. Bạn sẽ phải đặt mức alpha thấp hơn nhiều để giữ lại khoảng 100 nhưng sau đó bạn có thể bỏ lỡ các biến chỉ có thể ảnh hưởng đến việc điều chỉnh cho người khác. Tuy nhiên, đi từ 2000 đến 480 có thể dễ quản lý hơn trong việc điều hành một cái gì đó như rừng ngẫu nhiên.
Glen

Bạn nói đúng, có công trong việc sàng lọc như vậy - nếu nó hoạt động đúng. 480 là giảm, nhưng có thêm vấn đề từ khả năng tương quan cao trong số tất cả 2000 biến ban đầu. Điều này có thể khiến bất kỳ hoặc tất cả 100 biến chính xác không được giữ lại, như được minh họa trong một số câu trả lời cho một câu hỏi liên quan .
whuber
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.