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

时间:2016-02-03 07:21:20

标签: python numpy svm libsvm

当我得到多类SVM的系数时,我似乎找不到一种方法来检索权重的类。他们按某种顺序排序。有没有办法检索哪个类与系数2D数组中的哪个索引相关?

1 个答案:

答案 0 :(得分:4)

您可以从xDoc1 = new XmlDocument(); xDoc1.Load("file.xml"); // Containing the given example above. XmlNodeList nodes = xDoc1.SelectSingleNodes("//bbb[@id='1']"); foreach (XmlNode n in nodes) { XmlNode parent = n.ParentNode; parent.RemoveChild(n); } // At this point, xDoc1 does not contain the first bbb node (id='1') anymore. 属性获取类的顺序。我认为它们通常按升序排列,因为numpy.unique会对它们进行排序,但到目前为止我知道这没有记录。

如果你做多级分类,scikit-learn采用一对一的方案。这意味着您为每个类组合获得一个单独的分类器(或一组权重)。如果classes_是类的数量,则总共有C个组合。 不幸的是,似乎没有关于如何订购这些comibantions的任何信息。但是,通过查看source code,它们的排序似乎如下:

C * (C-1) / 2

考虑以下示例:

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) 的形状表明有6组权重。这些对应于以下类标签对: AB,AC,AD,BC,BD,CD

注意: 此答案基于观察和源代码检查,而不是基于实际文档。带上一粒盐:)