不是人工智能的算法_ 支持向量机是人工智能领域中的重要算法模型,如何使用?

人工智能专栏建议

正文

读取和预处理数据

目前有一个名为ex6data1.mat的文件名。 此文件的格式不是python格式,而是matlib格式,但python可以读取相关的内容。

import scipy.ioassiomrat = SiO.load mat ( ' ex6data1. mat ' ) #如何读取mat数据print ( mat.keys ( ) )要查看mat文件中的所有变量,请使用scipy.io方法读取mat文件

dict_keys (

如果您将pandas转换为DataFrame类型,并指定x1、x2为资料栏名称,则data为

不是人工智能的算法

此时的data为DataFrame型,这是两者的不同,此时的data为

这相当于预处理。 我们想要的数据集,有两个特征x1和x2,还有一个标签y。 那么,就这样吧。 现在可以使用svm进行培训了

模型训练

在训练之前,画出我们当前数据集的图

fig,ax = PLT.subplots ( fig size = ( 8,6 ) ) ax.scatter ( data )

发现这大致是数据的分布,然后使用sklearn库封装的svm算法来训练数据。

svc1 = clf = svm.SVC(C=10,kernel='linear ' )

SVC1. fit (数据)

通过观察各类预测的可靠性可以明确这一点。 这是此点与超平面之间的距离函数。

各样本的决定函数值

我们接下来画画,这幅画不是用正负的样本,而是用每个样本的决定函数值来画。 画画的代码如下所示

fig,ax = PLT.subplots ( fig size = ( 8,6 ) )

ax.scatter (数据)

下一个任务是绘制分割超平面和支撑超平面。 首先,让我们分析一下这应该怎么画。 根据这个图的数据,我们有两个特征x1和x2,我们的分割超平面的方程式是w1x1 w2x2 b=0,我们可以把x1看作参数,把x2看作变量,因此我们可以在这个图上画直线,所以我们的方程式发生了变化

所以,我们只要建立这个方程式,纵轴x2就可以了。 x1我们可以随机制作,只要使用绘画工具进行绘画就ok。 代码如下所示

w=svc1.coef_

接下来,将描述支持超平面(这里注定的是支持超平面实际上是y=w1x1 w2x2 b-1还是y=w1x1 w2x2 b 1)。 但是,此处使用x2作为要因变量,因此现在无法考虑该问题。 因为现在没有使用因素变量y。

我们知道分割超平面和支撑超平面是平行的关系,所以我们先求出切片b,因为我们的斜率-w1/w2已经存在(切片的差异不是1,这是y=。 的双曲馀弦值。 混淆。 支持超平面的方程式可以是y=-w1/w2x b。 此时,因为b=y w1/w2x,所以只要找到这两个支持超平面上的任意点就可以得到b,经常找到支持超平面上的点,支持矢量就支持超平面上。

supportb = svc1.support_vectors_

所有代码:

importnumpyasnpimportpandaspdfromsklearnimportsvmimportseabornassimportscipy.ioassioimportmatplottlib.pyplotasplt # 数据预处理mat = SiO.load mat ( ' ex6data1. mat ' ) #如何读取mat数据print(mat.keys())#mat文件中的所有变量data=pd.dataframe(mat.get('x ' ),columns=['X1 ' ) ' X2'])data['y'] = mat.get('y')#绘制我们的所有数据时,数据的大致分布为fig,ax = PLT.subplots ( fig size = ( 8,6 ) ) ax.scatter ( data [ ' x1 ' )、data['X2'] ' )、s c=data['y']、cmap = ' reds ' ' ax.set _ title ( ' raw data ' ) ax.set _ xlabel ( ' x1 ' ) ax.set _ yl bel ( ' x2 ' )将自己的数据svmsvc1= svm.SVC(C=10, kernel = ' linear ' )适合SVC1. fit ( data [ [ ' x1',' x2' ] )和data['y'])#训练组精度accuracy=svc1.score(data[['X1',' x2' ], data['y'])#训练设定精度#分割超平面的直线w = SVC1. coef _ [0] # WB = SVC1. intercept _ [0] # bw1 = w [0] # w1w2= w [1] # w2x1= NP.linspace (-5, 5)#随机生成1这是因为x1的连续性x2=-w1/w2*x1-b/w2#按照上式,支持x2#超平面的直线a =-w [0]/w [1] supportb = SVC1. support _ vectors _ [0] #第一个支持向量YY _ down = a * x1( supportb = SVC1. support _ vectors _ [0] ) - a * supportb [0] ) supportb = SVC1. support _ vectors _ [-2 ] #最后一个支持向量YY _ up = a * x1 ( supportb [1]-a * supportb [0] ) #这三条直线plt.plot(x1, x2) PLT.plot ( x1) YY _ down ) PLT.plot ( x 1,yy_up)plt.show()#决策值data [ ' SVM1confidence ' ] = SVC1. decision _ function ( data [ ' x1',' X2']])# )返回到决策值 ax = PLT.subplots ( fig size = ( 86 ) ) ax.scatter ( data [ ' x1 ]、data['X2']、s=50, c=data['SVM1 Confidence']、cmap = ' rdbu ':ax.set _ title ( ' SVM ( c =1) decision confidence ' ) w = SVC1. coef _ [0] b = SVC1. intercept _ [0] w1= w [0] w2= w [0]

大家都在看

相关专题