非线性支持向量机与核函数,支持向量机做预测Python代码
非线性支持向量机与核函数的参考文献:线性可分支持向量机与硬区间最大化,线性支持向量机与软区间最大化。
讨论非线性支持向量机和核函数的代码实现,具体推导见《统计学习方法》。
1.建立非线性可分离数据,仍然采用“线性”核。# importnumpyasnpimportmatplotlib . pyplotaspltimportsaborn;天生的。set配置模式导入seaborn.set样式的def plot ax=None import panda ASP dfromskneel。svmimportsvc # SVC类SVC(supportvectorclassifier),Plot _ support=true(:是2D SVC的定函数(分离超平面))(如果ax为none: ax=PLT。GCA) #plt.gca)来计算网格x=NP。Linspace(xlim[0],xlim[1],当前Axes对象axxlim将为其创建评估模型,30) y=NP。Linspace (ylim[1],ylim[1],30) NP.linspace x) #将两个一维数组转换成二维矩阵,返回一个二维数组xy=NP.vstack([x.ravel(,Y.ravel) T # np.vstack))堆叠矩阵p=model。决策函数(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)#从kle arn . d learn # data y=noise=. 1)clf=SVC(kernel= linear )。fit) x,
结论:
二维数据不能分为线性。如果正反例可以被一个多维超平面精确地划分,这个问题就叫做非线性可分问题。
2.解决问题。非线性问题很难解决。采用非线性变换,将非线性问题转化为线性问题。
3358www.Sina.com/的基本思想是通过非线性变换将输入空间对应到特征空间,将输入空间中的超曲面模型对应到核技巧。
特征空间中的超平面模型(支持向量机)具体配方请参考《统计学习方法》。
此时,具有核函数的非线性SVMs SVM的目标函数如下。
w()=1)
i=1 N i=1 N i j y i y j K ( x i,x j)I=1nI(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 1w()=21i=1n I=1nIj yi yj k(Xi,XJ)I=1nI(1)
分类函数公式:
f(x)=s I g n(I=1nIy 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=1nIyi k(Xi,x)b)(2)
核的充要条件是正定核,即k关于x的Gram矩阵是半正的。
常用内核函数:多项式核函数、fkdqb核函数、字符串核函数。
用基函数做核函数:计算数据集中每一点基函数的变换结果,让SVM算法从所有结果中筛选出最优解。
设置线性核变换为RBF(径向基函数)核,设置核模型的超级参数。
3.基于学生身高体重数据集的非线性可分分类器设计链接:https://pan.baidu.com/s/1Zh1SA-FNS_B4WVo4lD76Sg
提货代码:1234
#导入数据train _ data=PD . read _ excel( train data . xlsx )test _ data=PD . read _ excel( test data . xlsx )x _ test=NP . array(test _ data . iloc[:1: 3]) y _ test=NP。array (test _ data [gender]) y=NP。array(train _ data[ gender ])x=NP。数组(train _ data。iloc [:1: 3]) #采用rbf核心CLF=C=1E6)clf.fit(X,y)plt.scatter(X[:0],X[:1],c=y,s=50,cmap=秋)plot _ SVC _ decision _ function(clf)PLT . scatter(clf.support_vectors_[:0],clf . support _ vectors _[:1],s=300,lw=1,face colors= none );#计算精度打印(预测精度,clf.score(X_test,y_test))图标:
结果:
预测准确率为0.9 4。详细推导细节参考:【支持向量机原理(三)线性不可分支持向量机与核函数】
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。