scikit-learn을 사용하여 임의 포리스트에서 기능 중요도를 사용하여 기능 선택


12

나는 한 scikit 배우기와 임의 숲의 기능 importances를 꾸몄다 . 랜덤 포레스트를 사용한 예측을 향상시키기 위해 플롯 정보를 사용하여 피처를 제거하려면 어떻게해야합니까? 즉, 플롯 정보를 기반으로 기능이 쓸모 없는지 또는 임의의 포리스트 성능이 더 나빠지는지 확인하는 방법은 무엇입니까? 줄거리는 속성을 기반으로 feature_importances_하며 분류자를 사용합니다 sklearn.ensemble.RandomForestClassifier.

기능 선택을위한 다른 기술 이 있다는 것을 알고 있지만이 질문에서는 기능을 사용하는 방법에 중점을두고 싶습니다 feature_importances_.


이러한 기능 중요도의 예 :

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

답변:


14

feature_importances_속성을 사용하여 중요도가 가장 높은 기능을 선택할 수 있습니다 . 예를 들어 다음 기능을 사용하여 중요도에 따라 K 최고의 기능을 선택할 수 있습니다.

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

또는 파이프 라인을 사용하는 경우 다음 클래스

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]]

예를 들어 :

>>> 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)

그리고 "최상의 k 기능"이외의 다른 기준에 따라 선택하려면 그에 따라 기능을 조정하면됩니다.


고마워 데이빗. 유용한 기능보다 임계 값을 선택하는 방법에 대한 통찰력이 있습니까? (가장 유용한 기능을 제거하고 RF를 다시 실행하여 예측 성능에 어떤 영향을 미치는지 확인하십시오)
Franck Dernoncourt

1
대부분의 자동화 된 기능 선택과 마찬가지로 대부분의 사람들이 튜닝 그리드를 사용한다고 말합니다. 그러나 기능을 선택 (및 엔지니어링) 할 때 도메인 전문 지식을 사용하는 것이 아마도 가장 귀중하지만 실제로 자동화 할 수는 없습니다.
David
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.