Lựa chọn tính năng bằng cách sử dụng tính năng quan trọng trong các khu rừng ngẫu nhiên với scikit-learn


12

Tôi đã vẽ các tính năng quan trọng trong các khu rừng ngẫu nhiên với scikit-learn . Để cải thiện dự đoán bằng cách sử dụng các khu rừng ngẫu nhiên, làm cách nào tôi có thể sử dụng thông tin cốt truyện để loại bỏ các tính năng? Tức là làm thế nào để phát hiện xem một tính năng là vô dụng hay thậm chí là giảm hiệu suất rừng ngẫu nhiên, dựa trên thông tin cốt truyện? Cốt truyện dựa trên thuộc tính feature_importances_và tôi sử dụng trình phân loại sklearn.ensemble.RandomForestClassifier.

Tôi biết rằng có tồn tại các kỹ thuật khác để lựa chọn tính năng , nhưng trong câu hỏi này tôi muốn tập trung vào cách sử dụng tính năng feature_importances_.


Ví dụ về các lô quan trọng như vậy:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Câu trả lời:


14

Bạn chỉ có thể sử dụng feature_importances_thuộc tính để chọn các tính năng có điểm quan trọng cao nhất. Vì vậy, ví dụ bạn có thể sử dụng chức năng sau để chọn K tính năng tốt nhất theo mức độ quan trọng.

def selectKImportance(model, X, k=5):
     return X[:,model.feature_importances_.argsort()[::-1][:k]]

Hoặc nếu bạn đang sử dụng một đường ống thì lớp sau

class ImportanceSelect(BaseEstimator, TransformerMixin):
    def __init__(self, model, n=1):
         self.model = model
         self.n = n
    def fit(self, *args, **kwargs):
         self.model.fit(*args, **kwargs)
         return self
    def transform(self, X):
         return X[:,self.model.feature_importances_.argsort()[::-1][:self.n]]

Ví dụ:

>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> iris = load_iris()
>>> X = iris.data
>>> y = iris.target
>>> 
>>> model = RandomForestClassifier()
>>> model.fit(X,y)
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)
>>> 
>>> newX = selectKImportance(model,X,2)
>>> newX.shape
(150, 2)
>>> X.shape
(150, 4)

Và rõ ràng nếu bạn muốn chọn dựa trên một số tiêu chí khác ngoài "tính năng k hàng đầu" thì bạn chỉ có thể điều chỉnh các chức năng cho phù hợp.


Cảm ơn David. Bất kỳ cái nhìn sâu sắc về cách chọn ngưỡng trên các tính năng hữu ích? (bỏ qua việc loại bỏ tính năng ít hữu ích nhất, chạy lại RF và xem nó ảnh hưởng đến hiệu suất dự đoán như thế nào)
Franck Dernoncourt

1
Như với hầu hết các lựa chọn tính năng tự động, tôi muốn nói rằng hầu hết mọi người sử dụng lưới điều chỉnh. Nhưng sử dụng chuyên môn về miền khi chọn các tính năng (và kỹ thuật) có lẽ là giá trị nhất - nhưng không thực sự tự động.
David
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.