DAY23神经网路(续一)

昨天介绍完单层感知机模型演算法,今天要来研究单层感知机模型程序:
首先先把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

<<:  企业资料通讯 Week3

>>:  JavaScript Day 28. Callback Function ( 回呼函式 )

绘图 - 即时 tick 资料

以下内容,都是 shioaji 的官网文件的内容,只是加了一些我自己的理解,感谢永丰提供这麽完整的 ...

纵深防御(Defense in depth)

-NIST SP 800-160 V1和ISO 15288 NIST SP 800-160 V1强...

Day22 Create-react-app开发React

昨天介绍完Create-react-app的开发,今天就来介绍一下Create-react-app的...

[Day-17] R语言 - 分群应用(一) GMM数值补值-下 ( Fill.NA with GMM in R.Studio )

您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 (延续昨天) #均值 vs 列入各群权重 fi...

Vue.js 从零开始:v-for

v-for 列表渲染 透过v-for指令,将资料里的阵列或是物件重复渲染在画面上。 遍历物件资料: ...