2016-05-26 9 views
0

私はcourseraでタスクを解決しており、疎行列で並べ替えることに固執しています。 問題がある:私は、サポートベクター分類(sklearn.svm.SVC疎行列で並べ替える(Python 2. *)

clf = SVC(C=1, kernel='linear', random_state=241) 
    clf.fit(X, y) 

を行い、その結果、マトリックス[index_id; weight]clf.coef_を得ました。 今、私はトップNの重みとそのインデックスを抽出する必要がありますが、のソートはclf.coef_.argsort()と同時に行われません。index_idソート。 この行列をソートしないでソートするにはどうすればいいですか?[index_id; weight]リンク?

答えて

0

argsortを呼び出すとソートされた配列の代わりにソートされたインデックスが得られるので、argsortの結果をフィーチャインデックスとして直接使用することができます。

[1.5, 2.5, 0.5]の場合、argsortの結果は[2, 0, 1]であり、インデックス2の要素が最小要素であり、インデックス0が2番目に低く、インデックス1が最も高いことを表します。この場合には[1, 0]

は、これは私が通常抽出するために何をすべきかです

あなたがトップ2を抽出したいのであれば、あなたはargsortによって返される配列の最後の2つのエントリを取ると機能の指標としてそれを逆転し、線形SVMから上位Nの重み:labels、クラスの集合であり、mapping名前(通常の単語)マッピングを搭載した特徴量である

coefs = clf.coef_ 
if len(set(labels)) == 2: 
    coefs = np.array([coefs[0, :], (1-coefs)[0, :]]) 
for cls, coef in zip(sorted(set(labels)), coefs): 
    top_k = reversed(np.argsort(coef)[-k:]) 
    keywords = [mapping[idx] for idx in top_k] 
    print('%s: %s' % (cls, keywords)) 

+0

したがって、 'mapping'は' vectorizer.get_feature_names() 'です。' labels'にはどうすればいいですか? (うん、私はPythonに完全な初心者です)。私が使用しているコードは次のとおりです:http://pastebin.com/kxt0Rr35 –

+0

あなたが入力を分類するクラスのセットです。で、私のために '' 印刷(ソート(feature_mapping [I]: - 私は 'INDSの=のclf.coef_.indices [] 10 clf.coef_.data.argsort()[]でそれをovercomedているよう – justhalf

+0

が見えますinds)) ' ありがとう –