MEKA 与 Scikit-learn 的不同结果!

数据挖掘 scikit-学习 支持向量机 准确性 威卡
2022-02-26 15:08:46

我有一个多标签数据,我使用不同的分类器和MEKAWEKA的多标签版本)进行了训练, MEKA给我的评估结果(例如准确性)与我从scikit-learn的相同分类器获得的结果不同。

因为我的数据是多标签的,所以我正在使用二进制相关性方法(在 MEKA 和 scikit-multilearn 中都有)。例如,我使用的是 SVM,它是MEKA(和 WEKA)中的SMO和sklearn中的 linearSVC。

现在,我从MEKA 中BR>SMO的10 倍交叉验证中获得的准确度约为50% ,而从BinaryRelevevce>LinearSVC获得的准确度约为20%其他评估措施(例如 f1 分数、汉明损失等)也不匹配。

我试图给出在LinearSVC的输入中可以找到的所有参数,与SMO的值相同,但没有运气。我的 Python 代码是这样的:

from skmultilearn.problem_transform import BinaryRelevance
from sklearn.svm import LinearSVC

my_classifier = BinaryRelevance(
                classifier=LinearSVC(C=1, random_state=1, tol=0.001, max_iter=10000, dual=False),
                require_dense=[True, True])

我必须补充一点,在 MEKA 中使用BR>SMO来训练和评估模型将花费我的数据将近一个小时,但 sklearn 的linearSVC(使用 skmultilern 的BinaryRelevance)在相同的数据上花费的时间不到10 分钟(因此准确性较低)。

顺便说一句,我正在使用accuracy_score方法来sklearn.metrics确保准确性。

所以我的问题是我错过了什么?如何从MEKAscikit-learn中的SVM获得相同的准确性?

1个回答

根据这个问题

LinearSVC 不是线性 SVM,如果没有,不要使用它。

此外

LinearSVC [是] sklearn 开发人员的错误之一。

在这张来自问题的图片中,您可以观察到它是如何不准确的,即使与 kernel=linear 的 SVC 相比也是如此。

进一步的差异可以解释为 SMO 和具有线性内核的 SVC 是如何实现的。

这篇文章比较了两者,答案是 SMO 应该是最快的,否则你的数据集可能不适合它。

我会用线性内核测试 SVC,看看情况是否会改变。