昨天介绍完单层感知机模型演算法,今天要来研究单层感知机模型程序:
首先先把x资料做标准化
#个别标准化处理
x['x1']=(x['x1']-np.mean(x['x1']))/np.std(x['x1'])
x['x2']=(x['x2']-np.mean(x['x2']))/np.std(x['x2'])
x['x3']=(x['x3']-np.mean(x['x3']))/np.std(x['x3'])
print(x)
结果如下:
x1 x2 x3
0 0.132453 0.707423 -0.324462
1 -0.927173 -0.771813 -0.633474
2 -0.662266 -1.380911 -1.096991
3 0.132453 -0.293237 2.147631
4 2.516611 1.264312 -0.169956
5 -0.662266 -0.750060 0.293561
6 -0.927173 -0.249730 -0.942485
7 0.927173 1.647173 -0.324462
8 -0.397360 0.903204 1.529608
9 -0.132453 -1.076362 -0.478968
好,接下来依照多元回归,要加上截距项系数1:
x['b0']=1
print(x)
所以x资料就会变成:
x1 x2 x3 b0
0 0.132453 0.707423 -0.324462 1
1 -0.927173 -0.771813 -0.633474 1
2 -0.662266 -1.380911 -1.096991 1
3 0.132453 -0.293237 2.147631 1
4 2.516611 1.264312 -0.169956 1
5 -0.662266 -0.750060 0.293561 1
6 -0.927173 -0.249730 -0.942485 1
7 0.927173 1.647173 -0.324462 1
8 -0.397360 0.903204 1.529608 1
9 -0.132453 -1.076362 -0.478968 1
好,现在取前6笔当train後4笔当test,程序如下:
#取前6笔当train
x_train=x.loc[:5]
#取後4笔当test
x_test=x.loc[6:]
print(x_train)
print(x_test)
y_train=y.loc[:5]
y_test=y.loc[6:]
print(y_train)
print(y_test)
接下来定义误差和学习率跟设定初始权重
程序如下:
#定义误差容许值
err_check = 3.0
#定义学习率a
a = 0.05
#设定初始权重(因为有4个)-->用0~1之间的数字
w = np.random.uniform(0,1,4)
print(w)
#迭带次数初始化
j=1
所以东西都设定好之後,就带入回圈:
while True:
err = 0
for i in range(len(x_train)):
xi = x_train.iloc[i]
#每一笔数据的估计值和真实值之间差距
delta = sum(w*xi) - y_train.iloc[i]
#梯度下降
w = w - a*delta*xi
#加总全误差
err = err + delta**2
if err<err_check:
break
j+=1
#最後权重
print("最後权重",w)
结果如下:
第 1 次误差: 2514.475600015955
第 2 次误差: 1122.517976696326
第 3 次误差: 536.2183368067888
第 4 次误差: 267.1491980566654
第 5 次误差: 138.1212899719169
第 6 次误差: 74.86140081797406
第 7 次误差: 43.39858391807849
第 8 次误差: 27.509587072742484
第 9 次误差: 19.29828752645391
第 10 次误差: 14.891503014883892
第 11 次误差: 12.38340474428632
第 12 次误差: 10.834745064265665
第 13 次误差: 9.781894680740534
第 14 次误差: 8.995331217720498
第 15 次误差: 8.360752340474864
第 16 次误差: 7.820559609915683
第 17 次误差: 7.345072473543037
第 18 次误差: 6.918379442228294
第 19 次误差: 6.5313914204590136
第 20 次误差: 6.178435490364901
第 21 次误差: 5.855586700477396
第 22 次误差: 5.5598513534328395
第 23 次误差: 5.2887663458100995
第 24 次误差: 5.040201089221789
第 25 次误差: 4.812257659580057
第 26 次误差: 4.603218367670186
第 27 次误差: 4.411516151619314
第 28 次误差: 4.235715969835322
第 29 次误差: 4.074501569242124
第 30 次误差: 3.926664985200385
第 31 次误差: 3.7910975487051513
第 32 次误差: 3.666781841715461
第 33 次误差: 3.552784346605619
第 34 次误差: 3.4482486713465024
第 35 次误差: 3.3523892895601275
第 36 次误差: 3.264485757316709
第 37 次误差: 3.1838773765485424
第 38 次误差: 3.109958277295673
第 39 次误差: 3.0421728915578936
第 40 次误差: 2.9800117918450866
最後权重
x1 9.784756
x2 -2.149323
x3 -0.696641
b0 17.955527
很明显可以看到误差慢慢在下降
把上述得到权重带回test,程序如下:
#预测值
y_hat=np.sum(x_test*w,axis=1)
print("每笔资料预测值:\n",y_hat)
#真实值
print("每笔资料真实值:\n",y_test)
#MSE
print("MSE:",np.mean((y_test -y_hat )**2))
结果如下:
每笔资料预测值:
6 10.070166
7 23.702478
8 11.048403
9 19.311501
每笔资料真实值:
6 12.03
7 29.00
8 21.50
9 13.75
MSE: 43.017715641520184
能看出MSE还是比较来的大(毕竟是单层感知机模型)
好,今天单层感知机模型算是完成,明天就来研究浅层网路神经
男孩站起身来,但眼神失了焦,而彷佛甚麽也没看到的缓慢往前走,途中掉落木棉花在碰到男孩瞬间,花就立刻枯萎腐烂,然後消失在空气中,男孩前进方向正是森林的入口,随着男孩身影逐渐远去,众人发现身体又可以活动了,在第一时间,狐狸想立刻去追男孩,但他突然发现,他无法出去,在掉落木棉花上方,像是有一道无形的墙,而掉落木棉花正好形成一个圆圈,把众人都困在里面,男子伸出红色的手,想企图用火焰把墙烧掉,但却毫无反应,娃娃抬起手,也毫无反应,这时透明墙上出现一段红色字体,上面写:
过去是疼痛,现在是折磨,未来是孤独
--|我失去了过去,看清了现在,至於未来…|-- MM.CS
>>: JavaScript Day 28. Callback Function ( 回呼函式 )
以下内容,都是 shioaji 的官网文件的内容,只是加了一些我自己的理解,感谢永丰提供这麽完整的 ...
-NIST SP 800-160 V1和ISO 15288 NIST SP 800-160 V1强...
昨天介绍完Create-react-app的开发,今天就来介绍一下Create-react-app的...
您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 (延续昨天) #均值 vs 列入各群权重 fi...
v-for 列表渲染 透过v-for指令,将资料里的阵列或是物件重复渲染在画面上。 遍历物件资料: ...