2017-04-08 72 views
0

我想要選擇基於樹的功能。 我的數據集有大約30列,做完之後,大約有5個。 對我來說,這對我來說很好,我遇到的問題是我得到的5列的數據集不保留列的名稱,我可以不識別他們。Scikit學習基於樹的功能選擇保留列名稱?

import pandas as pd 
from sklearn.ensemble import ExtraTreesClassifier 
from sklearn.feature_selection import SelectFromModel 

data = pd.read_csv(file) 
X = data.drop('target', 1) 
y = data['target'] 
X.shape      #(100000, 30) 
clf = ExtraTreesClassifier() 
clf = clf.fit(X, y) 
clf.feature_importances_ 

model = SelectFromModel(clf, prefit=True) 
X_new = model.transform(X) 
X_new.shape     #(100000, 5) 

有人可以幫我嗎?

+0

試試['get_support '](http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html#sklearn.feature_selection.SelectFromModel.get_support)功能。正如'model.get_support(indices = True)' – ehudk

+0

你好ehudk,按照你所告訴我的,我得到所選原始數據集的列號。確實沒有表明列的名稱,但它是一個解決方案。如果有人願意貢獻,我會留下這個問題。非常感謝您的幫助 – Javi

回答

1

現在,當我更肯定的回答,請嘗試以下方法:

mask = model.get_support(indices=False) # this will return boolean mask for the columns X_new = X.loc[:, mask] # the sliced dataframe, keeping selected columns featured_col_names = X_new.columns # columns name index

如果你需要的僅僅是列名:
X.columns[model.get_support()]

+0

感謝ehudk我會盡力的! – Javi