我遇到如下问题:我在一个包含大约46500个观测值的训练集上运行scikit-learn库的SVR,运行时间已经超过六个小时,直到现在。
我使用的是线性核函数。
def build_linear(self): model = SVR(kernel='linear', C=1) return model
我已经尝试将”C”值在1e-3到1000之间调整,但没有任何变化。
多项式核函数大约在5分钟内就能运行完,但我需要这些值进行评估,不能跳过这一部分…
有没有人有加速的建议?
非常感谢!
回答:
SVM的扩展性随着样本数量的增加而变差是众所周知的!
与其使用带有线性核函数的SVR,不如使用LinearSVR,或者对于大数据集使用SGDClassifier
LinearSVR在计算能力上受到更多限制(不支持非线性核函数),而这些更受限制的算法通常有更多假设,并利用这些假设来加速计算(或节省内存)。
SVR基于libsvm,而LinearSVR基于liblinear。两者都是经过充分测试的高质量实现。
(值得一提的是:在这种一般情况下,不要浪费时间等待6个小时。可以对数据进行子抽样,尝试从小到大的样本,推断运行时间或问题。编辑:看起来你已经这样做了,很好!)。