Làm thế nào để so sánh hiệu suất của các phương pháp lựa chọn tính năng?


10

Có một số cách tiếp cận lựa chọn tính năng / lựa chọn biến (xem ví dụ Guyon & Elisseeff, 2003 ; Liu và cộng sự, 2010 ):

  • phương pháp lọc (ví dụ: dựa trên tương quan, dựa trên entropy, dựa trên tầm quan trọng của rừng ngẫu nhiên),
  • phương pháp bao bọc (ví dụ: tìm kiếm chuyển tiếp, tìm kiếm leo đồi) và
  • phương pháp nhúng trong đó lựa chọn tính năng là một phần của mô hình học tập.

Nhiều thuật toán được xuất bản cũng được triển khai trong các công cụ học máy như R, Python, v.v.

Điều gì sẽ là một phương pháp thích hợp để so sánh các thuật toán lựa chọn tính năng khác nhau và để chọn phương pháp tốt nhất cho một vấn đề / tập dữ liệu nhất định? Một câu hỏi nữa sẽ là, liệu có bất kỳ số liệu nào được biết để đo lường hiệu suất của các thuật toán lựa chọn tính năng không?

Câu trả lời:


4

Đây là một vấn đề khó khăn và các nhà nghiên cứu đang có nhiều tiến bộ.

Nếu bạn đang tìm kiếm lựa chọn tính năng được giám sát , tôi khuyên dùng LASSO và các biến thể của nó. Đánh giá thuật toán rất đơn giản với việc học có giám sát: hiệu suất của bất kỳ số liệu nào bạn chọn trên dữ liệu kiểm tra.

Hai điểm chính của LASSO là (1) các tính năng được chọn sẽ không tự động phát hiện sự tương tác, do đó bạn phải tạo ra tất cả các tính năng của mình một ưu tiên (nghĩa là trước khi chạy chúng qua mô hình) và (2) LASSO sẽ không xác định được mối quan hệ tuyến tính (ví dụ: mối quan hệ bậc hai ).

Một cách để thử và vượt qua hai sự cẩn thận này là sử dụng Gradient Boosted Machines , tính năng tự động lựa chọn. Đáng chú ý là các thuộc tính thống kê của GBM mơ hồ hơn một chút so với LASSO.

Nếu bạn đang tìm kiếm lựa chọn tính năng không giám sát, có vẻ như có một cách tiếp cận chính quy hóa tương tự được sử dụng bởi các nhà nghiên cứu này , nhưng đánh giá trong trường hợp cụ thể này trở nên ít rõ ràng hơn. Mọi người thử rất nhiều thứ khác nhau như PCA / SVD hoặc K-Means mà cuối cùng sẽ cố gắng tìm một xấp xỉ tuyến tính cho dữ liệu.

Trong trường hợp đó, các biện pháp hiệu suất điển hình là lỗi tái cấu trúc hoặc RMSE của các cụm.

Về phần mềm, R và Python đều có GBM, LASSO, K-Means, SVD và PCA. GLMNET và XGBoost trong R và Sklearn cho Python là các thư viện có liên quan.


1

Tôi luôn coi lựa chọn tính năng là một bước dẫn đến kết quả cuối cùng.

Dưới đây, bằng cách nào đó, tôi kết hợp các tính năng lựa chọn và giảm kích thước, có thể có một số mục tiêu và có thể bị nhầm lẫn.

Một số cách sử dụng điển hình:

  • giảm các tính toán trong học máy: chất lượng của lựa chọn là một yếu tố của kết quả học tập cuối cùng và rõ ràng là tốc độ để hoàn thành việc học đó

  • trực quan hóa / hiểu biết về dữ liệu, nơi bạn kết hợp cuối cùng nhiều chiều. Thật tốt khi nó không che giấu những thứ thú vị và khi đó là điều dễ hiểu

  • đơn giản hóa các kết quả học tập, vẫn để làm cho chúng dễ hiểu (ví dụ phân tích nguyên nhân gốc rễ). Tốt nếu đơn giản nhưng vẫn đủ về chất lượng

  • kiểm soát sự phù hợp, như trả lời trước cho thấy

  • ...

Vì vậy, tôi không nghĩ có quy tắc chung (như mọi khi trong ML), nhưng đây là một vấn đề theo từng trường hợp.

Chỉ là một niềm tin cá nhân ...


0

Nó phụ thuộc rất nhiều vào tình huống cụ thể và vấn đề bạn muốn giải quyết. Có tồn tại một số quy tắc chung, ví dụ các phương thức trình bao bọc linh hoạt hơn và cũng dễ bị quá mức.

Hiệu suất lựa chọn tính năng có thể được đánh giá bằng hiệu suất tổng thể của nhiệm vụ học tập, ví dụ người ta có thể chọn các tính năng với các phương pháp khác nhau và sau đó sử dụng các bộ tính năng khác nhau này để phân loại và so sánh độ chính xác của các phân loại thu được.

Một yếu tố quan trọng khác trong một số tình huống như một số ứng dụng sinh học là tính dễ hiểu của các tính năng được chọn và kết quả, ví dụ như trong một vấn đề phân cụm, ý nghĩa của các tính năng được chọn và cụm kết quả là thước đo hiệu suất rất quan trọng.


0

Bạn sẽ phải chạy một tập các thử nghiệm nhân tạo, cố gắng phát hiện các tính năng có liên quan bằng các phương pháp khác nhau trong khi biết trước tập hợp các biến đầu vào nào ảnh hưởng đến biến đầu ra.

Bí quyết tốt là giữ một tập hợp các biến đầu vào ngẫu nhiên với các bản phân phối khác nhau và đảm bảo các thuật toán lựa chọn tính năng của bạn thực sự gắn thẻ chúng là không liên quan.

Một mẹo khác là đảm bảo rằng sau khi hoán vị các hàng, các biến được gắn thẻ là có liên quan sẽ được phân loại là có liên quan.

Trên đây áp dụng cho cả hai cách tiếp cận bộ lọc và trình bao bọc.

Ngoài ra, hãy chắc chắn xử lý các trường hợp khi các biến được thực hiện riêng rẽ (từng cái một) không cho thấy bất kỳ ảnh hưởng nào đến mục tiêu, nhưng khi được thực hiện cùng nhau cho thấy sự phụ thuộc mạnh mẽ. Ví dụ sẽ là một vấn đề XOR nổi tiếng (kiểm tra mã Python):

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_selection import f_regression, mutual_info_regression,mutual_info_classif

x=np.random.randn(5000,3)
y=np.where(np.logical_xor(x[:,0]>0,x[:,1]>0),1,0)

plt.scatter(x[y==1,0],x[y==1,1],c='r',marker='x')
plt.scatter(x[y==0,0],x[y==0,1],c='b',marker='o')
plt.show()
print(mutual_info_classif(x, y)) 

Đầu ra:

Minh họa Python 3 XOR

[0. 0. 0,00429746]

Vì vậy, phương pháp lọc có lẽ mạnh mẽ (nhưng không biến đổi) (tính toán thông tin lẫn nhau giữa các biến đầu vào và đầu vào) không thể phát hiện bất kỳ mối quan hệ nào trong tập dữ liệu. Trong khi đó, chúng tôi biết chắc chắn đó là sự phụ thuộc 100% và chúng tôi có thể dự đoán Y với độ chính xác 100% khi biết X.

Ý tưởng tốt sẽ là tạo ra một loại điểm chuẩn cho các phương pháp lựa chọn tính năng, có ai muốn tham gia khô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.