机器学习笔记(十五)——神经网络单层感知器
本博客仅用于个人学习,不用于传播教学,主要是记自己能够看得懂的笔记(
学习知识、资源和数据来自:机器学习算法基础-覃秉丰_哔哩哔哩_bilibili
单层感知器相当于一个神经元,是神经网络中最基本的结构。直接上图:
其中的b就相当于x0*w0,x0=1。
而感知器的学习规则是:
最后得到可以满足条件的结果后,就可以结束了,也就得到了一个模型。
所以,对于下面这道题,也就可以用神经网络来做了。
随机设一个w,并开始一步步找,直到找到合适的w。
Python代码如下:
import numpy as np import matplotlib.pyplot as plt x_data=[[1,3,3],[1,4,3],[1,1,1],[1,0,2]] #坐标 y_data=[[1],[1],[-1],[-1]] #标签 w=(np.random.random([3,1])-0.5)*2 #随机的-1到1的数 w=np.mat(w) print(w) lr=0.11 o=0 x_mat=np.mat(x_data) y_mat=np.mat(y_data) for _ in range(1000): z=x_mat*w for i in range(len(z)): #sign激活函数 if z[i]>0: z[i]=1 else: z[i]=-1 zz=z.tolist() if zz==y_data: print(z) break w_=lr*x_mat.T*(y_mat-z) #每次向量w增加的量 w+=w_ print(_) #输出 #画图 w=np.array(w) zzz=-(w[0,0]+w[1,0]*x_mat[:,1])/w[2,0] plt.plot(x_mat[:,1],zzz) x0,y0,x1,y1=[],[],[],[] for i in range(len(y_data)): if y_data[i]==1: x1.append(x_data[i][1]) y1.append(x_data[i][2]) else: x0.append(x_data[i][1]) y0.append(x_data[i][2]) plt.plot(x0,y0,'bo') plt.plot(x1,y1,'rx') plt.show()
得到结果:
[[-0.09897328]
[-0.35652277]
[-0.63919799]]
[[ 1.]
[ 1.]
[-1.]
[-1.]]
6
参考博客: