我有一个使用sklearn的SVC类的程序。实际上,我使用的是使用SVC类的OneVsRestClassifier类。我的问题是predict_proba()方法有时返回的向量太短。这是因为classes_u属性缺少一个类,这是在培训期间标签不存在时发生的。在
考虑下面的示例(代码如下所示)。假设所有可能的类都是1、2、3和4。现在假设训练数据碰巧不包含任何标有class 3的数据。这很好,但当我调用predict_proba()时,我需要一个长度为4的向量。相反,我得到一个长度为3的向量。也就是说,predict_proba()返回[p(1)p(2)p(4)],但我想要[p(1)p(2)p(3)p(4)],其中p(3)=0。在
我想是吧clf.类是由训练期间看到的标签隐式定义的,在本例中这是不完整的。有什么方法可以显式地设置可能的类标签吗?我知道一个简单的解决方法是只获取predict_proba()输出并手动创建所需的数组。然而,这是不方便的,可能会减慢我的程序相当一点。在
# Python 2.7.6
from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
import numpy as np
X_train = [[1], [2], [4]] * 10
y = [1, 2, 4] * 10
X_test = [[1]]
clf = OneVsRestClassifier(SVC(probability=True, kernel="linear"))
clf.fit(X_train, y)
# calling predict_proba() gives: [p(1) p(2) p(4)]
# I want: [p(1) p(2) p(3) p(4)], where p(3) = 0
print clf.predict_proba(X_test)
我想到的解决方法是创建一个新的概率列表,并使用多个append()调用一次构建一个元素(参见下面的代码)。与predict_proba()自动返回所需内容相比,这似乎要慢一些。我还不知道它是否会大大减慢我的程序,因为我还没有尝试过。不管怎样,我想知道有没有更好的方法。在
^{pr2}$
正如评论中所说,scikitlearn没有提供显式设置可能的类标签的方法。在
我把你的解决办法搞砸了:
输出:
^{pr2}$请注意,您可以使用} ):
labels
参数显式地设置sklearn.metrics
中可能的类标签(例如^{示例:
请注意,从现在起您将run into issue issue try using ^{} when no positive example is in the ground truth for a given label 。在
相关问题 更多 >
编程相关推荐