Ý tưởng cho việc đưa ra một phương trình dự đoán cho Rừng ngẫu nhiên


8

Tôi đã đọc qua các bài viết sau đây đã trả lời câu hỏi tôi sẽ hỏi:

Sử dụng mô hình Rừng ngẫu nhiên để đưa ra dự đoán từ dữ liệu cảm biến

Cây quyết định dự đoán đầu ra

Đây là những gì tôi đã làm cho đến nay: Tôi đã so sánh Hồi quy logistic với Rừng ngẫu nhiên và RF vượt trội hơn Logistic. Bây giờ các nhà nghiên cứu y tế mà tôi làm việc muốn biến kết quả RF của tôi thành một công cụ chẩn đoán y tế. Ví dụ:

Nếu bạn là một người đàn ông châu Á từ 25 đến 35 tuổi, có Vitamin D dưới xx và Huyết áp trên xx, bạn có 76% khả năng mắc bệnh xxx.

Tuy nhiên, RF không cho vay các phương trình toán học đơn giản (xem các liên kết ở trên). Vì vậy, đây là câu hỏi của tôi: tất cả các bạn có ý tưởng gì khi sử dụng RF để phát triển một công cụ chẩn đoán (mà không phải xuất hàng trăm cây).

Đây là một vài ý tưởng của tôi:

  1. Sử dụng RF để chọn biến, sau đó sử dụng Logistic (sử dụng tất cả các tương tác có thể) để tạo phương trình chẩn đoán.
  2. Bằng cách nào đó tổng hợp rừng RF thành một "cây khổng lồ", bằng cách nào đó trung bình nút chia tách giữa các cây.
  3. Tương tự như # 2 và # 1, sử dụng RF để chọn các biến (nói tổng m biến), sau đó xây dựng hàng trăm cây phân loại, tất cả đều sử dụng mọi biến m, sau đó chọn cây đơn tốt nhất.

Còn ý tưởng nào khác không? Ngoài ra, làm # 1 thì dễ, nhưng có ý tưởng nào về cách thực hiện # 2 và # 3 không?


Lập phương trình dự đoán cho mỗi cây (nó sẽ là các điểm phân chia đơn giản), và sau đó tính trung bình các dự đoán từ mỗi phương trình? Bạn sẽ nhận được một phương trình quái vật, nhưng nó sẽ đại diện đầy đủ cho khu rừng.
Zach

Ý kiến ​​hay @Zach. Nhưng thật không may, tôi đang cố tránh mọi thứ "quái vật".
dfife

1
Bạn có phiền khi nghỉ ngơi tại sao rừng ngẫu nhiên đặt ra vấn đề thực hiện cho bạn? Chúng không đặc biệt chuyên sâu trừ khi bạn có hàng ngàn tính năng. Bạn có thể cắt tỉa nó xuống, nhưng không chắc bạn sẽ có dạng phân tích dễ tiêu hóa.
Jessica Collins

@ Jacob - Vấn đề là RF có rất nhiều cây quyết định. Tôi muốn báo cáo một công thức duy nhất (<một vài dòng nếu có thể) dự đoán gần như chính xác như RF. Vì tôi đang xuất bản tác phẩm của mình cho khán giả về độ tinh vi thống kê khiêm tốn, tôi nghĩ rằng việc xuất trang trên các trang của cây sẽ hạn chế nghiêm trọng khả năng phát hiện của tôi được thực hiện trong môi trường lâm sàng.
dfife

Tôi đã viết một hàm để tạo mã SQL cho một mô hình rừng ngẫu nhiên, xem: gist.github.com/shanebutler
Shane

Câu trả lời:


6

Đây là một số suy nghĩ:

  1. Tất cả các mô hình hộp đen có thể được kiểm tra theo một cách nào đó. Ví dụ, bạn có thể tính toán tầm quan trọng của từng tính năng hoặc bạn cũng có thể vẽ sơ đồ phản hồi dự đoán và thực tế cho từng tính năng ( liên kết );
  2. Bạn có thể nghĩ về một số cắt tỉa của đoàn. Không phải tất cả các cây trong rừng là cần thiết và bạn có thể chỉ sử dụng một vài cây. Bài viết: [Tìm kiếm khu rừng ngẫu nhiên nhỏ nhất, Zhang]. Mặt khác, chỉ cần Google "cắt tỉa đồng bộ" và xem "Phương pháp tập hợp: Cơ sở và thuật toán" Chương 6 ;
  3. Bạn có thể xây dựng một mô hình duy nhất bằng cách chọn tính năng như bạn đã nói. Mặt khác, bạn cũng có thể thử sử dụng phương pháp của Sebastos trong [Thu thập kiến ​​thức từ các ví dụ thông qua nhiều mô hình] bao gồm xây dựng bộ dữ liệu mới với dự đoán hộp đen và xây dựng cây quyết định trên đầu trang.
  4. Như đã đề cập trong này câu trả lời stack Exchange, một mô hình cây có vẻ interpretable nhưng nó là dễ bị thay đổi cao chỉ vì nhiễu loạn nhỏ của dữ liệu huấn luyện. Vì vậy, tốt hơn là sử dụng mô hình hộp đen. Mục đích cuối cùng của người dùng cuối là tìm hiểu lý do tại sao một bản ghi mới được phân loại là một lớp cụ thể. Bạn có thể nghĩ về một số tính năng quan trọng chỉ dành cho hồ sơ cụ thể đó.

Tôi sẽ đi 1. hoặc 2.


11

Tôi đã phải đối phó với tình huống tương tự khi sử dụng RF trong cài đặt chẩn đoán, với các bên liên quan, những người đã quen với các thuật toán sôi theo một phương trình đơn, dễ đọc. Tôi đã thấy rằng nếu bạn bắt đầu bằng cách giải thích một cây quyết định đơn giản (ở đây bạn có thể sử dụng các phương trình), sau đó là một phương pháp rất phức tạp, và sau đó giải thích những nhược điểm của việc quá khớp, bạn bắt đầu nhận được vài cái gật đầu. Khi bạn giải thích rằng nhiều cây nhỏ có thể giảm thiểu sự không chính xác bằng cách được trồng khác nhau ("ngẫu nhiên") và chúng có thể được sử dụng như một phiếu bầu hoặc trung bình để tránh phù hợp quá mức nhưng vẫn giải thích cho các trường hợp cạnh, bạn sẽ hiểu. Dưới đây là một số slide ví dụ tôi đã sử dụng với khả năng tiếp nhận tốt:

Bạn không thể rời khỏi cây trong rừng và chúng là thứ mang lại cho thuật toán nhiều sức mạnh và sức mạnh dự đoán, vì vậy hiếm khi có một giải pháp tốt hơn nếu RF hoạt động rất tốt cho bạn. Những người sẽ so sánh, như SVM (tùy thuộc vào dữ liệu của bạn), sẽ phức tạp không kém. Bạn phải làm cho họ hiểu rằng bất kỳ giải pháp tốt nào cũng sẽ là một hộp đen các loại (cho người dùng). Động thái tốt nhất của bạn là tạo ra một triển khai có thể tiêu thụ mà không đòi hỏi nhiều nỗ lực hơn một phương trình đơn lẻ. Tôi đã thành công với việc xây dựng mô hình RF bằng Python (thông qua sklearn) và tạo API REST của máy chủ web đơn giản, tải mô hình đó vào bộ nhớ và chấp nhận các biến trong POST để xuất dự đoán. Bạn cũng có thể thực hiện điều này trong Java hoặc R rất dễ dàng hoặc bỏ qua API và chỉ cần tạo một tệp nhị phân / jar thực thi lấy dữ liệu làm đối số.


Điểm hay! - Tổng hợp các kết quả của RF thành một phương trình duy nhất chắc chắn sẽ mất đi một số lợi thế của nó. Tôi đã không nghĩ về điều đó.
dfife

2
Nhiều khả năng, vâng. Tuy nhiên, sử dụng RF để tính toán tầm quan trọng của biến để giảm tính chiều, theo sau là phương pháp mà khán giả của bạn quen thuộc hơn, là một sự thỏa hiệp phổ biến. Điều quan trọng cần biết là tầm quan trọng thay đổi trong RF thường được tính toán dựa trên hiệu suất trong RF (nâng, giảm lỗi, v.v.) và có thể không mang tất cả trọng lượng tương tự trong các phương pháp khác.
wwwslinger

2

Tôi có kinh nghiệm triển khai các khu rừng ngẫu nhiên trong môi trường SQL Server thông qua User Defined Function. Mẹo nhỏ là chuyển đổi các IF-THEN ELSEquy tắc mà bạn nhận được từ mỗi cây thành một CASE-WHEN ENDhoặc bất kỳ Conditional Processingcấu trúc nào khác (phải thừa nhận rằng tôi đã sử dụng triển khai Bootstrap Forest của JMP Pro - 500k dòng mã SQL).

Hoàn toàn không có lý do tại sao điều này không thể đạt được bằng cách sử dụng rattle Rgói. Hãy xem randomForest2Rules& các printRandomForestschức năng trong gói đó. Cả hai đều lấy random forestđối tượng làm đầu vào và truy cập từng cây trong rừng và đưa ra một bộ IF-THEN ELSEquy tắc. Lấy điều này làm điểm khởi đầu, không khó để chuyển đổi logic này sang ngôn ngữ mong muốn của bạn theo cách tự động, vì đầu ra từ chức năng được đề cập ở trên là văn bản có cấu trúc.

Ở trên, cũng làm cho nó quan trọng để quyết định không nhỏ nhất. về những cây bạn cần trong rừng để đưa ra dự đoán ở mức độ chính xác mong muốn (gợi ý: cốt truyện (rf.object) cho bạn thấy tại thời điểm nào các dự đoán rừng không cải thiện mặc dù đã thêm nhiều cây.) để giữ cho không. của dòng để đại diện cho rừng xuống.

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.