(1)分类
(2)回归
分类就是通过决策边界来将不同的数据分开,如下图的二分类问题,在决策边界(蓝色直线)右侧的为一类,在决策边界左侧的为一类。可以看到决策边界是不唯一的,这就是我们通常所说的不适定性问题。
逻辑回归算法解决不适定性问题:定义概率函数(sigmod函数),建模使cost函数最小-----得到最佳的决策边界。
SVM算法解决不是定性问题:完全由训练数据集决定。
SVM要最大化margin,即:使d最大,d为距离决策边界最近的点到决策边界的距离。
补充知识:点到直线的距离(高维空间中为点到平面的距离)
上图中,有两条决策边界A,B;
决策边界A(对应于hard-SVM)将训练数据完全正确的进行了分类,但是泛化能力很弱(红点和蓝点距离决策边界都很近,当进来的新的数据点在决策边界附件时,很容易被分错)
决策边界B(对应于Soft-SVM)虽然把训练数据集中的一个蓝点归到了红点那一类,但是具有较强的泛化能力。(因为决策边界B距离蓝红点的距离都比较远)实际中,我们主要关注的是对新来的(即我们要预测的)数据的预测能力,因此,往往我们会选择决策边界B。
另外,点“outer”可能是一个极度特殊的点;也有可能是我们数据的标签错误。
更糟糕的:在二维空间中,有时不能用一条直线将训练数据进行完全正确的分类,即数据是线性不可分的(如下图所示),此时只能用Soft-SVM。
类比二项式回归的目标函数,我们也可把目标函数中的第二部分看作正则项,同正则化的原理相同,都是让模型对一些特殊的点不那么敏感,有一定的容错能力,增强泛化效果。
但注意:和的形式相同,但意义却不同, : margin的宽松距离,而是特征前边的权重。
C的位置也可以加在第一项的前边,但含义是一样的。
在这里,C越大,容错越小。
(1) 载入鸢尾花数据集中的前两类的前两个特征(即为了可视化,处理简单的有两个特征的二分类问题)
(2)首先,和KNN一样,涉及到距离,要做数据的标准化处理
如下图所示,特征1和特征2的数值不在一个量级上,这样划分出来的决策边界就可能会受量级较高的特征的影响较大。
具体地,在程序中:
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC(SVC: support vector classifier)
note参数:
(3)绘制决策边界
利用LinearSVC的Attributes: coef_ 和 intercept_ 来绘制margin.
Note:
具体程序见:sklearn_SVM_plot_decision_boundary.ipynb
高斯核函数与高斯函数的关系:
具体程序见:RBFKernel.ipynb
数据集如下图所示
即用polynormal的方式先对数据转换成高维的,使得样本有多项式项的特征,然后再用LinearSVC对样本进行分类。
def polylinearSVC(degree, C)
return Pipline([(“poly”, PolynomialFeature(degree=2)),
( “std_Scaler”, StandardScaler()),
(“linearSVC”, LinearSVC (C = C))
])
def polynomialkernelSVC(degree, C)
return Pipline([(
( “std_Scaler”, StandardScaler()),
(“SVC”, SVC (kernel = “poly”, degree = degree, C=C))
])
def RbfkernelSVC(gamma, C)
return Pipline([(
( “std_Scaler”, StandardScaler()),
(“SVC”, SVC ( gamma = gamma,C=C))
])
Note: SVC中参数kernel 默认的为 “rbf”
从程序的运行结果来看,gamma越大,训练的模型会过拟合;gamma越小,训练的模型会欠拟合。
具体程序见:polySVM_kernelPolysvm.ipybb
sklearn_svm_gamma.ipynb
From sklearn.svm import LinearSVR, SVR
SVR: support vector regression
具体程序见:linearSVR_SVR.ipynb
注意两对对应函数:
|
分类 |
回归 |
解决线性问题 |
LinearSVC |
LinearSVR |
解决非线性问题 |
SVC |
SVR |
当然:在样本加上多项式特征时,也可用LinearSVC和LinearSVR 来解决非线性问题。