昨天介绍完支持向量机(Support Vector Machines)和SMO算法,今天就要来实战这个方法,当然因为之前有说要用二维图去做示范,所以先用matplotlib建立两个维度的散点图,程序如下:
import matplotlib.pyplot as plt
import numpy as np
#label1资料 第3维为类别
label1_data=np.array([[75,-15,1],[81,12,1],[71,-9,1],[86,20,1],[40,-20,1],[81,6,1],[84,-2,1],[81,15,1],[78,4,1],[74,-1,1]])
x_label1=[label1_data[i][0] for i in range(len(label1_data))]
y_label1=[label1_data[i][1] for i in range(len(label1_data))]
#label2资料 第3维为类别
label2_data=np.array([[35,19,-1],[30,25,-1],[23,2,-1],[36,17,-1],[3,-8,-1],[31,2,-1],[21,-7,-1],[8,-27,-1],[16,-12,-1],[59,20,-1]])
x_label2=[label2_data[i][0] for i in range(len(label2_data))]
y_label2=[label2_data[i][1] for i in range(len(label2_data))]
plt.scatter(x_label1,y_label1)
plt.scatter(x_label2,y_label2)
plt.show()
如图:
好,接下来,依照SVM公式:
这边我们在找最佳解问题,采用拉格朗日乘数法:
所以就会变成
所以我们要求这个极值(对系数做偏导)
而把上述当成条件并带回:
最後要再求:
然後现在把SMO算法带入(为了求a(就可以求到w)和b)
第一步:计算误差:
因为
而
所以
起始我们会设定a_j为0,而b也设定为0; y_i为真实类别
另外x_i为资料特徵,但x_i矩阵会长这样
但是numpy格式资料
所以有转置地方会刚好反过来,程序如下:
#合并资料
full_label_data=np.vstack((label1_data,label2_data))
#取出x特徵
full_label_data_x=np.mat(full_label_data[:,[0,1]])
#取出y特徵
y=np.array([full_label_data[i][2] for i in range(len(full_label_data))])
#初始a,b
a=np.zeros((1,20))
b=0
#第一步:计算误差Ei
for i in range(len(full_label_data)):
fXi = float(np.multiply(a,y)*(full_label_data_x*full_label_data_x[i,:].T)) + b
print("第",i+1,"笔fXi:",fXi)
Ei = fXi - float(y[i])
print("第",i+1,"笔Ei:",Ei)
结果如下:
第 1 笔fXi: 0.0
第 1 笔Ei: -1.0
第 2 笔fXi: 0.0
第 2 笔Ei: -1.0
第 3 笔fXi: 0.0
第 3 笔Ei: -1.0
第 4 笔fXi: 0.0
第 4 笔Ei: -1.0
第 5 笔fXi: 0.0
第 5 笔Ei: -1.0
第 6 笔fXi: 0.0
第 6 笔Ei: -1.0
第 7 笔fXi: 0.0
第 7 笔Ei: -1.0
第 8 笔fXi: 0.0
第 8 笔Ei: -1.0
第 9 笔fXi: 0.0
第 9 笔Ei: -1.0
第 10 笔fXi: 0.0
第 10 笔Ei: -1.0
第 11 笔fXi: 0.0
第 11 笔Ei: 1.0
第 12 笔fXi: 0.0
第 12 笔Ei: 1.0
第 13 笔fXi: 0.0
第 13 笔Ei: 1.0
第 14 笔fXi: 0.0
第 14 笔Ei: 1.0
第 15 笔fXi: 0.0
第 15 笔Ei: 1.0
第 16 笔fXi: 0.0
第 16 笔Ei: 1.0
第 17 笔fXi: 0.0
第 17 笔Ei: 1.0
第 18 笔fXi: 0.0
第 18 笔Ei: 1.0
第 19 笔fXi: 0.0
第 19 笔Ei: 1.0
第 20 笔fXi: 0.0
第 20 笔Ei: 1.0
好,今天支持SMO算法第一步算是完成了,明天就开始写第二部分
男孩发现胸口声音消失,取而代之是一种恐惧和愤怒感觉聪他胸口发出,男孩不清楚发生了,甚麽事,他只想赶快离开这间小木屋,离开这,於是他冲了出来,并朝着森林深处狂奔,只是他没有发现到,他的口袋里的纸条掉落在小木屋内,在男孩走後,纸条突然烧了起来,偶後,从灰烬里出现了一只狐狸,只不过他一动也不动,像是在等待谁的到来
--|我所做的一切都是为了你|-- MS.CM
>>: 从零开始的8-bit迷宫探险【Level 17】稻草人也想要智慧大脑,给怪物一点灵魂跟一点点个性
我们来看看Executor介面的内容: package java.util.concurrent; ...
纠团的功能我把它切成两个部分 使用者输入讯息 背景执行 今天介绍背景执行的部分 背景执行 这个部分主...
回圈 想要重复做一件事,会依据条件而有不同的执行次数 for 回圈 写法如下 for (let i ...
我们今天要来设定 PBR,我们以 Juniper MX 为例 首先,我们要先决定一个 routing...
我们想要找一个适合的地方送出 $store.dispatch('fetchUser', 1); 今天...