关于 sklearn 中 SVC 对象的 `decision_function_shape` 参数的说明

Clarifications about the `decision_function_shape` parameter of SVC object from sklearn

问题

sklearn.svm.SVC 对象的参数 decision_function_shape 似乎对输出本身没有决定性作用,而只是重塑每个 classifier 的得分数组。但是有什么方法可以理解数组在对象的基本实现中是如何转换的(OvO 策略和 ovr 默认参数 decision_function_shape ?

观察

多 class classification 的 SVC 被实现为使用一对一策略。所以我们得到 n-choose-2 classifiers for n class。回顾一下:

ovo = SVC()                                     # (n choose 2) classifiers
ovo_bis = SVC(decision_function_shape='ovo')    # (n choose 2) classifiers
ovr =  OneVsRestClassifier(SVC())               # n classifiers


ovo.decision_function([one_instance])           # return array of len n
ovo_bis.decision_function([one_instance])       # return array of len (n choose 2)
ovr.decision_function([one_instance])           # return array of len n

从 OvO classifier 集合到 OvR 决策函数的转换发生在函数 _ovr_decision_functionsource here 中。总而言之,涉及 class i 的每个 OvO classifier 都会对每个样本是否属于 class i 进行投票,然后对这些投票进行统计,然后 class 获得最多选票获胜;为了打破平局,置信水平(OvO 决策函数)被纳入其中,再次在 OvO classifier 之间进行总计,现在缩放到适合仅打破平局的范围。