[ Python ] scikit-learn feature selection Tool

2019. 12. 21. 21:51분석 Python/Scikit Learn (싸이킷런)

728x90

 도움이 되셨다면, 광고 한번만 눌러주세요.  블로그 관리에 큰 힘이 됩니다.

 

https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html

 

sklearn.feature_selection.SelectFromModel — scikit-learn 0.22 documentation

 

scikit-learn.org

우연히 다른 걸 찾아보다가 알게 되었다. 
원래는 threshold를 자동으로 찾아주는 것이 있나 싶어서 찾다가 더 오히려 알고 싶었던 것이 나왔다.

보통 만약에 scikit-learn 패키지 자체를 이용해서 하려면 transform을 사용해서 축약된 feature를 가져오면 되고, 
만약 다른 것에 활용하고 싶어서 하는 것이라면 get_support로 index 값을 가져오면 된다! 

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier , GradientBoostingClassifier
from sklearn.ensemble import RandomTreesEmbedding
from sklearn.linear_model  import LogisticRegression
import pandas as pd

############################################################

data = pd.read_csv("./../Data/DontOverfit/train.csv")
test_data = pd.read_csv("./../Data/DontOverfit/test.csv")
__id__ = data.pop("id")
target_y = data.pop("target")


############################################################

X = data.values
y = target_y.values.reshape(-1,1)

자 그러면 여기서 RandomForest, GradientBoosting, LogisticRegression 으로 선택되는 변수가 뭔지 찾아보자.

RFselector = SelectFromModel(estimator=RandomForestClassifier()).fit(X, y)
GBMselector = SelectFromModel(estimator=GradientBoostingClassifier()).fit(X, y)
LRselector = SelectFromModel(estimator=LogisticRegression()).fit(X, y)

columns = data.columns

 

자 이제 선택된 변수들의 개수를 비교해보자.

각각 선택된 변수들이 이렇게 다르게 나온다. 
그러면 이 변수들의 교집합인 몇개나 나올까?

3개의 모델에서 변수 선택의 교집합은 총 18개가 나온다!

 

- 결론 -

다른 알고리즘이나 툴에서도 변수 중요도를 통해 선택할 수 있으나, 좀 더 쉽게 할 수 있는 것 같아 공유한다!

즐거운 분석하시기를

728x90