训练 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
成正比的操作数,这确实是一个巨大的数字。你有什么选择?
C
参数
在数据子集上训练模型以找到好的参数,然后在某个集群/超级计算机上训练整个模型
【讨论】:
在考虑真正的大问题时,内核计算时间通常不是问题。 RBF 和多项式之间的区别是无关紧要的。内核复杂性的唯一方面是线性与其他方面。此外,训练复杂度范围从O(n^2)
(小C
)到O(n^3)
(大C
)。第三,输入维度在整体复杂性中并不重要(这是训练实例数量的函数,而不是维度)。
谢谢。该参数 C 使算法工作得更慢,我没有考虑过。并且不知道 rbf 是最复杂的内核 - 但这是真的,当我在“poly”上更改内核时,它会在 2 小时内给出结果。
@Marc - 感谢 cmets。 RBF 和多项式之间存在巨大差异 - 不是因为核函数本身很复杂,而是因为诱导的 RHKS 是复杂的,这就是优化发生的地方。其次,O(n^3) 是上限,显然对于小 C 来说它更快。三维很重要,因为它在每个内核计算的成本中(不太重要),并且因为它参与了诱导 RHKS 复杂性的复杂性(更重要)以上是关于训练 SVM 分类器需要多少时间?的主要内容,如果未能解决你的问题,请参考以下文章
从训练有素的分类器 python #Scikitlearn #SVM 进行预测