14

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

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

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

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

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

4

1 回答 1

38

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

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

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

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