一 支持向量机(SVM)基本概率
1.1 定义
SVM:寻找到一个超平面使样本分成两类,并且间隔最大
1.2 硬间隔和软间隔
(1)硬间隔
严格地让所有实例都不在最大间隔之间,并且位于正确的一边
问题:
它只在数据是线性可分离的时候才有效;其次,它对异常值非常敏感
(2)软间隔
尽可能在保持最大间隔宽阔和限制间隔违例之间找到良好的平衡
超参数C:C值越小,则间隔越宽,但是间隔违例也会越多
1.3 支持向量机流程
- 对样本数据进行归一化
- 应用核函数对样本进行映射(最常采用和核函数是RBF和Linear,在样本线性可分时,Linear效果要比RBF好)
- 用cross-validation和grid-search对超参数进行优选
- 用最优参数训练得到模型
- 测试
二 支持向量机API
2.1 SVC
svm.SVC(C=1.0, kernel=‘rbf’, degree=3,coef0=0.0,random_state=None)
C: 惩罚系数,C越大,对误分类的惩罚增大,这样会出现训练集的准确率很高,但泛化能力弱,容易导致过拟合。C值小,对误分类的惩罚减小,容错能力增强,泛化能力较强,但也可能欠拟合。
kernel: 核函数类型,参数选择有RBF, Linear, Poly, Sigmoid或者自定义一个核函数。默认的是"RBF":高斯核函数;Linear:线性核函数,Poly:多项式核,Sigmoid:双曲正切函数tanh核。
degree:当kernel='poly’时,表示选择的多项式的最高次数,默认为三次多项式;该参数只对’poly’有用。
coef0: 核函数常数值(y=kx+b中的b值),只有‘poly’和‘sigmoid’核函数有,默认值是0。
from sklearn import svm
estimator = svm.SVC()
estimator.fit(x, y)
2.2 NuSVC
svm.NuSVC(nu=0.5)
SVC和NuSVC方法基本一致,唯一区别就是损失函数的度量方式不同,NuSVC中的nu参数和SVC中的C参数
nu取值在(0,1)之间,默认是0.5
from sklearn import svm
estimator = svm.NuSVC()
estimator.fit(x, y)
2.3 LinearSVC
svm.LinearSVC(penalty=‘L2’, loss=‘squared_hinge’, dual=True, C=1.0)
penalty:正则化参数,L1和L2两种参数可选,仅LinearSVC有。
loss:损失函数,有hinge和squared_hinge两种可选,前者又称L1损失,后者称为L2损失,默认是squared_hinge,其中hinge是SVM的标准损失,squared_hinge是hinge的平方
dual:是否转化为对偶问题求解,默认是True。
C:惩罚系数
三 支持向量机优缺点
3.1 优点
(1)在高维空间中非常高效;
(2)即使在数据维度比样本数量大的情况下仍然有效;
(3)在决策函数(称为支持向量)中使用训练集的子集,因此它也是高效利用内存的;
(4)通用性:不同的核函数与特定的决策函数对应;
3.2 缺点
(1)如果特征数量比样本数量大得多,在选择核函数时要避免过拟合;
(2)对缺失数据敏感;
(3)对于核函数的高维映射解释力不强