在稀疏矩阵中排序(Python 2. *)

时间:2016-05-26 08:59:03

标签: python scikit-learn sparse-matrix python-2.x

我正在解决课程中的任务,并且难以在稀疏矩阵中进行排序。 问题是:我做了一个支持向量分类(sklearn.svm.SVC

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

结果得到clf.coef_的矩阵[index_id; weight]。 现在我需要提取前N个权重及其索引,但使用weights排序clf.coef_.argsort()不会导致同时进行index_id排序。 如何对此矩阵进行排序,而不是打破[index_id; weight]链接?

1 个答案:

答案 0 :(得分:0)

由于通过调用.block { float: left; width: 150px; margin: 10px; border: 3px solid #73AD21; } .block:nth-child(3n+4){ border: 1px solid red; clear: both; } 得到排序的索引而不是排序的数组,您可以直接使用argsort的结果作为特征索引。

因此,如果您有一个数组argsort,则[1.5, 2.5, 0.5]的结果为argsort,表示索引2处的元素是最低元素,索引0是第二低的元素,索引1是最高的。

因此,如果要提取前2,则取[2, 0, 1]返回的数组的最后两个条目,并将其作为特征索引反转,在本例中为argsort

这是我通常从线性SVM中提取前N个权重的方法:

[1, 0]

其中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是要素名称(通常为单词)映射的要素索引。

相关问题