以类概率为目标的核心外多类分类器

时间:2019-03-06 12:40:05

标签: python machine-learning scikit-learn multiclass-classification

我正在一个项目中,我想使用scikit-learn训练一个核心外的多类分类器。预测目标是一组类别概率的数组,例如

Y = [[0.1, 0.5, 0.4],
     [0.8, 0.1, 0.1],
     [0.2, 0.1, 0.7],
     [0.2, 0.2, 0.6], ...]

换句话说,Y被规范化为Y.sum(axis=1) = [1, 1, 1, 1, ...]

我注意到scikit-learn具有OneVsRestClassifier包装类,我认为这可能会有所帮助。只要基础二进制分类器也支持partial_fit,它似乎就支持SGDClassifier

但是,当我将此目标Y送入分类器时,遇到一些错误,因为在第一次调用partial_fit时必须传递类:

from sklearn.multiclass import OneVsRestClassifier
from sklearn.linear_model import SGDClassifier

clf = OneVsRestClassifier(SGDClassifier())
clf.partial_fit(X, Y)  # raises ValueError

错误显示为“类必须在第一次调用partial_fit时传递” 。因此,我尝试传递一组类标签:

clf.partial_fit(X, Y, classes=[0, 1, 2])  # raises another ValueError

这引起了另一个错误,表明类[0.1, 0.5, ...]中缺少[0, 1, 2]

我也尝试了批处理fit方法,但是似乎也没有为该方法实现。

问题

有人知道在scikit-learn中是否可行吗?如果是这样,您会怎么做?

1 个答案:

答案 0 :(得分:0)

  

这引起了另一个错误,表明类[0、1、2]中缺少[0.1、0.5,...]

Y应该是形状的矢量(n_samples,)。由于您唯一的classes[0,1,2],因此partial_fit()期望这些值出现在Y中。

如果最大概率确定了输出类别,则可以将训练集Y修改为Y = np.amax(Y, axis=1),并将其传递给partial_fit()

希望这会有所帮助。