2013-04-04 16 views
57

Tôi có nhiệm vụ phân loại với chuỗi thời gian làm đầu vào dữ liệu, trong đó mỗi thuộc tính (n = 23) đại diện cho một thời điểm cụ thể. Bên cạnh kết quả phân loại tuyệt đối tôi muốn tìm hiểu, các thuộc tính/ngày nào đóng góp vào kết quả ở mức độ nào. Do đó tôi chỉ sử dụng feature_importances_, hoạt động tốt cho tôi.Tính năng feature_importances trong RandomForestClassifier được xác định như thế nào?

Tuy nhiên, tôi muốn biết cách tính toán và đo lường/sử dụng thuật toán nào. Rất tiếc, tôi không thể tìm thấy bất kỳ tài liệu nào về chủ đề này.

+5

Woah ba lõi devs trong một chuỗi SO. Đó là một số loại hồ sơ ^^ –

Trả lời

8

Đó là tỷ số giữa số lượng mẫu được chuyển đến nút quyết định liên quan đến đối tượng địa lý đó trong bất kỳ cây nào của quần thể trên tổng số mẫu trong tập huấn luyện.

Các tính năng liên quan đến các nút cấp cao nhất của cây quyết định có xu hướng thấy nhiều mẫu hơn do đó có khả năng quan trọng hơn.

Chỉnh sửa: mô tả này chỉ đúng một phần: Câu trả lời của Gilles và Peter là câu trả lời đúng.

+1

Bạn có biết nếu có một số giấy/tài liệu về phương pháp chính xác không? ví dụ. Breiman, 2001. Sẽ tuyệt vời nếu tôi có một số tài liệu thích hợp, mà tôi có thể trích dẫn cho phương pháp luận. – user2244670

+0

@ogrisel nó sẽ là tuyệt vời nếu bạn có thể đánh dấu rõ ràng phản ứng của bạn như là lời giải thích cho "trọng số". Chỉ tính trọng số không xác định tầm quan trọng của đối tượng địa lý. "Số liệu tạp chất" ("quan trọng gini" hoặc RSS) kết hợp với trọng số, tính trung bình trên cây xác định tầm quan trọng của tính năng tổng thể. Rất tiếc, tài liệu hướng dẫn về scikit-learning tại đây: http://scikit-learn.org/stable/modules/ensemble.html#feature-importance-evaluation không chính xác và không chính xác đề cập đến "độ sâu" làm chỉ số tạp chất. – Ariel

34

Cách thông thường để tính toán các giá trị đặc trưng quan trọng của một cây duy nhất là như sau:

  1. bạn khởi tạo một mảng feature_importances của tất cả các số không với kích thước n_features.

  2. bạn đi ngang qua cây: cho mỗi nút bên trong chia tách đối tượng địa lý i bạn tính toán giảm lỗi của nút đó nhân với số mẫu được định tuyến đến nút và thêm số này vào feature_importances[i].

Giảm lỗi phụ thuộc vào tiêu chí tạp chất mà bạn sử dụng (ví dụ: Gini, Entropy, MSE, ...). Nó là tạp chất của tập hợp các ví dụ được định tuyến đến nút bên trong trừ đi tổng của các tạp chất của hai phân vùng được tạo ra bởi sự phân chia.

Điều quan trọng là các giá trị này liên quan đến tập dữ liệu cụ thể (cả giảm lỗi và số lượng mẫu là số liệu cụ thể), do đó không thể so sánh các giá trị này giữa các tập dữ liệu khác nhau.

Theo như tôi biết, có nhiều cách khác nhau để tính giá trị tầm quan trọng của đối tượng địa lý trong cây quyết định. Một mô tả ngắn gọn về phương pháp trên có thể được tìm thấy trong "Yếu tố học thống kê" của Trevor Hastie, Robert Tibshirani và Jerome Friedman.

+0

Các tạp chất chính xác khi đi về cây quyết định là gì? –

93

Thực sự có một số cách để có được tính năng "nhập khẩu". Như thường lệ, không có sự nhất trí chặt chẽ về ý nghĩa của từ này.

Trong tìm hiểu, chúng tôi thực hiện tầm quan trọng như được mô tả trong [1] (thường được trích dẫn, nhưng rất tiếc hiếm khi đọc ...). Nó đôi khi được gọi là "tầm quan trọng gini" hoặc "tạp chất giảm trung bình" và được xác định là tổng số giảm tạp chất nút (được xác định bởi xác suất đạt đến nút đó (được ước tính bằng tỷ lệ mẫu đạt đến nút đó)) trung bình trên tất cả cây của bộ quần áo.

Trong tài liệu hoặc trong một số gói khác, bạn cũng có thể tìm thấy các tính năng nhập được thực hiện dưới dạng "độ chính xác giảm trung bình". Về cơ bản, ý tưởng là để đo độ chính xác giảm trên dữ liệu OOB khi bạn hoán đổi ngẫu nhiên các giá trị cho đối tượng địa lý đó. Nếu mức giảm thấp thì tính năng này không quan trọng và ngược lại.

(Lưu ý rằng cả hai thuật toán có sẵn trong gói randomForest R).

[1]: Breiman, Friedman, "Phân loại và cây hồi quy", năm 1984.

+30

Nó có thể là tuyệt vời nếu câu trả lời này đã được đề cập trong tài liệu của các thuộc tính quan trọng/ví dụ. Đã tìm kiếm nó một thời gian quá :) – d1337

+2

Dường như điểm quan trọng là giá trị tương đối? Ví dụ: tổng số điểm quan trọng của tất cả các tính năng luôn là 1 (xem ví dụ tại đây http://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_importances.html#example-ensemble-plot-forest-importances- py) – RNA

+5

@RNA: Có, bằng cách nhập biến mặc định được chuẩn hóa trong scikit-learn, sao cho chúng tổng hợp thành một. Bạn có thể phá vỡ điều này bằng cách lặp qua các bộ ước lượng cơ sở riêng lẻ và gọi 'tree_.compute_feature_importances (normalize = False)'. –

4

Như @GillesLouppe chỉ ra ở trên, scikit-learning hiện thực hiện chỉ số "tạp chất giảm trung bình" cho các tính năng nhập. Cá nhân tôi tìm thấy số liệu thứ hai thú vị hơn một chút, nơi bạn ngẫu nhiên tính toán giá trị cho từng tính năng của mình từng lần một và xem hiệu suất bỏ túi của bạn tệ hơn bao nhiêu.

Vì những gì bạn quan tâm với tính năng quan trọng là mỗi tính năng đóng góp vào hiệu suất dự đoán của toàn bộ mô hình của bạn như thế nào, chỉ số thứ hai thực sự mang lại cho bạn thước đo trực tiếp về điều này, trong khi "tạp chất giảm trung bình" chỉ là một proxy tốt .

Nếu bạn quan tâm, tôi đã viết một gói nhỏ mà thực hiện tầm quan trọng hoán vị hệ mét và có thể được sử dụng để tính toán các giá trị từ một thể hiện của một lớp rừng ngẫu nhiên scikit-học:

https://github.com/pjh2011/rf_perm_feat_import

Chỉnh sửa: Tính năng này hoạt động với Python 2.7, không phải 3

+0

Hi @Peter khi tôi sử dụng mã của bạn Tôi nhận được lỗi này: NameError: tên 'xrange' không được xác định. – Aizzaac

+0

Xin chào @Aizzaac. Xin lỗi tôi mới viết các gói, vì vậy tôi nên lưu ý tôi đã viết nó cho Python 2.7. Hãy thử def xrange (x): return iter (range (x)) trước khi chạy nó – Peter

Các vấn đề liên quan