svm核函数

版权声明:本文为博主原创文章,转载请标明原始博文地址。 https://blog.csdn.net/yuanlulu/article/details/81048496

svm的分类

根据数据可分的情况,svm分为3种:
- 线性可分支持向量机(没有噪音和异常数据,分隔超平面可以在训练数据集做到100%准确)
- 线性支持向量机(有噪音和异常数据,分隔超平面无法在训练数据集做到100%准确)
- 非线性支持向量机(数据集不是线性可分的,必须借助升维)

上面三种svm由简到繁,其实所有的svm都可以可以统一写为带核函数的推理形式。前两种情况下可以选择不用核函数(也叫线性核函数),最后一种情况下可以选择高斯核、多项式核等核函数

常用的核函数

最终,所有的数据分布情况都可以使用带核函数的形式来做前向预测:
image

  • 线性核:没有核函数,也就相当于线性核函数。
  • 多项式核函数
  • 高斯核函数

在sklearn里面,这三个核函数需要不同的超参。
共同需要的超参是C,惩罚系数

clf_linear = svm.SVC(C=1.0, kernel='linear')
clf_poly = svm.SVC(C=1.0, kernel='poly', degree=3)
clf_rbf = svm.SVC(C=1.0, kernel='rbf', gamma=0.5)

degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。

gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features

coef0 :核函数的常数项,默认为0。对于‘poly’和 ‘sigmoid’有用。

怎么选择核函数

以下内容整理自吴恩达的视频课程。

当特征很多,样例很少的时候(n很大,m很小),使用核函数容易过拟合,此时经常选择线性核函数。

在使用核函数之前,最好将特征缩放到相同的范围内。否则训练的效果会很差。

n代表特征数量,m代表样本数量
如果n相对m大很多,建议使用逻辑回归或者svm线性核。否则容易过拟合

如果n很小,m比它大,但是大的不是特别多(1000比10000这种),建议使用高斯核
如果m相对n大很多,建议创造一些新特征,然后使用逻辑回归或者使用线性核svm。因为此时高斯核运算会很慢。

另外,神经网络可以在大部分场景下都工作的很好,但是训练起来会很慢

猜你喜欢

转载自blog.csdn.net/yuanlulu/article/details/81048496