python - 来自 sklearn 的关于 SVC 对象的 `decision_function_shape` 参数的说明
问题描述
问题
对象的参数似乎对输出本身完全没有决定性,而只是重塑了每个分类器的分数数组decision_function_shape
。sklearn.svm.SVC
但是有什么方法可以理解数组在对象的基本实现中是如何转换的(OvO 策略和ovr
默认参数decision_function_shape
?
观察
用于多类分类的 SVC 实施为使用一对一策略。所以我们得到了n类的 n-choose-2分类器。回顾一下:
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 分类器集合到 OvR 决策函数的转换发生在函数中_ovr_decision_function
,来源在这里。总而言之,每个涉及类的 OvO 分类器都会i
对每个样本是否属于 类i
进行投票,这些投票被统计,得票最多的类获胜;为了打破平局,置信水平(OvO 决策函数)被纳入,再次在 OvO 分类器中总计,现在缩放到适合仅打破平局的范围。
推荐阅读
- ios - 具有类和静态函数的最终类
- scala - 结合具有相同物化值的多个源
- c++ - VSCode Dokcerized 容器中的 Permission Denied CPP
- javascript - 将样式应用于表格时如何同时将样式应用于表格和所有单元格
- .net-core - 使用 Ionide 插件在 VS Code 中运行 F# 程序
- firebase - 谷歌云功能 - 删除旧版本的功能?
- laravel - 重构和优化 Laravel 验证规则(required_with)
- sql - PosgreSQL 将表连接为数组
- java - 确定 `.` 和 `..` 是否是 Java 文件系统中的“特殊名称”
- ios - 直接深度链接到特定的聊天或消息?