Python 2.7 在python-scikit-learn中,RBF核的性能比SVM中的线性性能差得多

Python 2.7 在python-scikit-learn中,RBF核的性能比SVM中的线性性能差得多,python-2.7,machine-learning,scikit-learn,svm,nonlinear-functions,Python 2.7,Machine Learning,Scikit Learn,Svm,Nonlinear Functions,我正在使用SVM执行一些机器学习任务。我怀疑数据是非线性的,所以我还包括了RBF核。我发现带RBF核的SVM比线性SVM差得多。我想知道我的分类器参数规范是否有问题 我的代码如下: from sklearn.svm import LinearSVC from sklearn.svm import SVC svm1 = LinearSVC() # performs the best, similar to logistic regression results which is expected

我正在使用SVM执行一些机器学习任务。我怀疑数据是非线性的,所以我还包括了RBF核。我发现带RBF核的SVM比线性SVM差得多。我想知道我的分类器参数规范是否有问题

我的代码如下:

from sklearn.svm import LinearSVC
from sklearn.svm import SVC

svm1 = LinearSVC() # performs the best, similar to logistic regression results which is expected
svm2 = LinearSVC(class_weight="auto") # performs somewhat worse than svm1
svm3 = SVC(kernel='rbf', random_state=0, C=1.0, cache_size=4000, class_weight='balanced') # performs way worse than svm1; takes the longest processing time
svm4 = SVC(kernel='rbf', random_state=0, C=1.0, cache_size=4000) # this is the WORST of all, the classifier simply picks the majority class

使用RBF,尝试调整
C
gamma
参数。Scikit learn的网格搜索将帮助您

下面是一个让您开始学习的示例:

svc = SVC(...)
params = {"C":[0.1, 1, 10], "gamma": [0.1, 0.01, 0.001]}
grid_search = GridSearchCV(svc, params)
grid_search.fit(X,y)

下面的文章对于支持向量机用户来说是一个很好的指南

支持向量分类实用指南

简言之,要让SVM正确运行,有三点至关重要

  • (1) 特征准备(特征缩放、特征分类)
  • (2) 参数调整(粗粒度和细粒度交叉验证)
  • (3) 内核选择(功能与实例)

(3)的基本思想是在#features>>#实例中选择线性内核。对于小的#实例,具有非线性核的支持向量机很容易过拟合

您是对的,通过转动C和gamma,性能得到了极大的提高。我想知道支持向量机(带非线性核)的性能是否不比带线性核的支持向量机好,这是否意味着类是线性可分离的?试着调整你的线性支持向量机。在高维空间中,线性支持向量机通常表现得更好。低维空间,RBF做得更好。在高维空间,你指的是特征的数量,对吗?你能解释或参考为什么在高维中,线性支持向量机做得更好吗?不是尺寸越大,用直线/平面分开就越困难吗?是的。我所说的尺寸是指特征的数量。在高维空间中,点之间的距离变得不那么有意义,这就是为什么内核不那么有意义。看见同样,在高维空间中,通常更容易创建线性决策边界。