2016-08-19 20 views
1

機能が一度だけエンコードされているときにscikit learnで機能の重要度を(ランダムフォレストで)計算することは可能ですか?OneHotEncoded機能を使用したコンピューティング機能の重要性

+0

はい、あなたはワンホットエンコーディング(例えば 'DictVectorizer')のために使用するもの変圧器に応じて、あなたがより機能名にアクセスすることができましたその変圧器は 'feature_names_'属性を使用しています。 – Kris

答えて

1

ここではその重要度と機能名を組み合わせた方法の例です:

from sklearn.feature_extraction import DictVectorizer 
from sklearn.preprocessing import FunctionTransformer 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.pipeline import make_pipeline 


# some example data 
X = pd.DataFrame({'feature': ['value1', 'value2', 'value2', 'value1', 'value2']}) 
y = [1, 0, 0, 1, 1] 

# translate rows to dicts 
def row_to_dict(X, y=None): 
    return X.apply(dict, axis=1) 

# define prediction model 
ft = FunctionTransformer(row_to_dict, validate=False) 
dv = DictVectorizer() 
rf = RandomForestClassifier() 

# glue steps together 
model = make_pipeline(ft, dv, rf) 

# train 
model.fit(X, y) 

# get feature importances 
feature_importances = zip(dv.feature_names_, rf.feature_importances_) 

# have a look 
print feature_importances 
+0

これは素晴らしいことです!これはラベルごとに各機能の機能の重要度を返しますが、これは可能ではないと私は思いました!ありがとうございました:) – gbhrea

+1

よろしくお願いします! – Kris

+0

各機能の全体的な機能重要度を取得する簡単な方法はありますか? (ラベルごとではない) – gbhrea

関連する問題