【问题标题】:SVM rank works only on tiny datasetsSVM rank 仅适用于小型数据集
【发布时间】:2014-12-03 05:38:49
【问题描述】:

我正在使用svm-rank

在小数据集上运行 svm_rank_learn 时:

训练集属性:3 个特征,12 个排名,596 个示例

运行在几秒钟内完成,我得到了一个有效的模型。但是当我用了一下larger dataset:

训练集属性:3 个特征,30 个排名,1580 个示例

在第 29 次迭代中,运行停滞了几个小时。 这很奇怪,因为文档指出 svm-rank “在排名数量(即查询)中线性扩展”。

我的数据集或格式有什么问题?

【问题讨论】:

  • 我可以重现这个问题。但在我的机器上,它在第 24 次迭代时停止。您可以尝试使用应该提供相同输出的参数运行 svm-light 代码。看看它是否卡在那里。
  • 最好包含您运行的确切命令,包括任何配置参数。

标签: machine-learning classification svm ranking svmlight


【解决方案1】:

但是,由于我不想花超过一个下午的时间来编写 SVMrank,所以我只实现了一个简单的分离预言,它在每个排名中项目数的二次方(不是 O[ [Joachims, 2006] 中描述的 k*log k] 分离预言)。 http://www.cs.cornell.edu/people/tj/svm_light/svm_rank.html

您或多或少地将示例数量增加了 3。因此,您预计时间会增加 9 倍。

[S]因为文档指出 svm-rank “在排名数量(即查询)中线性扩展”

您将排名数量也扩大了 2 倍多一点。因此,将这两者结合起来,您预计训练时间会延长大约 20 倍。

这并不能解释为什么它会从几秒钟变成几个小时。

【讨论】:

    【解决方案2】:

    您的特征值属于不同的范围。尝试跨样本缩放特征以使每个特征的均值和单位方差为零。它还有助于标准化每个样本中的特征。这两个步骤极大地加快了计算速度。

    Scikit-learn 对数据预处理有很好的介绍,它还提供了可以轻松完成此操作的方法,请访问 http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2015-06-29
      • 1970-01-01
      • 2016-01-31
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2013-06-18
      • 2015-10-24
      相关资源
      最近更新 更多