【问题标题】:How much time does take train SVM classifier?训练 SVM 分类器需要多少时间?
【发布时间】: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 必须相信你的话,我自己也不过是个新手。

标签: python numpy machine-learning svm


【解决方案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 复杂性的复杂性(更重要)
猜你喜欢
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 2021-02-22
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多