2016-09-18 2 views
1

Я хочу установить лимит для вывода feature_importances_ с использованием DataFrame. Ниже мой код (см от этого blog):Установить ограничение feature_importances_ в DataFrame Pandas

train = df_visualization.sample(frac=0.9,random_state=639) 
test = df_visualization.drop(train.index) 

train.to_csv('train.csv',encoding='utf-8') 
test.to_csv('test.csv',encoding='utf-8') 

train_dis = train.iloc[:,:66] 
train_val = train_dis.values 
train_in = train_val[:,:65] 
train_out = train_val[:,65] 

test_dis = test.iloc[:,:66] 
test_val = test_dis.values 
test_in = test_val[:,:65] 
test_out = test_val[:,65] 

dt = tree.DecisionTreeClassifier(random_state=59,criterion='entropy') 
dt = dt.fit(train_in,train_out) 

score = dt.score(train_in,train_out) 
test_predicted = dt.predict(test_in) 

# Print the feature ranking 
print("Feature ranking:") 

print (DataFrame(dt.feature_importances_, columns = ["Imp"], index = train.iloc[:,:65].columns).sort_values(['Imp'], ascending = False)) 

Моя проблема теперь она отображает все 65 функций. Выход:

         Imp 
wbc        0.227780 
age        0.100949 
gcs        0.069359 
hr         0.069270 
rbs        0.053418 
sbp        0.052067 
Intubation-No      0.050729 
...          ... 
Babinski-Normal     0.000000 
ABG-Metabolic Alkolosis   0.000000 
ABG-Respiratory Acidosis   0.000000 
Reflexes-Unilateral Hyperreflexia 0.000000 
NS-No        0.000000 

Например, я просто хочу, топ-5 только функции. Ожидаемый результат:

         Imp 
wbc        0.227780 
age        0.100949 
gcs        0.069359 
hr         0.069270 
rbs        0.053418 

Update: Я получил способ отображения с помощью itertuples.

display = pd.DataFrame(dt.feature_importances_, columns = ["Imp"], index = train.iloc[:,:65].columns).sort_values(['Imp'], ascending = False) 
x=0 
for row,col in display.itertuples(): 
    if x<5: 
     print(row,"=",col) 
    else: 
     break 
    x++ 

Выход:

Feature ranking: 
wbc = 0.227780409582 
age = 0.100949241154 
gcs = 0.0693593476192 
hr = 0.069270425399 
rbs = 0.0534175402602 

Но я хочу знать, является ли это эффективным способом, чтобы получить выход?

ответ

0

Попробуйте это:

indices = np.argsort(dt.feature_importances_)[::-1] 
for i in range(5): 
     print " %s = %s" % (feature_cols[indices[i]], dt.feature_importances_[indices[i]]) 
+0

Спасибо! Оно работает. Не хотите ли вы уточнить часть «[- 1]» или дать какой-либо документ для ссылки? –

+0

О эффективности (я имею в виду быстрее в процессе вывода), я записываю интервал времени, здесь я получил: Мой метод: +0,009999990463256836 Ваш метод: 0,019999980926513672 Мой метод более быстрее, чем ваша. –

+0

Понял. Спасибо за объяснение. Извините, вы не можете продвинуться на данный момент, так как не хватило репутации. –

Смежные вопросы