1

私はUCIの乳がんのデータセットに取り組んでおり、最高の体重を持つトップ3の機能を探しています。 logmodel.coef_を使用してすべての機能の重要度を知ることができましたが、機能名はどのように取得できますか?以下は私のコード、出力、およびデータセット(scikitからインポートされたもの)です。ロジスティック回帰:最高の重みを持つ上位3つの特徴を見つけるには?

from sklearn.model_selection import train_test_split 
from sklearn.datasets import load_breast_cancer 
from sklearn.linear_model import LogisticRegression 

cancer = load_breast_cancer() 
X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer.target, stratify=cancer.target, random_state=42) 

logmodel = LogisticRegression(C=1.0).fit(X_train, y_train) 
logmodel.coef_[0] 

上記のコードは出力配列を出力します。これらの重みを使用すると、どのように関連フィーチャ名を取得できますか?

Output: 
    array([ 1.90876683e+00, 9.98788148e-02, -7.65567571e-02, 
      1.30875965e-03, -1.36948317e-01, -3.86693503e-01, 
      -5.71948682e-01, -2.83323656e-01, -2.23813863e-01, 
      -3.50526844e-02, 3.04455316e-03, 1.25223693e+00, 
      9.49523571e-02, -9.63789785e-02, -1.32044174e-02, 
      -2.43125981e-02, -5.86034313e-02, -3.35199227e-02, 
      -4.10795998e-02, 1.53205924e-03, 1.24707244e+00, 
      -3.19709151e-01, -9.61881472e-02, -2.66335879e-02, 
      -2.44041661e-01, -1.24420873e+00, -1.58319440e+00, 
      -5.78354663e-01, -6.80060645e-01, -1.30760323e-01]) 

ありがとうございます。私は本当にこれに関する助けに感謝します。

答えて

3

これは、仕事をする:

import numpy as np 
coefs=logmodel.coef_[0] 
top_three = np.argpartition(coefs, -3)[-3:] 
print(cancer.feature_names[top_three]) 

これは、これらの機能がトップ3ですが、彼らは必ずしも彼ら自身の中にソートされていないことを

['worst radius' 'texture error' 'mean radius'] 

注意を出力します。それらを並べ替えるには、次のようにします。

import numpy as np 
coefs=logmodel.coef_[0] 
top_three = np.argpartition(coefs, -3)[-3:] 
top_three_sorted=top_three[np.argsort(coefs[top_three])] 
print(cancer.feature_names[top_three_sorted]) 
+0

ありがとうございます。 'np.argpartition(coefs、-3)'がしていることを教えてください。 – jubins

+0

関数np.argpartition(coefs、k)は、coefs内の最小のn-k要素のインデックスで始まり、coefs内の最大のk要素のインデックスで終わる配列を返します。完全な並べ替えを実行しないので、配列の完全な並べ替えよりも効率的です(関数の-3を使うことはlen(coefs)-3を使うのと同じです)。効率を必要としない場合は、その行をtop_three = np.argsort(coefs)[ - 3:] –

+0

に置き換えることもできます。並べ替えを行う必要があるかどうか疑問に思っていましたか? 'top_three = np.argpartition(coefs、-3)[ - 3:]'は私に最も重要な3つの特徴を与えてくれますよね?しかしなぜ私は 'top_three_sorted = top_three [np.argsort(coefs [top_three])'をソートする必要があるのですか?それは結果を変えないだろうか? – jubins