Sklearn SVM 系数属性 - 如何获取 class 名称?
Sklearn SVM coefficient attribute - how to get class name?
当我得到我的 multiclass SVM 的系数时,我似乎无法找到一种方法来检索 class 权重的用途。它们按某种顺序排序。有没有办法检索哪个 class 与系数二维数组中的哪个索引对应?
您可以从 classes_
属性中获取 class 的顺序。我认为它们通常按升序排列,因为 numpy.unique 会对它们进行排序,但据我所知,这没有记录。
如果你做 multi-class classification scikit-learn 采用一对一的方案。这意味着对于 classes 的每个组合,您都会得到一个单独的 classifier(或一组权重)。如果 C
是 class 的数量,则共有 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组权重。这些对应于以下 class 个标签对:
AB、AC、AD、BC、BD、CD
注意:此答案基于观察和源代码检查,而非实际文档。对它持保留态度:)
当我得到我的 multiclass SVM 的系数时,我似乎无法找到一种方法来检索 class 权重的用途。它们按某种顺序排序。有没有办法检索哪个 class 与系数二维数组中的哪个索引对应?
您可以从 classes_
属性中获取 class 的顺序。我认为它们通常按升序排列,因为 numpy.unique 会对它们进行排序,但据我所知,这没有记录。
如果你做 multi-class classification scikit-learn 采用一对一的方案。这意味着对于 classes 的每个组合,您都会得到一个单独的 classifier(或一组权重)。如果 C
是 class 的数量,则共有 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组权重。这些对应于以下 class 个标签对:
AB、AC、AD、BC、BD、CD
注意:此答案基于观察和源代码检查,而非实际文档。对它持保留态度:)