SVM排名仅适用于微小的数据集



我使用的是svm秩。

在小型数据集上运行svm_rank_learn时:

训练集属性:3个功能,12个排名,596个示例

几秒钟后跑步结束,我得到了一个有效的模型。但当我使用更大的数据集时:

训练集属性:3个功能,30个排名,1580个示例

在迭代29中,运行被阻塞了几个小时。这很奇怪,因为文档中指出svm排名"在排名(即查询)的数量上呈线性变化"。

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

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

您或多或少地将示例的数量增加了3个。所以,你可以预计时间会增加9倍。

[S] 由于文件指出svm排名"在排名(即查询)数量上呈线性扩展"

你也可以将排名的数量增加2倍多一点。所以,把这两者结合起来,你预计训练需要大约20倍的时间。

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

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

Scikit-learn对数据预处理有一个很好的介绍,它还提供了可以轻松做到这一点的方法http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing.

最新更新