tom*_*mas 5 python runtime svm scikits scikit-learn
我正在使用scikit-learn来构建一些支持SVM的预测模型.我有一个包含大约5000个示例和大约700个功能的数据集.我在我的训练集上使用18x17网格搜索进行5次交叉验证,然后使用我的测试集的最佳参数.这些运行时间比我预期的要长很多,我注意到以下几点:
1)一些单独的SVM训练迭代似乎只需要一分钟,而其他人可能需要长达15分钟.预计会有不同的数据和参数(C和gamma,我正在使用rbf内核)?
2)我正在尝试在Windows上使用64位python来利用额外的内存,但我的任务管理器中所有的python进程似乎都是1 gig,我不知道这是否与运行.
3)我之前使用的是32位并在大约相同的数据集上运行,我记得(虽然我没有保存结果)但是速度要快得多.我使用第三方构建的scikit-learn用于64位窗口,所以我不知道在32位python上尝试这个是否更好?(来源http://www.lfd.uci.edu/~gohlke/pythonlibs/)
关于如何减少运行时的任何建议都将非常感激.我想减少网格搜索的搜索空间会有所帮助,但由于我不确定最佳参数的范围,我想保持它尽可能大.如果还有更快的SVM实现,请告诉我,我可以试试.
附录:我回去试图再次运行32位版本.由于某种原因,速度要快得多.花了大约3个小时到达64位版本在16小时内到达的地方.为什么会有这样的差异?
1)这是预期的:小伽马和小正则化将选择更多的支持向量,因此模型将更复杂且更长.
2)有一个cache_size参数将被传递给底层的libsvm库.但是,根据您的数据,libsvm可能会也可能不会使用所有可用的缓存.
3)不知道.我在两个平台上运行更多定时实验,请在项目邮件列表上报告您的发现.这可能值得进一步调查.
首先检查您是否规范了您的功能(例如,如果您的数据是密集的numpy数组,则通过方差删除均值和比例功能).对于稀疏数据,只需缩放功能(例如,对文本数据使用TF-IDF变换).请参阅doc 的预处理部分.
然后你应该从一个粗网格开始(有大对数步骤),比如一个3x3网格,然后通过重新运行该区域的3x3网格来关注有趣的区域.通常,C x gamma SVM参数网格非常平滑.
| 归档时间: |
|
| 查看次数: |
3064 次 |
| 最近记录: |