2013-03-18 35 views
7

Tôi đang cố gắng áp dụng phương pháp chọn tính năng đơn biến bằng cách sử dụng mô-đun Python để tìm hiểu về tập dữ liệu hồi quy (tức là giá trị đáp ứng có giá trị liên tục) ở định dạng svmlight.Lựa chọn tính năng tìm hiểu Scikit cho dữ liệu hồi quy

Tôi đang làm việc với phiên bản scikit-learn 0.11.

Tôi đã thử hai cách tiếp cận - lần đầu tiên không thành công và thứ hai làm việc cho tập dữ liệu đồ chơi của tôi nhưng tôi tin rằng sẽ mang lại kết quả vô nghĩa cho tập dữ liệu thực.

Tôi muốn được tư vấn về phương pháp lựa chọn tính năng đơn biến thích hợp mà tôi có thể áp dụng để chọn N tính năng hàng đầu cho tập dữ liệu hồi quy. Tôi sẽ thích (a) để tìm ra cách làm cho hàm f_regression hoạt động hoặc (b) để nghe các gợi ý thay thế.

Hai cách tiếp cận nêu trên:

  1. tôi đã cố gắng sử dụng sklearn.feature_selection.f_regression (X, Y).

này thất bại với các thông báo lỗi sau: "Lỗi Loại: bản sao() có chính xác 1 lập luận (2 nhất định)"

  1. tôi đã cố gắng sử dụng chi2 (X, Y). Điều này "làm việc" nhưng tôi nghi ngờ điều này là bởi vì hai giá trị phản ứng 0,1 và 1,8 trong bộ dữ liệu đồ chơi của tôi đã được coi là nhãn lớp? Có lẽ, điều này sẽ không mang lại thống kê chi bình phương cho một tập dữ liệu thực mà sẽ có một số lượng lớn các giá trị đáp ứng có thể và số trong mỗi ô [có giá trị phản hồi và giá trị cụ thể cho thuộc tính đang được kiểm tra] sẽ là thấp?

Vui lòng tìm tập dữ liệu đồ chơi của tôi được dán vào cuối thư này.

Đoạn mã sau sẽ cho kết quả tôi mô tả ở trên.

from sklearn.datasets import load_svmlight_file 

X_train_data, Y_train_data = load_svmlight_file(svmlight_format_train_file) #i.e. change this to the name of my toy dataset file 

from sklearn.feature_selection import SelectKBest 
featureSelector = SelectKBest(score_func="one of the two functions I refer to above",k=2) #sorry, I hope this message is clear 
featureSelector.fit(X_train_data,Y_train_data) 
print [1+zero_based_index for zero_based_index in list(featureSelector.get_support(indices=True))] #This should print the indices of the top 2 features 

Xin cảm ơn trước.

Richard

Nội dung của tập tin svmlight giả tạo của tôi - với dòng trống bổ sung được chèn cho rõ ràng:

1,8 1: 1,000000 2: 1,000000 4: 1,000000 6: 1,000000 # mA

1,8 1: 1.000000 2: 1.000000 # MB

0,1 5: 1.000000 # mC

1,8 1: 1.000000 2: 1.000000 # mD

0,1 3: 1,000000 4: 1,000000 # tôi

0,1 3: 1,000000 # MF

1,8 2: 1,000000 4: 1,000000 5: 1,000000 6: 1,000000 # mG

1,8 2: 1,000000 # mH

+1

'chi2' chỉ dành cho phân loại. Để làm cho nó hoạt động trong một thiết lập hồi quy, bạn sẽ phải bin giá trị Y của bạn. –

+0

Cảm ơn bạn larsmans. Tôi nghĩ đó là trường hợp nhưng đã suy đoán rằng chi2 có thể nội bộ bin hồi quy y-giá trị "đằng sau hậu trường". Tôi nhận ra rằng cài đặt scikit-learning hiện tại của tôi là cũ, vì vậy tôi sẽ thử f_regression với phiên bản mới nhất trước khi nâng cấp lại vấn đề. – user1735732

Trả lời

5

Như larsmans lưu ý, chi2 không thể được sử dụng để lựa chọn tính năng với dữ liệu hồi quy.

Khi cập nhật lên phiên bản scikit-learn 0.13, mã sau đã chọn hai tính năng hàng đầu (theo thử nghiệm f_regression) cho tập dữ liệu đồ chơi được mô tả ở trên.

def f_regression(X,Y): 
    import sklearn 
    return sklearn.feature_selection.f_regression(X,Y,center=False) #center=True (the default) would not work ("ValueError: center=True only allowed for dense data") but should presumably work in general 

from sklearn.datasets import load_svmlight_file 

X_train_data, Y_train_data = load_svmlight_file(svmlight_format_train_file) #i.e. change this to the name of my toy dataset file 

from sklearn.feature_selection import SelectKBest 
featureSelector = SelectKBest(score_func=f_regression,k=2) 
featureSelector.fit(X_train_data,Y_train_data) 
print [1+zero_based_index for zero_based_index in list(featureSelector.get_support(indices=True))] 
1

Bạn cũng có thể thử thực hiện lựa chọn tính năng bằng cách chuẩn hóa L1/Lasso. Lớp học được thiết kế đặc biệt cho điều này là RandomizedLasso sẽ đào tạo LassoRegression trên nhiều mẫu dữ liệu của bạn và chọn các tính năng được chọn thường xuyên nhất bởi các mô hình này. Bạn cũng có thể chỉ sử dụng Lasso, LassoLars hoặc SGDClassifier để làm điều tương tự mà không có lợi ích của việc lấy mẫu lại nhưng nhanh hơn.

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