机器学习笔记(十五)——神经网络单层感知器

本博客仅用于个人学习,不用于传播教学,主要是记自己能够看得懂的笔记(

学习知识、资源和数据来自:机器学习算法基础-覃秉丰_哔哩哔哩_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

参考博客:

numpy中mat和python的list转换_Ontheway的博客-CSDN博客

对NumPy中dot()函数的理解 - 忧郁白衬衫 - 博客园 (cnblogs.com)

posted @ 2021-08-02 09:55  Lcy的瞎bb  阅读(180)  评论(0编辑  收藏  举报