使用 sklearn 中的 OneVsRestClassifier 将自定义的二元分类调整为多类分类

Posted

技术标签:

【中文标题】使用 sklearn 中的 OneVsRestClassifier 将自定义的二元分类调整为多类分类【英文标题】:Using OneVsRestClassifier from sklearn to tune a customized binary classification into a multi-class classification 【发布时间】:2016-08-11 11:14:04 【问题描述】:

我有二元分类方法名称 FMclassifier 我需要将它应用于多类分类问题,到目前为止我知道可以使用一些估计器将二元分类器或回归器转换为多类分类器。 我想知道在 sklearn 中使用 OneVsRestClassifier 是否可以达到这个目标? 如果是这样,我需要知道如何在我的代码中应用它?类似下面的代码是正确的方法吗?

OneVsRestClassifier(FMClassifier(n_iter=100)).fit(X_train,y_train)

【问题讨论】:

【参考方案1】:

是的,应该是这样的

classifier = OneVsRestClassifier(MyClassifier(param1 = A, param2 = B))
classifier.fit(X_train, Y)
predicted = classifier.predict(X_test)

您只需要确保您的分类器实现 fit 以及 decision_function 或 predict_proba 方法之一。更多信息在这里: http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html

在您的示例中,您使用 OneVsOneClassifier,这是一个具有不同方法的不同元分类器。

【讨论】:

非常感谢我遵循相同的方式,但我遇到了一个错误:RuntimeError: Cannot clone object MyClassifiication 似乎构造函数似乎没有设置参数,但我已经设置了该参数的值,您认为错误是与 OneVsRestClassifier 有关还是应该有其他原因? 我认为您的 MyClassifier 实现存在一些问题 - 它没有完全满足 OneVsRestClassifier 的期望。或者甚至使用您实现它的方式。我强烈建议您检查该答案:***.com/questions/24510510/… 是的,你是对的,事实上它没有任何 decision_function 并且它的核心只接受 1,-1 作为 类标签 !!你认为如果我定义一个可以将我的数据适合分类器的自定义 predict_proba 可以解决我的问题吗?还是比我想象的要复杂? 如果你正确实现了 predict_proba 和 fit 函数就足够了。当然,你需要注意不要违反SKLearns API(在我提供的链接中提到)【参考方案2】:

在 sklearn 中,除了 OneVsRestClassifier 之外,OneVsOneClassifier 和 OutputCodeClassifier 也可用。 FYR:http://scikit-learn.org/stable/modules/multiclass.html.

【讨论】:

是的,我也尝试过其他人,但在所有情况下我都有同样的错误!

以上是关于使用 sklearn 中的 OneVsRestClassifier 将自定义的二元分类调整为多类分类的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用不同的数据集作为 AdaBoostRegressor (sklearn) 中的预测输入?

sklearn 中的 AttributeError

sklearn中的交叉验证+决策树

SkLearn 中的 TimeSeriesSplit 无法正常工作

Numpy、Pandas 和 Sklearn 中的多维缩放拟合(ValueError)

sklearn 中的 RandomForestRegressor 给出负分