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



我正在解决 coursera 中的一个任务,并陷入了稀疏矩阵中的排序。问题是:我做了一个支持向量分类(sklearn.svm.SVC

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

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

由于通过调用argsort您可以获得排序的索引而不是排序的数组,因此您可以将argsort的结果直接用作特征索引。

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

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

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

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是特征名称(通常是单词)映射的特征索引。

相关内容

  • 没有找到相关文章

最新更新