2

我有一个标记为 3 个类的文本数据,第 1 类有 1% 的数据,第 2 类 - 69% 和第 3 类 - 30%。总数据量为 10000。我正在使用 10 倍交叉验证。对于分类,scikit learn python 库的 SVM 与 class_weight=auto 一起使用。但是 10 倍 CV 的 1 步的代码已经运行了 2 小时,还没有完成。这意味着代码至少需要 20 小时才能完成。在不添加 class_weight=auto 的情况下,它会在 10-15 分钟内完成。但是,输出中没有数据被标记为 1 类。有没有办法解决这个问题?

4

1 回答 1

4

首先,对于文本数据,您不需要非线性内核,因此您应该使用高效的线性 SVM 求解器,例如 LinearSVC 或 PassiveAggressiveClassifier。

SVC / libsvm 的 SMO 算法是不可扩展的:复杂度超过二次方,这在实践中通常使得它对于大于 5000 个样本的数据集毫无用处。

此外,为了处理类不平衡,您可能希望尝试对 2 类和 3 类进行二次抽样,以使样本数量最多是 1 类样本数量的两倍。

于 2013-06-16T12:08:30.230 回答