Cách chính xác để xác định các tính năng đóng góp nhiều nhất vào dự đoán của một vectơ đầu vào đã cho là gì?


9

Tôi đang sử dụng hồi quy logistic để phân loại nhị phân. Tôi có một bộ dữ liệu lớn (xảy ra rất mất cân bằng: 19: 1). Vì vậy, tôi sử dụng scikit-learn LogisticRegression()để đào tạo 80% dữ liệu được dán nhãn của mình và sau đó tôi xác nhận với 20% khác (Tôi đã xem xét khu vực theo ROC cũng như thu hồi chính xác vì dữ liệu rất mất cân bằng; Tôi cũng đã sử dụng mô hình với class_weight='auto').

Câu hỏi chính của tôi là như sau: một khi tôi bắt đầu tạo dự đoán về các vectơ đầu vào không ghi nhãn (sử dụng predict_proba()), làm thế nào tôi có thể biết tính năng nào đóng góp nhiều nhất vào dự đoán của đầu vào cụ thể đó ? Tôi tưởng tượng rằng điều này có thể khác với "các tính năng quan trọng nhất" như được xác định chung cho mô hình dựa trên dữ liệu đào tạo được dán nhãn (ví dụ: cường độ hệ số).

Tôi đã có một ý tưởng rất cơ bản:

  1. Lấy sản phẩm thành phần của các giá trị tính năng đầu vào của tôi với giá trị tuyệt đối của các hệ số tính năng của tôi. Tính năng đóng góp nhiều nhất sau đó là tính năng tương ứng với mục có giá trị lớn nhất.

  2. Làm (1) nhưng sử dụng điểm z cho mọi thứ (tính năng đào tạo và nhập liệu). Tôi nghĩ rằng điều này sẽ rất quan trọng vì tôi lo lắng rằng một số phạm vi tính năng có thể rất khác so với các phạm vi khác và chỉ lấy sản phẩm có thể không nắm bắt được điều này; nhưng tôi đoán các hệ số sẽ phản ánh phạm vi nên có thể điều này không thành vấn đề.

Mọi suy nghĩ sẽ được đánh giá rất cao vì tôi mới biết điều này. Những điều cụ thể đối với hồi quy logistic (nghĩa là sigmoid thay vì chỉ là hàm tuyến tính) và bất kỳ tham chiếu nào về cách thực hiện các hành động cụ thể (ví dụ: biến đổi) trong scikit-learn sẽ được đánh giá rất cao khi tôi thực sự đang thực hiện một dự án với dữ liệu thực.


Không phải là hồi quy logistic nhiều của một mô hình dự đoán chứ không phải là một kiểu giải thích?
tagoma

@tagoma là cả hai, phải không?
Firebug

Câu trả lời:


2

Có một cách chỉ sử dụng các hệ số hồi quy, bạn có thể hiểu tính năng nào đóng góp nhiều nhất vào dự đoán của một vectơ đầu vào đã cho.

Tuy nhiên, bạn sẽ phải chuẩn hóa và chia tỷ lệ cho từng biến trước (nghĩa là trừ giá trị trung bình và chia cho độ lệch chuẩn). Sau đó, tinh chỉnh mô hình của bạn với dữ liệu được chuẩn hóa & thu nhỏ, tính năng có hệ số hồi quy lớn nhất sẽ là tính năng đóng góp nhiều nhất cho các dự đoán trong tương lai.

Các hệ số hồi quy có thể so sánh được sau khi chia tỷ lệ vì chúng tôi đã làm cho các đơn vị của các tính năng không liên quan, do đó, tăng một đơn vị tính năng tương ứng với việc nhảy 1 độ lệch chuẩn của tính năng không được tính toán.X1


Alejandro, cảm ơn câu trả lời của bạn. Có một vấn đề với đào tạo về dữ liệu chuẩn hóa. Tôi có được hiệu suất mô hình tồi tệ hơn nhiều. Khu vực của tôi dưới đường cong ROC ít hơn khoảng 10% và khu vực của tôi dưới đường cong thu hồi chính xác cũng tồi tệ hơn. Vì vậy, tôi ngần ngại chuyển đổi mô hình phù hợp với dữ liệu chuẩn hóa. Đây có phải là chi phí để có được tầm quan trọng cá nhân tôi đang tìm kiếm? Có cách nào khác không? Không phải độ lớn của các hệ số phản ánh tầm quan trọng của chúng?
kilgoretrout

Hmm đó là rất lạ. Tôi không mong đợi việc bình thường hóa dữ liệu sẽ ảnh hưởng đến ước tính của bạn vì việc chuẩn hóa không ảnh hưởng đến mối quan hệ cơ bản giữa các biến. Tôi không chắc chắn về bất kỳ cách nào khác để so sánh giá trị dự đoán của các tính năng riêng lẻ
Alejandro Ochoa

2
Nếu bạn thấy hiệu suất kém hơn trong hồi quy tuyến tính sau khi bình thường hóa các tính năng, thì bạn có một lỗi. Các mô hình trên các dự đoán chuẩn hóa và chuẩn hóa sẽ đưa ra chính xác các dự đoán tương tự. Một thuật ngữ chính quy có thể ảnh hưởng đến điều này, nhưng các mô hình chính quy phải luôn luôn sử dụng các yếu tố dự đoán chuẩn hóa.
Matthew Drury

2

Một phương pháp mà tôi muốn sử dụng để xem tính năng nào đóng góp cho dự đoán cụ thể là đặt lại tất cả các tính năng theo từng ý nghĩa của chúng và sau đó xem dự đoán thay đổi như thế nào. Tôi chọn phương pháp này từ trang này . Nhưng tôi cũng sẽ giải thích với một ví dụ của riêng tôi.

Ví dụ, chúng ta có một mô hình dự đoán nếu một ngày là một ngày tốt để mặc quần short dựa trên một số thông tin thời tiết, giả sử nhiệt độ, gió và mưa. và giả sử chúng ta đang sử dụng một phương thức mang lại cho chúng ta xác suất của lớp.

Bây giờ chúng ta có một ngày mà mô hình dự đoán 50/50 cho một ngày nhất định, nhưng chúng ta sẽ không biết điều gì gây ra điều này. Vì vậy, chúng tôi sẽ đi qua từng tính năng, đặt lại chúng về giá trị trung bình (hoặc 0) của chúng và xem mô hình dự đoán ngay bây giờ.

  • Nói về nhiệt độ chúng ta có 20 ° C, nhưng nhiệt độ trung bình là 10 ° C. Nếu chúng ta dự đoán lại mô hình với nhiệt độ trong ngày hôm nay được đặt thành trung bình 10 ° C, nhưng giữ mưa và gió ở cùng một giá trị, dự đoán kết thúc là 80% cho không có quần short. Rõ ràng nhiệt độ có ảnh hưởng lớn! Bây giờ chúng ta có thể làm tương tự cho các biến khác.

  • Tốc độ gió cao hơn một chút so với trung bình và bằng cách đặt lại gió về giá trị trung bình và giữ cho các mức khác bằng nhau, dự đoán chỉ thay đổi một chút đến 55% cho quần short. Có vẻ nhiệt độ là một thỏa thuận lớn hơn.

  • Bây giờ mưa là một chút kỳ lạ, vì mưa đã có ý nghĩa. Vì vậy, đặt lại với trung bình rõ ràng sẽ không có hiệu lực. Nhưng chúng ta vẫn muốn biết liệu mưa có ảnh hưởng đến dự đoán hay không, vì vậy những gì chúng ta có thể làm thay vào đó là đặt mưa thành 0. Và lo và kìa, một khi chúng ta đặt mưa thành 0, mô hình dự đoán 75% cho quần short. Lại một hiệu ứng khá lớn.

Bằng cách đi qua từng tính năng và đặt chúng thành giá trị trung bình hoặc 0, chúng tôi có thể xác định ở mức dự đoán tính năng nào là quan trọng. Gió và nhiệt độ đều có ảnh hưởng lớn theo cả hai hướng, trong khi gió có hiệu ứng nhỏ hơn nhiều.

Bây giờ tại sao chúng ta lại thiết lập mưa về 0? Làm điều này cho nhiệt độ hoặc gió sẽ rất kỳ lạ, vì với 0 này là một giá trị hầu như không bao giờ xảy ra và ít có ý nghĩa, nhưng đối với mưa 0 là tương đối thường xuyên và nó có nghĩa là một ngày cụ thể, một ngày khô ráo. Có nghĩa là nó hợp lý để đặt lại về 0. Vì vậy, bạn thực sự phải xem xét một tính năng theo tính năng cơ bản có ý nghĩa gì.

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.