关于 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_function
、source here 中。总而言之,涉及 class i
的每个 OvO classifier 都会对每个样本是否属于 class i
进行投票,然后对这些投票进行统计,然后 class 获得最多选票获胜;为了打破平局,置信水平(OvO 决策函数)被纳入其中,再次在 OvO classifier 之间进行总计,现在缩放到适合仅打破平局的范围。
问题
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_function
、source here 中。总而言之,涉及 class i
的每个 OvO classifier 都会对每个样本是否属于 class i
进行投票,然后对这些投票进行统计,然后 class 获得最多选票获胜;为了打破平局,置信水平(OvO 决策函数)被纳入其中,再次在 OvO classifier 之间进行总计,现在缩放到适合仅打破平局的范围。