在稀疏矩阵中排序 (Python 2.*)
Sorting in sparse matrix (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]
link?
因为通过调用 argsort
你得到排序的索引而不是排序的数组,你可以使用 argsort
的结果直接作为特征索引。
所以如果你有一个数组[1.5, 2.5, 0.5]
,argsort
的结果是[2, 0, 1]
,表示索引2处的元素是最低的元素,索引0是第二低的,索引 1 是最高的。
因此,如果你想提取前 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
是特征索引到特征名称(通常是单词)的映射。
我正在 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]
link?
因为通过调用 argsort
你得到排序的索引而不是排序的数组,你可以使用 argsort
的结果直接作为特征索引。
所以如果你有一个数组[1.5, 2.5, 0.5]
,argsort
的结果是[2, 0, 1]
,表示索引2处的元素是最低的元素,索引0是第二低的,索引 1 是最高的。
因此,如果你想提取前 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
是特征索引到特征名称(通常是单词)的映射。