我正在用Python构建一些预测模型,并且一直在使用scikits learn的SVM实现.它真的很棒,易于使用,而且速度相对较快.
不幸的是,我开始受到运行时的限制.我在一个大约4 - 5000的完整数据集上运行一个rbf SVM,具有650个功能.每次运行大约需要一分钟.但是通过5倍交叉验证+网格搜索(使用粗到细搜索),对于我手头的任务来说,它有点不可行.那么一般来说,人们对可以在Python中使用的最快SVM实现方面有什么建议吗?那或者任何加速我建模的方法?
我听说过LIBSVM的GPU实现,看起来它可以工作.我不知道Python中可用的任何其他GPU SVM实现,但它肯定会对其他人开放.此外,使用GPU会显着增加运行时间吗?
我还听说有一些方法可以通过在scikits中使用线性SVM +特征映射来近似rbf SVM.不确定人们对这种方法的看法.同样,使用这种方法的任何人都是运行时间的显着增加吗?
提高程序速度的所有想法都是最受欢迎的.
我正在使用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小时内到达的地方.为什么会有这样的差异?
有没有办法将python数组导出为SVM光格式?
我在熊猫中旋转时遇到了一些麻烦。dataframe我正在处理的(日期、位置、数据)如下所示:
dates location data
date1 A X
date2 A Y
date3 A Z
date1 B XX
date2 B YY
Run Code Online (Sandbox Code Playgroud)
基本上,我试图旋转位置以最终得到如下数据框:
dates A B C
date1 X XX etc...
date2 Y YY
date3 Z ZZ
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我进行透视时,索引(相当于原始日期列)不会改变,我得到:
dates A B C
date1 X NA etc...
date2 Y NA
date3 Z NA
date1 NA XX
date2 NA YY
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题以获得我正在寻找的数据框格式?
我目前这样称呼 Pivot:
df.pivot(index="dates", columns="location")
Run Code Online (Sandbox Code Playgroud)
因为我有一组数据列,我想要旋转(不想将每个列都列为参数)。我相信默认情况下枢轴会枢轴数据框中的其余列。谢谢。