首页 > 编程知识 正文

向量机和支持向量机,Python支持向量机线性核函数

时间:2023-05-06 01:27:02 阅读:173881 作者:384

非线性支持向量机与核函数参考文献:线性可分支持向量机与硬间隔最大化、线性支持向量机与软间隔最大化

本文讨论了非线性支持向量机和核函数的代码实现,具体推导见于《统计学习方法》

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(α)=21​i=1∑N​i=1∑N​αi​αj​yi​yj​K(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∗​yi​K(xi​,x)+b∗)(2)
核函数的充要条件为正定核,就是K关于X的Gram矩阵是半正定的。
常用核函数:多项式核函数、fkdqb核函数、字符串核函数
使用基函数做核函数:计算基函数在数据集上每个点的变换结果,让SVM算法从所有结果中筛选出最优解。
将线性核转变为RBF(径向基函数)核,设置kernel模型超参数即可。

3. 基于学生身高-体重数据集的非线性可分分类器设计

链接:https://pan.baidu.com/s/1Zh1SA-FNS_B4WVo4lD76Sg
提取码:1234

# 导入数据train_data = pd.read_excel('traindata.xlsx')test_data = pd.read_excel('testdata.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.array(train_data.iloc[:,1:3])# 采用rbf核clf = SVC(kernel='rbf', C=1E6)clf.fit(X, y)plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')plot_svc_decision_function(clf)plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=300, lw=1, facecolors='none');# 计算准确率print('预测准确率',clf.score(X_test, y_test))

图示:

结果:

预测准确率 0.9 4. 详细推导细节

参考文献:【支持向量机原理(三)线性不可分支持向量机与核函数】

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。