2016-05-26 2 views
0

Я решаю задачу в coursera и зацикливаюсь на сортировке в разреженной матрице. Проблема заключается в том: я сделать поддержку векторной классификации (sklearn.svm.SVC)Сортировка в разреженной матрице (Python 2. *)

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

и в результате получил матрицу clf.coef_ из [index_id; weight]. Теперь мне нужно извлечь верхний вес и их индексы, но weights Сортировка с clf.coef_.argsort() не приводит к одновременному сортировке index_id. Как я могу сортировать эту матрицу, не нарушая [index_id; weight] link?

ответ

0

Поскольку, вызывая argsort, вы получаете отсортированные индексы вместо отсортированного массива, вы можете использовать результат argsort непосредственно как индекс функции.

Так что, если у вас есть массив [1.5, 2.5, 0.5], результатом argsort является [2, 0, 1], представляющий этот элемент с индексом 2 самый низкий элемент, индекс 0 является вторым самым низким, а индекс 1 является самым высоким.

Так что, если вы хотите извлечь топ-2, вы берете две последние записи массива, возвращаемого argsort и его вспять, так как функция индексов, в данном случае [1, 0]

Это то, что я обычно делаю, чтобы извлечь топ-N весов от линейной SVM:

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)) 

Где labels это набор классов и mapping является индексом функции, чтобы показать имя (обычно слов) отображение.

+0

Итак, 'mapping' является' vectorizer.get_feature_names() 'и что я должен помещать в' ярлыки'? (yep, я полный новичок на python). Код, который я использую, выглядит следующим образом: http://pastebin.com/kxt0Rr35 –

+0

Это набор классов, в который вы классифицируете ввод. – justhalf

+0

Похоже, я уже преодолена его 'INDS = clf.coef_.indices [clf.coef_.data.argsort() [- 10:]]' ' печати (отсортированный (feature_mapping [я] для г в inds)) ' Спасибо –

Смежные вопросы