非线性支持向量机与核函数参考文献:线性可分支持向量机与硬间隔最大化、线性支持向量机与软间隔最大化
本文讨论了非线性支持向量机和核函数的代码实现,具体推导见于《统计学习方法》
1 .构建非线性可分数据,仍然采用“linear”内核。 # importnumpyasnpimportmatplotlib.pyplotaspltimportseaborn; seaborn.set配置模式导入seaborn样式importpandasaspdfromsklearn.svmimportsvc # SVC类SVC(supportvectorclassifier )的def plot ax=None, plot _ support=true (:为用于二维SVC的确定函数(分离的超平面) ) (if ax is none : ax=PLT.GCA ) #plt.gca )来计算当前Axes对象axxlim 要为其创建评估模型的网格x=NP.Linspace(xlim[0],xlim[1],30 ) y=NP.Linspace (ylim[1],ylim [1],30 ) NP.linspace x ) #将两个一维数组转换为二维矩阵,并返回一个行和列的乘法运算的二维数组xy=NP.vstack([x.ravel (,Y.ravel ) T # np.vstack ) )在垂直方向上层叠矩阵p=model.decision_function(xy ).reshape ) x.shape ) #决策边界和边界ax.contour(X ) x、y、p、colors='k ', levels=[ '--']支持向量if plot _ support 3360 ax.scatter (model.support _ vectors _ [ :0 ], model.support_vectors alpha=0.4 ) ax.set_xlim(xlim ) ax.set_ylim ) ylim ) #构建可线性分离内核froms klearn.dlearn #数据y=noise=.1 ) clf=SVC(kernel='linear ' ).fit ) x,y ) PLT.Scatter ) x [ :0 ],x [ :1 ],c=y
结论:
二维数据不能划分为线性,如果能用多维的一个超平面准确地划分正负例子,这一问题就称为非线性可分问题。
2 .问题的解决非线性问题难以解决。 采取进行非线性变换,将非线性问题变换为线性问题的方法。
3358www.Sina.com/的基本思想是通过非线性变换将输入空间与特征空间对应起来,将输入空间内的超曲面模型与核技巧对应起来。
特征空间中的超平面模型(支持向量机)具体公式请参考《统计学习方法》。
此时,带核函数的非线性S V M SVM SVM的目标函数如下。
w()=1)
i = 1 N ∑ i = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i (1) W(alpha)=frac{1}{2} sum_{i=1}^{N} sum_{i=1}^{N} alpha_i alpha_j y_i y_jK(x_i,x_j)-sum_{i=1}^{N} alpha_i tag 1 W(α)=21i=1∑Ni=1∑NαiαjyiyjK(xi,xj)−i=1∑Nαi(1)分类决策函数式:
f ( x ) = s i g n ( ∑ i = 1 N α i ∗ y i K ( x i , x ) + b ∗ ) (2) f(x)=sign(sum_{i=1}^{N}alpha_i^{*} y_i K(x_i,x) + b^{*}) tag 2 f(x)=sign(i=1∑Nαi∗yiK(xi,x)+b∗)(2)
核函数的充要条件为正定核,就是K关于X的Gram矩阵是半正定的。
常用核函数:多项式核函数、fkdqb核函数、字符串核函数。
使用基函数做核函数:计算基函数在数据集上每个点的变换结果,让SVM算法从所有结果中筛选出最优解。
将线性核转变为RBF(径向基函数)核,设置kernel模型超参数即可。 3. 基于学生身高-体重数据集的非线性可分分类器设计
链接:https://pan.baidu.com/s/1Zh1SA-FNS_B4WVo4lD76Sg
提取码:1234
图示:
结果:
参考文献:【支持向量机原理(三)线性不可分支持向量机与核函数】