通过并行处理加速 Sklearn 中的支持向量回归
Speeding Up Support Vector Regression in Sklearn via Parallel Processing
我正在尝试对 sklearn 中的一些文本数据执行支持向量回归。我有大约 10,000 个文档,我已将其转换为大约 30,000 个特征。标签是每个文档的作者出生的年份(分布在 1900 年到 2016 年之间)。
我最初在 sklearn 中尝试了 SVR class,但它花了很长时间。因为我不知道它是否取得了任何进展,所以我决定改用 SGDRegressor,它有一个很好的选项来提供一些中间输出。现在可以看出算法是有进步的,但是收敛的很慢。我该怎么做才能加快速度?一种选择是使用步长/学习率,我现在会这样做,但我想知道是否有任何方法可以使用并行处理来加快每一步的速度。我可以看到 SGDClassifier class 有一个 n_jobs 选项来利用多个处理器,但我没有看到 SGDRegressor class 的类似选项。这让我觉得很奇怪,因为 SGD 似乎可以从并行化中受益。有没有我可以从中受益的库,或者关于在 sklearn 中加速 SVM 的想法?
您的特征矩阵的维度显然太大且稀疏。 SVR 和 SGD 都不能有效地拟合如此大的矩阵。一般的经验法则,当特征数量超过示例数量时,模型容易过度拟合。
我建议使用 TruncatedSVD 来降低矩阵的维度并训练 SVR。
在这里我无耻地宣传自己的回答:Working with, preparing bag-of-word data for Regression
我正在尝试对 sklearn 中的一些文本数据执行支持向量回归。我有大约 10,000 个文档,我已将其转换为大约 30,000 个特征。标签是每个文档的作者出生的年份(分布在 1900 年到 2016 年之间)。
我最初在 sklearn 中尝试了 SVR class,但它花了很长时间。因为我不知道它是否取得了任何进展,所以我决定改用 SGDRegressor,它有一个很好的选项来提供一些中间输出。现在可以看出算法是有进步的,但是收敛的很慢。我该怎么做才能加快速度?一种选择是使用步长/学习率,我现在会这样做,但我想知道是否有任何方法可以使用并行处理来加快每一步的速度。我可以看到 SGDClassifier class 有一个 n_jobs 选项来利用多个处理器,但我没有看到 SGDRegressor class 的类似选项。这让我觉得很奇怪,因为 SGD 似乎可以从并行化中受益。有没有我可以从中受益的库,或者关于在 sklearn 中加速 SVM 的想法?
您的特征矩阵的维度显然太大且稀疏。 SVR 和 SGD 都不能有效地拟合如此大的矩阵。一般的经验法则,当特征数量超过示例数量时,模型容易过度拟合。
我建议使用 TruncatedSVD 来降低矩阵的维度并训练 SVR。
在这里我无耻地宣传自己的回答:Working with, preparing bag-of-word data for Regression