Python SVC多类分类OVO决策函数解释

Python SVC多类分类OVO决策函数解释,python,scikit-learn,Python,Scikit Learn,我试图理解在使用一对一方法的多类分类场景中,如何解释决策函数值。我创建了一个2D样本数据,每个数据包含4个类的100个样本,存储在X&y变量中。代码如下: # 4 Classes - Make 4 separate datasets d1, o1 = make_blobs(n_samples = 100, n_features = 2, centers = 1, random_state=0, cluster_std = 0.5) d2, o2 = make_blobs(n_samples =

我试图理解在使用一对一方法的多类分类场景中,如何解释决策函数值。我创建了一个2D样本数据,每个数据包含4个类的100个样本,存储在X&y变量中。代码如下:

# 4 Classes - Make 4 separate datasets
d1, o1 = make_blobs(n_samples = 100, n_features = 2, centers = 1, random_state=0, cluster_std = 0.5)
d2, o2 = make_blobs(n_samples = 100, n_features = 2, centers = 1, cluster_std = 0.5)
d3, o3 = make_blobs(n_samples = 100, n_features = 2, centers = 1, cluster_std = 0.5)
d4, o4 = make_blobs(n_samples = 100, n_features = 2, centers = 1, cluster_std = 0.5)
X = np.vstack((d1,d2,d3,d4))
y = np.hstack((np.repeat(0,100), np.repeat(1,100), np.repeat(2,100), np.repeat(3,100))).T
print('0 - Red, 1 - Green, 2 - Blue, 3 - Yellow')
cols = np.hstack((np.repeat('r',100), np.repeat('g',100), np.repeat('b',100), np.repeat('y',100))).T
svm_ovr = SVC(kernel='linear', gamma='auto', decision_function_shape='ovr')
svm_ovr.fit(X, y)

svm_ovo = SVC(kernel='linear', gamma='auto', decision_function_shape='ovo')
svm_ovo.fit(X, y)

print('OVR Configuration Costs for 4 Class Classification Data:')
print('Cost: ' + str(svm_ovr.decision_function([[2,2]])))
print('Prediction: ' + str(svm_ovr.predict([[2,2]])))
print('No. Support Vectors: ' + str(svm_ovr.n_support_))
print('OVO Configuration Costs for 4 Class Classification Data:')
print('Cost: ' + str(svm_ovo.decision_function([[2,2]])))
print('Prediction: ' + str(svm_ovo.predict([[2,2]])))
print('No. Support Vectors: ' + str(svm_ovo.n_support_))
代码段的输出为:

OVR Configuration Costs for 4 Class Classification Data:
Cost: [[ 3.23387565  0.77664387 -0.17878109  2.15179802]]
Prediction: [0]
No. Support Vectors: [2 4 1 3]
OVO Configuration Costs for 4 Class Classification Data:
Cost: [[ 0.68740472  0.77724567  0.88685872  0.14910583 -1.49263233 -0.23041644]]
Prediction: [0]
我猜在OVR场景中,0和Rest模型的最高成本值为3.23。这表明预测值应为0。
您能否解释一下,SVC如何根据OVO案例中6个模型的成本值预测测试点的等级为0

OVO
模型中,您为每个可能的类对构建一个二进制分类器,从而生成
nC2
模型,其中
n
是您案例中
4
的类总数(因此您构建
6
模型)

OVO
中,模型按照字典顺序构建,即

模型1=1级Vs 2级
模型2=1级Vs 3级
模型3=1级Vs 4级
模型4=2级与3级对比
模型5=2级与4级对比
模型6=3级与4级

因此,决策函数是一个
6
维数组,每个元素对应于该点与该模型分离超平面的距离,负值表示该点位于超平面的另一侧:

Cost: [[ 0.68740472  0.77724567  0.88685872  0.14910583 -1.49263233 -0.23041644]]
因此,使用决策函数数组,可以根据值对每个模型进行预测。所以你的预测是这样的:

模型1=1级
型号2=1级
模型3=1级
型号4=2级
型号5=4级
模型6=4级

现在,您只需对模型进行多数投票,并将其作为预测,在本例中,预测结果为class
1


希望这有帮助

我在LibSVM文档中发现了类似的解释:“在分类中,我们使用投票策略:每个二元分类都被认为是一种投票,可以对所有数据点x进行投票-最后,一个点被指定为投票数最大的类别。如果两个类拥有相同的投票权,尽管这可能不是一个好策略,但现在我们只需选择存储类名数组中首先出现的类即可。”。谢谢