训练 SVM 分类器需要多少时间?

Posted

技术标签:

【中文标题】训练 SVM 分类器需要多少时间?【英文标题】:How much time does take train SVM classifier? 【发布时间】:2013-08-12 11:29:54 【问题描述】:

我编写了以下代码并在小数据上进行了测试:

classif = OneVsRestClassifier(svm.SVC(kernel='rbf'))
classif.fit(X, y)

其中X, y(X - 30000x784 矩阵,y - 30000x1)是 numpy 数组。在小数据算法上效果很好,给我正确的结果。

但我在大约 10 小时前运行了我的程序……它仍在进行中。

我想知道需要多长时间,还是以某种方式卡住了? (笔记本电脑规格 4 GB 内存,Core i5-480M)

【问题讨论】:

所以呃...30000 维和 30000 X 784 点...我在机器学习方面工作的时间并不长,但这是一个非常大且高维的特征向量...我愿意花费这么长时间并不觉得太令人惊讶...您可以尝试减小尺寸以加快速度... @Roy 减少训练实例的数量将比核方法的降维更有效。 @MarcClaesen 必须相信你的话,我自己也不过是个新手。 【参考方案1】:

SVM 训练可以任意长,这取决于几十个参数:

C 参数 - 错误分类惩罚越大,过程越慢 内核 - 内核越复杂,进程越慢(rbf 是预定义的最复杂的) 数据大小/维度 - 同样的规则

一般来说,基本的 SMO 算法是O(n^3),因此在30 000 数据点的情况下,它必须运行与2 700 000 000 000 成正比的操作数,这确实是一个巨大的数字。你有什么选择?

把内核改成线性的,784个特征挺多的,rbf可以是多余的 降低特征的维度 (PCA?) 降低C 参数 在数据子集上训练模型以找到好的参数,然后在某个集群/超级计算机上训练整个模型

【讨论】:

在考虑真正的大问题时,内核计算时间通常不是问题。 RBF 和多项式之间的区别是无关紧要的。内核复杂性的唯一方面是线性与其他方面。此外,训练复杂度范围从O(n^2)(小C)到O(n^3)(大C)。第三,输入维度在整体复杂性中并不重要(这是训练实例数量的函数,而不是维度)。 谢谢。该参数 C 使算法工作得更慢,我没有考虑过。并且不知道 rbf 是最复杂的内核 - 但这是真的,当我在“poly”上更改内核时,它会在 2 小时内给出结果。 @Marc - 感谢 cmets。 RBF 和多项式之间存在巨大差异 - 不是因为核函数本身很复杂,而是因为诱导的 RHKS 是复杂的,这就是优化发生的地方。其次,O(n^3) 是上限,显然对于小 C 来说它更快。三维很重要,因为它在每个内核计算的成本中(不太重要),并且因为它参与了诱导 RHKS 复杂性的复杂性(更重要)

以上是关于训练 SVM 分类器需要多少时间?的主要内容,如果未能解决你的问题,请参考以下文章

使训练集产生无偏分类器的正例和负例的比例应该是多少?

如何利用opencv进行样本训练

从训练有素的分类器 python #Scikitlearn #SVM 进行预测

如何使用具有面部特征的 openCV 训练支持向量机(svm)分类器?

HanLP 基于SVM支持向量机 训练 文本分类

HanLP 基于SVM支持向量机 训练 文本分类