数学之路(3)-机器学习(3)-机器学习算法-神经网络[3]
(5)LMS最小均方差
Python的LMS算法部分为:
以逻辑或为例,下面是x和w初始权值
x = np.array([[1,1,1],[1,1,0],[1,0,1],[1,0,0]]) d =np.array([1,1,1,0]) w=np.array([b,0,0])
下面是LMS算法部分
#expect_e是期望误差率 #mycount为最大尝试次数 mycount=0 while True: mye=0 i=0 for xn in x: w,e=neww(w,d[i],xn,a) i+=1 mye+=abs(e) mycount+=1 print "第 %d 次调整后的权值:"%mycount print w print "误差:%f"%mye if abs(mye)<expect_e or mycount>maxtrycount:break #以下是验证部分 for xn in x: print "%d and %d => %d "%(xn[1],xn[2],get_v(w,xn))
本博客所有内容是原创,未经书面许可,严禁任何形式的转载
http://blog.csdn.net/u010255642
执行结果为:
>>>
第 1 次调整后的权值:
[ 0.9 0. 0. ]
误差:1.000000
第 2 次调整后的权值:
[ 0.8 0. 0. ]
误差:1.000000
第 3 次调整后的权值:
[ 0.7 0. 0. ]
误差:1.000000
第 4 次调整后的权值:
[ 0.6 0. 0. ]
误差:1.000000
第 5 次调整后的权值:
[ 0.5 0. 0. ]
误差:1.000000
第 6 次调整后的权值:
[ 0.4 0. 0. ]
误差:1.000000
第 7 次调整后的权值:
[ 0.3 0. 0. ]
误差:1.000000
第 8 次调整后的权值:
[ 0.2 0. 0. ]
误差:1.000000
第 9 次调整后的权值:
[ 0.1 0. 0. ]
误差:1.000000
第 10 次调整后的权值:
[ 1.38777878e-16 0.00000000e+00 0.00000000e+00]
误差:1.000000
第 11 次调整后的权值:
[-0.1 0. 0. ]
误差:1.000000
第 12 次调整后的权值:
[-0.1 0.1 0.1]
误差:2.000000
第 13 次调整后的权值:
[-0.1 0.1 0.1]
误差:0.000000
1 and 1 => 1
1 and 0 => 1
0 and 1 => 1
0 and 0 => 0
>>>
我们换一个分类
输入矩阵中x向量的整除结果为6为一类,为3是另一类
x = np.array([[1,1,6],[1,2,12],[1,3,9],[1,8,24]]) d =np.array([1,1,-1,-1]) w=np.array([b,0,0])
分类效果不错
第 1 次调整后的权值:
[ 0.8 -0.6 -1.8]
误差:2.000000
第 2 次调整后的权值:
[ 1.00000000e+00 -6.00000000e-01 4.44089210e-16]
误差:6.000000
第 3 次调整后的权值:
[ 0.8 -2.4 -4.2]
误差:6.000000
第 4 次调整后的权值:
[ 1.2 -1.8 -0.6]
误差:4.000000
第 5 次调整后的权值:
[ 1.2 -2.2 -1.2]
误差:4.000000
第 6 次调整后的权值:
[ 1.4 -2.2 0.6]
误差:6.000000
第 7 次调整后的权值:
[ 1.2 -2.8 -1.2]
误差:2.000000
第 8 次调整后的权值:
[ 1.4 -2.8 0.6]
误差:6.000000
第 9 次调整后的权值:
[ 1.4 -2.8 0.6]
误差:0.000000
1 and 6 => 1
2 and 12 => 1
3 and 9 => -1
8 and 24 => -1
9 and 27 => -1
11 and 66 => 1