2017-08-06 5 views
0

私は、RBFカーネルを持つSVMクラシファイアのための最も有益な(ベスト)機能のトップ10を取得しようとしています。私はプログラミングの初心者なので、私はオンラインで見つけたいくつかのコードを試しました。残念ながら、何も働かない。私はいつもエラー:ValueError: coef_ is only available when using a linear kernelを得る。トップ10の特徴rbfカーネルを使用したSVC

これは私がテストした最後のコードです:

scaler = StandardScaler(with_mean=False) 
enc = LabelEncoder() 
y = enc.fit_transform(labels) 
vec = DictVectorizer() 

feat_sel = SelectKBest(mutual_info_classif, k=200) 

# Pipeline for SVM classifier 
clf = SVC() 
pipe = Pipeline([('vectorizer', vec), 
      ('scaler', StandardScaler(with_mean=False)), 
      ('mutual_info', feat_sel), 
      ('svc', clf)]) 


y_pred = model_selection.cross_val_predict(pipe, instances, y, cv=10) 


# Now fit the pipeline using your data 
pipe.fit(instances, y) 

def show_most_informative_features(vec, clf, n=10): 
    feature_names = vec.get_feature_names() 
    coefs_with_fns = sorted(zip(clf.coef_[0], feature_names)) 
    top = zip(coefs_with_fns[:n], coefs_with_fns[:-(n + 1):-1]) 
    for (coef_1, fn_1), (coef_2, fn_2) in top: 
     return ('\t%.4f\t%-15s\t\t%.4f\t%-15s' % (coef_1, fn_1, coef_2, fn_2)) 
print(show_most_informative_features(vec, clf)) 

はRBFカーネルで分類器からトップ10の機能を得るために誰か決してしていますか?または、最高の機能を視覚化する別の方法は?

答えて

1

RBFカーネルの場合、表示している例と同様の方法で質問することは可能ですか(エラーが示唆しているように、リニアカーネルのみで動作します)。

しかし、いつでもあなたはfeature ablationを試すことができます。各フィーチャを1つずつ削除して、パフォーマンスにどのように影響するかをテストします。パフォーマンスに最も影響を与える10の機能は、「トップ10の機能」です。

明らかに、これは、(1)機能が比較的少なく、(2)トレーニングやテストに時間がかからない場合にのみ可能です。

関連する問題