【问题标题】:SVM multiclass classification halts when training data using scikit-learn使用 scikit-learn 训练数据时,SVM 多类分类停止
【发布时间】:2020-01-04 00:50:36
【问题描述】:

我正在使用 scikit 和 svm 将数据分为 7 个类。数据是音频,我将它们切成 30 毫秒的帧。 最后,大约有 100 万帧,每个帧都用作具有 13 个 mfcc 特征的标记样本。 当按照以下代码拟合数据时,我的 cpu 使用率保持在 20% 左右,但没有任何反应!我已经等了大约 30 个小时,但还没有完成。 是不是样本数太多了?!!

clf = SVC(C=20.0, gamma=0.00001)
clf.fit(X_train, y_train) #This is where it gets stuck

【问题讨论】:

  • 你可以设置verbose=True让它定期报告模型训练,你可以设置max_iter来限制模型在拟合过程中的迭代次数。你gamma 的值也让我觉得非常小,默认是 1/n_features,所以在你的情况下,1/13=0.07。你也可以试试其他的内核和c值,不过verbose是个不错的入手方式

标签: python scikit-learn svm multiclass-classification


【解决方案1】:

你应该看看documentation

拟合时间至少与样本数量成二次关系,超过数万个样本可能不切实际

此外,由于您使用的是具有 7 个类的多类问题,并且因为

多类支持是根据一对一的方案处理的。

您正在训练 21(!) 个分类器,请参阅 here

文档建议:

对于大型数据集,请考虑改用 sklearn.linear_model.LinearSVCsklearn.linear_model.SGDClassifier,可能在 sklearn.kernel_approximation.Nystroem 转换器之后。

您是否考虑过以某种方式运行神经网络?

【讨论】:

  • 感谢您的回答。关于 SVM 本身,我设法使用 DTW 算法减小了帧的大小,然后在 39 个 mfcc 上应用了 SVM,与 SGD 分类器 (~30%) 或 LinearSVC (40%) 相比,它产生了更好的准确度 (62%)。我现在应该试试神经网络。
【解决方案2】:

作为 Quickbeam2k1 的回答细节,SVM 不能很好地扩展到这么多样本。

我建议尝试使用小型神经网络。一个多层感知器可能有 3-5 个隐藏层,每个层有 50 个神经元,应该是 13 波段 MFCC 和 7 个类别的良好起点。使用 scikit-learn,您可以使用 sklearn.neural_network.MLPClassifier

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 2014-09-17
    • 2016-02-05
    • 2015-11-11
    • 2023-04-09
    • 2021-04-19
    • 2012-12-06
    • 2013-06-12
    相关资源
    最近更新 更多