iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
AI & Data

數據分析方法研究和理解演算法系列 第 14

DAY14支持向量機演算法(續三)

  • 分享至 

  • xImage
  •  

昨天介紹完SMO算法第三步,今天就要來寫這個方法第四步,
昨天我們得到aj,接下來要使用aj來更新ai
第四步: 更新ai和b
https://ithelp.ithome.com.tw/upload/images/20210928/201416542gASbpS5CS.png
(更新b1和b2)
https://ithelp.ithome.com.tw/upload/images/20210928/20141654pW8TwXOpTY.png
再利用b1和b2更新b
https://ithelp.ithome.com.tw/upload/images/20210928/20141654vPeInNgREt.png
只要算出a和b就可以帶回
https://ithelp.ithome.com.tw/upload/images/20210928/20141654vHoM0GTCvF.png
就可以算出分割線
所以程式如下:
首先:

	#保留舊的ai和aj
	a_i = copy.deepcopy(a[0][i]) 
	a_j = copy.deepcopy(a[0][j])

然後更新ai

	a[0][i] += y[j]*y[i]*(a_j  - a[0][j])
	print("第",i+1,"個ai:",a[0][i])

結果如下:

第 1 個ai: 0.0004316857327865314
第 2 個ai: 0.0
第 3 個ai: 0.00012976182870841016
第 4 個ai: 0.0
第 5 個ai: 0.0
第 6 個ai: 0.0
第 7 個ai: 0.0
第 8 個ai: 0.0
第 9 個ai: 0.0
第 10 個ai: 0.0
第 11 個ai: 0.0
第 12 個ai: 8.424245746413649e-05
第 13 個ai: 0.0
第 14 個ai: 0.00037026095235359607
第 15 個ai: 0.0
第 16 個ai: 0.0
第 17 個ai: 0.0
第 18 個ai: 0.0004316857327865314
第 19 個ai: 0.0
第 20 個ai: 0.0005000227810620062

接下來更新b1和b2來算出b
程式如下:

b1 = b - Ei- y[i]*(a[0][i]-a_i)*full_label_data_x[i,:]*full_label_data_x[i,:].T - y[j]*(a[0][j]-a_j)*full_label_data_x[i,:]*full_label_data_x[j,:].T
	b2 = b - Ej- y[i]*(a[0][i]-a_i)*full_label_data_x[i,:]*full_label_data_x[j,:].T - y[j]*(a[0][j]-a_j)*full_label_data_x[j,:]*full_label_data_x[j,:].T
	print("第",i+1,"個b1:",b1)
	print("第",i+1,"個b2:",b2)

結果如下:

第 1 個b1: [[1.]]
第 1 個b2: [[1.]]
第 2 個b1: [[1.]]
第 2 個b2: [[1.]]
第 3 個b1: [[-1.00838574]]
第 3 個b2: [[-1.00838574]]
第 4 個b1: [[-1.6918239]]
第 4 個b2: [[-1.0754717]]
第 5 個b1: [[-0.00628931]]
第 5 個b2: [[-1.47798742]]
第 6 個b1: [[-1.42767296]]
第 6 個b2: [[-1.6918239]]
第 7 個b1: [[-1.44863732]]
第 7 個b2: [[-1.47798742]]
第 8 個b1: [[-1.50314465]]
第 8 個b2: [[-1.0754717]]
第 9 個b1: [[-1.37797208]]
第 9 個b2: [[-1.37797208]]
第 10 個b1: [[-1.21495321]]
第 10 個b2: [[-1.50686302]]
第 11 個b1: [[-2.54204735]]
第 11 個b2: [[-2.54204735]]
第 12 個b1: [[-2.35083904]]
第 12 個b2: [[-1.86381791]]
第 13 個b1: [[-1.97834905]]
第 13 個b2: [[-1.86381791]]
第 14 個b1: [[-2.56397375]]
第 14 個b2: [[-1.63621178]]
第 15 個b1: [[-1.10197473]]
第 15 個b2: [[-1.86137684]]
第 16 個b1: [[-2.42958329]]
第 16 個b2: [[-2.42958329]]
第 17 個b1: [[-1.95617818]]
第 17 個b2: [[-1.71874257]]
第 18 個b1: [[-1.32858274]]
第 18 個b2: [[-2.74969293]]
第 19 個b1: [[-1.71874257]]
第 19 個b2: [[-2.5955026]]
第 20 個b1: [[-5.25369212]]
第 20 個b2: [[-5.25369212]]

最後利用限制範圍就可以算出誤差b
程式如下:

#更新b,C為之前所說上界-->那時候帶入為0.6
	if (0 < a[0][i]) and (C > a[0][i]): 
		b = b1
	elif (0 < a[0][j]) and (C > a[0][j]): 
		b = b2
	else: 
		b = (b1 + b2)/2

結果如下:

第 1 個b: [[-1.79865772]]
第 2 個b: [[-1.84697987]]
第 3 個b: [[-2.4604409]]
第 4 個b: [[-2.71749958]]
第 5 個b: [[-1.77429244]]
第 6 個b: [[-3.02793887]]
第 7 個b: [[-3.21142206]]
第 8 個b: [[-2.34219118]]
第 9 個b: [[-3.21351504]]
第 10 個b: [[-2.29521131]]
第 11 個b: [[-2.51540433]]
第 12 個b: [[-1.87184751]]
第 13 個b: [[-2.26508294]]
第 14 個b: [[-3.24817907]]
第 15 個b: [[-2.23019153]]
第 16 個b: [[-2.2969842]]
第 17 個b: [[-2.16926286]]
第 18 個b: [[-2.16926286]]
第 19 個b: [[-2.35918226]]
第 20 個b: [[-2.55068351]]

好,今天支持SMO算法第四步算是完成了,明天就開始寫真正再迭代可能會遇到甚麼情況

狐狸不敢大意,小心翼翼地往前查看,發現男子消失不見了,狐狸立刻警覺的看著四周,突然從土裡伸出一隻紅色手抓住了狐狸的尾巴,剎那間,狐狸的尾巴燒了起來,狐狸立刻在地上翻滾了起來,企圖把火焰熄滅,男子趁機破土而出,並從口袋裡拿出了一把刀,往狐狸的方向衝過去
		--|這是獻祭給他的禮物,希望你會喜歡|--  CS.MM

上一篇
DAY13支持向量機演算法(續二)
下一篇
DAY15支持向量機演算法(續四)
系列文
數據分析方法研究和理解演算法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言