python - Sklearn SVM系数属性-如何获取类名?

标签 python numpy svm libsvm

当我获得多类 SVM 的系数时,我似乎无法找到一种方法来检索权重所属的类。它们按某种顺序排序。有没有办法检索哪个类与系数二维数组中的哪个索引对应?

最佳答案

您可以从classes_属性获取类的顺序。我认为它们通常按升序排列,因为 numpy.unique 会对它们进行排序,但据我所知,这没有记录。

如果进行多类分类,scikit-learn 会采用一对一的方案。这意味着您为每个类组合获得一个单独的分类器(或一组权重)。如果 C 是类的数量,则总共有 C * (C-1)/2 组合。 不幸的是,似乎也没有任何关于如何订购这些组合的信息。然而,从source code来看似乎它们的顺序如下:

0-1, 0-2, 0-3, ... 0-c,
     1-2, 1-3, ... 1-c,
          2-3, ... 2-c,
                .
                .
                .

考虑以下示例:

import numpy as np
from sklearn.svm import SVC

x = np.random.randn(40, 7)  # 7 features, 40 samples
y = ['D', 'B', 'A', 'C'] * 10  # four classes
svc = SVC(kernel='linear').fit(x, y)

print(svc.classes_)  # ['A', 'B', 'C', 'D']
print(svc.coef_.shape)  # (6, 7)

svc.coef_的形状显示有6组权重。它们对应于以下类标签对: AB、AC、AD、BC、BD、CD

注意: 这个答案基于观察和源代码检查,而不是实际文档。持保留态度:)

关于python - Sklearn SVM系数属性-如何获取类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35170805/

相关文章:

python - 使用 Python 更改图像中定义的颜色

python - 有效计算均值和中位数

python - 我可以在 np.mean() 中使用 str 吗?

machine-learning - Weka 中分类前的聚类

python - 读取 CSV 文件并跳过行,直到我们使用 python 找到某些列

python - 打破 Python 中的嵌套(双)循环

python - 在 Python 中批量转换 Unix 时间戳的函数

python - 将 numpy 数组转换为 PySide QPixmap

python - 内置函数用于 python 中的视觉单词编码包

解决使用 R 的 CMA Bioconductor 包时 SVM 分类交叉验证中的 'model empty' 错误