列车SVM分类器需要多长时间?

Il'*_*nin 11 python numpy machine-learning svm

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

classif = OneVsRestClassifier(svm.SVC(kernel='rbf'))
classif.fit(X, y)
Run Code Online (Sandbox Code Playgroud)

其中X, y (X - 30000x784矩阵,y - 30000x1)是numpy数组.小数据算法运行良好,给我正确的结果.

但我大约10个小时前运行我的程序......它仍在进行中.

我想知道需要多长时间,或者它会以某种方式陷入困境?(笔记本电脑规格4 GB内存,酷睿i5-480M)

lej*_*lot 31

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

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

一般来说,基本的SMO算法是O(n^3),所以在30 000数据点的情况下,它必须运行与2 700 000 000 000真正数量相当的操作数.你有什么选择?

  • 将内核更改为线性内核,784功能相当多,rbf可以是多余的
  • 减少功能的维度(PCA?)
  • 降低C参数
  • 在数据子集上训练模型以找到好的参数,然后在一些集群/超级计算机上训练整个模型

  • 当考虑真正的大问题时,内核计算时间通常不是问题.RBF与多项式之间的差异是无关紧要的.内核复杂性的唯一方面是线性与其他方面.另外,训练复杂度范围从"O(n ^ 2)"(smalll"C")到"O(n ^ 3)"(大"C").第三,输入维度在整体复杂性方面并不重要(这与训练实例的数量有关,而不是维度). (3认同)