sklearn SVM 真的很慢

数据挖掘 Python 分类 scikit-学习 支持向量机
2022-03-01 08:13:28

我正在使用 sklearn SVM,但遇到了问题。

当我sklearn.SVM.SVC.fit()使用只有几个特性(< 10)的数据库运行该方法时,需要很长时间。这很奇怪,因为当我使用所有功能(> 100)对同一个数据库运行相同的方法时,只需要几秒钟。

我正在使用多项式内核,并且仅在度数> = 3时才会出现此问题。而且如果我只使用几个特征,但我在所有样本中添加 50 个带有 0 的特征,它工作正常也很奇怪!

我尝试了以下实验:

  • fit()具有所有功能和任何内核程度。工作正常。

  • fit()具有一些功能和内核度 <= 2。工作正常。

  • fit()具有一些功能和内核度> = 3。非常慢。

  • fit()内核度 = 3,一些特征,但在所有样本中添加了 50 个特征为 0。工作正常!!

我的问题是,我该如何解决这个问题?我添加 0 特征的技巧会影响分类吗?

1个回答

支持向量机试图找到一个以最大边距划分两个类别的超平面。因此这是一个优化问题。支持向量是位于支持超平面上的点。影响支持向量运行时复杂性的一个关键因素是松弛参数 C。松弛参数允许软边距和更好的泛化。支持向量的数量取决于我们允许的松弛量以及数据的分布方式。我们给 SVM 的 slack 越少,我们得到的支持向量就越少,相反,我们给它的 slack 越多,我们得到的支持向量就越多。

模型的复杂度之间也存在关系。模型越复杂,往往需要更多的支持向量。

简而言之,提供多少特征并不重要,SVM 的计算复杂度与支持向量的数量成线性关系。