2017-09-03 12 views
1

にはどうすれば適切に私のアルゴリズムのトレーニングと検証を終えた後、「ワンホットエンコードされた」機能の名称を表示することができますか?私は、それぞれの特徴の名前とその重要性をきちんと表示したい。以下は、私が試したものです:表示名

表示機能の重要性:

grid_search.best_estimator_.feature_importances_ 
array([ 7.67359589e-02, 7.20731884e-02, 4.38667330e-02, 
     1.69222269e-02, 1.51816327e-02, 1.66947835e-02, 
     1.56858183e-02, 3.43347923e-01, 5.95555727e-02, 
     7.65422356e-02, 1.11224727e-01, 1.02677088e-02, 
     1.32720377e-01, 1.06447326e-04, 4.45207929e-03, 
     4.62258699e-03]) 

ゲットワンホットカテゴリ名:

cat_one_hot_attribs = list(encoder.classes_) 
print(cat_one_hot_attribs) 
['<1H OCEAN', 'INLAND', 'ISLAND', 'NEAR BAY', 'NEAR OCEAN'] 

名前の残りの部分(他のカテゴリ)を取得します:

num_attribs = list(X_train) 

['longitude', 
'latitude', 
'housing_median_age', 
'total_rooms', 
'total_bedrooms', 
'population', 
'households', 
'median_income', 
'rooms_per_household', 
'bedrooms_per_household', 
'population_per_household', 
0, 
1, 
2, 
3, 
4] 

は、今私は、次の操作を行います。

attributes = num_attribs + cat_one_hot_attribs 

print(pd.DataFrame(sorted(zip(feature_importance, attributes), reverse=True))) 

しかし、私は、次を得る:私は他の方法を試してみましたが、すべてが失敗した

  0       1 
0 0.343348    median_income 
1 0.132720       1 
2 0.111225 population_per_household 
3 0.076736     longitude 
4 0.076542 bedrooms_per_household 
5 0.072073     latitude 
6 0.059556  rooms_per_household 
7 0.043867  housing_median_age 
8 0.016922    total_rooms 
9 0.016695    population 
10 0.015686    households 
11 0.015182   total_bedrooms 
12 0.010268       0 
13 0.004623       4 
14 0.004452       3 
15 0.000106       2 

これを正しく表示する方法をお勧めしますか?ありがとうございました。

編集:

@cᴏʟᴅsᴘᴇᴇᴅの答えから、私は次のことを試してみました:

feature_importance = grid_search.best_estimator_.feature_importances_ 

cat_one_hot_attribs = list(encoder.classes_) 

num_attribs = list(X_train) 
attributes = num_attribs + cat_one_hot_attribs 

vals = sorted(zip(feature_importance, attributes), key=lambda x: x[0], reverse=True) 
df = pd.DataFrame(vals) 
print(df) 

はまだ上記のような出力を得ます。

+0

は、どのようにそれをソートしたいですか? –

+0

最高から最高までが最高です。 – JohnWayne360

答えて

2

これを分解してください。まずキーでソートします。 feature_importanceのみが考慮されていることを確認してください。

セットアップ:

import pandas as pd 
import numpy as np 

feature_importance = np.array([ 7.67359589e-02, 7.20731884e-02, 4.38667330e-02, 
    1.69222269e-02, 1.51816327e-02, 1.66947835e-02, 
    1.56858183e-02, 3.43347923e-01, 5.95555727e-02, 
    7.65422356e-02, 1.11224727e-01, 1.02677088e-02, 
    1.32720377e-01, 1.06447326e-04, 4.45207929e-03, 
    4.62258699e-03]) 

cat_one_hot_attribs = ['<1H OCEAN', 'INLAND', 'ISLAND', 'NEAR BAY', 'NEAR OCEAN'] 

num_attribs = ['longitude', 
'latitude', 
'housing_median_age', 
'total_rooms', 
'total_bedrooms', 
'population', 
'households', 
'median_income', 
'rooms_per_household', 
'bedrooms_per_household', 
'population_per_household', 
0, 
1, 
2, 
3, 
4] 

attributes = num_attribs 

feature_importanceによってvalsのソートされたリストを取得します。

vals = sorted(zip(feature_importance, attributes), key=lambda x: x[0], reverse=True) 
df = pd.DataFrame(vals) 

その後、cat_one_hot_attribsの値とエンコーディングを置き換えるために.replaceを使用しています。

df.iloc[:, -1] = df.iloc[:, -1].replace({i : k for i, k in enumerate(cat_one_hot_attribs)}) 
df 

      0       1 
0 0.343348    median_income 
1 0.132720     INLAND 
2 0.111225 population_per_household 
3 0.076736     longitude 
4 0.076542 bedrooms_per_household 
5 0.072073     latitude 
6 0.059556  rooms_per_household 
7 0.043867  housing_median_age 
8 0.016922    total_rooms 
9 0.016695    population 
10 0.015686    households 
11 0.015182   total_bedrooms 
12 0.010268     <1H OCEAN 
13 0.004623    NEAR OCEAN 
14 0.004452     NEAR BAY 
15 0.000106     ISLAND 
+0

申し訳ありませんが、動作しませんでした。私はまだエンコードされた名前を取得しています... – JohnWayne360

+0

@ JohnWayne360これを行う前に 'attributes = cat_one_hot_attribs + num_attribs'も行うべきだと思います。期待している成果も含めてください。これで解決できなかったら、それが助けになるでしょう。 –

+0

私は午前中ですが、まだまだ怪しいです。それは私の環境でしょうか? – JohnWayne360