Làm thế nào để (tốt hơn) phân biệt dữ liệu liên tục trong cây quyết định?


8

Các thuật toán cây quyết định tiêu chuẩn, chẳng hạn như ID3 và C4.5, có cách tiếp cận mạnh mẽ để chọn điểm cắt trong một tính năng liên tục. Mỗi giá trị được kiểm tra như một điểm cắt có thể. (Bằng cách kiểm tra tôi có nghĩa là, ví dụ như mức tăng Thông tin được tính ở mọi giá trị có thể.)

Với nhiều tính năng liên tục và nhiều dữ liệu (do đó có nhiều giá trị cho mỗi tính năng), apporach này có vẻ rất không hiệu quả!

Tôi cho rằng việc tìm ra một cách tốt hơn để làm điều này là một chủ đề nóng trong Machine Learning. Trong thực tế, tìm kiếm Google Scholar của tôi đã tiết lộ một số cách tiếp cận khác. Chẳng hạn như rời rạc với phương tiện k. Sau đó, dường như có rất nhiều bài báo giải quyết các vấn đề cụ thể trong các lĩnh vực cụ thể.

Nhưng có một bài đánh giá gần đây, bài đăng trên blog hoặc cuốn sách cung cấp một cái nhìn tổng quan về các apporaches phổ biến cho sự rời rạc? Tôi không thể tìm thấy một ...

Hoặc nếu không, có thể một trong các bạn là một chuyên gia về chủ đề này và sẵn sàng viết lên một cái nhìn tổng quan nhỏ. Điều đó sẽ rất hữu ích!

Câu trả lời:


8

Không, có lẽ bạn không muốn thử tất cả các điểm cắt có thể trong một triển khai nghiêm túc. Đó là cách chúng tôi mô tả nó trong phần giới thiệu đơn giản về ID3, bởi vì nó dễ hiểu hơn, nhưng nó thường không phải là cách nó được thực hiện, bởi vì nó chậm. Đặc biệt, nếu cón điểm dữ liệu, sau đó bạn sẽ cần phải kiểm tra n1ngưỡng ứng cử viên; sử dụng thuật toán ngây thơ để tính toán mức tăng thông tin của từng ngưỡng ứng cử viên đóO(n) thời gian cho mỗi ứng cử viên, với tổng số O(n2) thời gian.

Trong thực tế, có những tối ưu hóa giúp tăng tốc đáng kể:

  1. Đừng thử tất cả các ngưỡng có thể. Thay vào đó, chọn một mẫu ngẫu nhiên gồm 1000 ngưỡng ứng cử viên (được chọn thống nhất ngẫu nhiên trong số các tập hợpn1 ngưỡng ứng cử viên), tính toán mức tăng thông tin cho từng loại và chọn cái tốt nhất.

  2. Sử dụng lập trình động để tính toán hiệu quả mức tăng thông tin của tất cả n1 chia tách, trong tổng số O(n)thời gian, bằng cách sử dụng lại tính toán. Thuật toán là khá đơn giản để rút ra.


Cảm ơn bạn! Thật xấu hổ cho tôi, tôi chỉ tập trung vào những lời giới thiệu đơn giản và không bao giờ nhìn vào việc thực hiện thực tế ... Số 1 thực sự đơn giản và tôi chắc chắn sẽ nhìn vào số 2! Ngoài ra, tôi đang tìm kiếm cách tiếp cận "sáng tạo hơn". Chẳng hạn như sự phân biệt k-nghĩa là tôi đã đề cập. Hoặc tìm ra sự phân phối của tính năng liên tục cho mỗi lớp và xác định điểm cắt dựa trên các phân phối đó - vì vậy một cách tiếp cận phân tích hơn. Bạn có biết một cái gì đó như thế?
AutoMiner
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.