Does One-Against-All or One-Against-One Improve the Performance of Multiclass Classifications?

最近有点荒废了,忙着改自己的文章,平时还要讨论班,时间就显得有限了,今天就给大家讲一篇有意思的文章。

首先是这篇文章的具体的信息,如下:

Eichelberger, R.K., Sheng, V.S.Does One-Against-All or One-Against-One Improve thePerformance of Multiclass Classifications? In: Proceedings of theTwenty-Seventh AAAI Conference on Artificial Intelligence, 2013:1609-1610.

这篇文章作者想要说明什么了?因为我们在做SVM和logistic regression的时候,经常通过One-Against-All和One-Against-One来提高分类的精度,作者做这篇文章的目的就是想证明(数据集测试)这两种算法是不是真的有效,还有没有其它更好的途径来改善分类效果,因此作者主要采用四种方法,在25个数据集上进行了测试。

作者采用的工具是Weka包,这个就不多说了,刚兴趣的同学可以自己去查下。

算法主要测试了四种:J48 was used for decision trees, NaiveBayes fornaïve bayes, SMO for support vector machines, and Logistic for logisticregression.

训练方式:OAA: One-Against-All (n个分类器,其中n为类别数)OAO:One-Against-One (n(n-1)/2个分类器)AAO: All-At-Once (1个分类器)。当然作者觉得OAA和OAO都是多个分类器,这样的竞赛不公平,那怎么办了?作者就对AAO采用了Bagging算法,从而训练n个分类器和n(n-1)/2个分类器用来和前面的两种算法比较。

在对25个数据集上进行了测试之后,作者算了分类的平均准确率如表1,采用双尾t检验得出两个算法在不同数据集上的(赢/平/输)的次数在表2中。

表1.平局准确率

表2. 各种算法的赢/平/输的次数

最后,作者得出结论:OAA算法是最次的,AAO其次,OAO最佳。但是在采用Bagging算法之后,AAO算法最好。

所以,这样看来以后说OAA和OAO的时候真要小心点了,好了,就写到这里。





### One-vs-Rest Classification Strategy One-vs-Rest (OvR),也称为 One-vs-All (OvA),是一种多类分类问题的经典解决方案。在这种策略下,一个多类分类问题被分解为多个二元分类子问题。对于每一个类别 \( C_i \),构建一个二元分类器来区分该类别与其他所有类别。具体而言: - 对于目标类别 \( C_i \),标记其样本为正类(通常设为1),而其他所有类别的样本则标记为负类(通常设为0)。 - 这样一来,针对每个类别都会训练一个独立的二元分类器。 最终预测阶段通过比较各个分类器输出的概率或置信度得分来进行决策。例如,在逻辑回归或其他概率估计模型中,可以选取具有最高概率的那个类别作为最终预测结果[^1]。 以下是基于 Python 的简单实现示例,使用 Scikit-Learn 库中的 `OneVsRestClassifier` 来完成 OvR 多类分类任务: ```python from sklearn.multiclass import OneVsRestClassifier from sklearn.svm import SVC from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据集 data = load_iris() X, y = data.data, data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 使用支持向量机作为基础分类器 base_classifier = SVC(probability=True) # 构建 One-vs-Rest 分类器 ovr_classifier = OneVsRestClassifier(base_classifier) ovr_classifier.fit(X_train, y_train) # 预测并评估性能 y_pred = ovr_classifier.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy:.2f}") ``` 上述代码展示了如何利用 SVM 作为基分类器并通过 `OneVsRestClassifier` 实现多类分类。值得注意的是,尽管这种方法能够有效扩展到更多类别上,但它可能增加计算负担,因为需要分别训练多个二元分类器[^2]。 当处理大规模数据时,重新调整参数或者采用更高效的方法可能会成为必要选项之一。如果存在大量数据,则建议考虑对整个网络权重进行全面更新;而对于小型数据集来说,仅需微调最后几层即可满足需求[^3]。 ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值