【发布时间】:2019-03-06 23:19:20
【问题描述】:
我正在从事一个项目,我想使用 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 中是否可行?如果是这样,你会怎么做?
【问题讨论】:
-
分类器通常期望您尝试传递类概率的类标签。解决方法是可能的......它们可能适用于您的情况,也可能不适用。请参阅how to use sklearn when target variable is a proportion 了解更多信息。
标签: python machine-learning scikit-learn multiclass-classification