实现一下模式识别(三)感知器

感知器的流程:

  1. y=f(Wx+b) W是权值  b是偏置量(bias)→其实可写成y=f(WTx)  因为可以b可以处理成W0*x0
  2. Wi←Wi+ΔWi
  3. b←b+Δb
  4. ΔWi=η(t-y)xi    η是学习率(learning-rate),t是真实值(label),y是预测值(output)
  5. Δb=η(t-y)
    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    
    def perception(W, w1, w2):
        flag = False
        while flag != True:
            for i in range(len(w1)):
                t1 = 0
                t2 = 0
                for j in range(len(W)):
                    t1 += W[j] * w1[i][j]
                    t2 += W[j] * w2[i][j]
                if (t1 <= 0):
                    for j in range(len(W)):
                        W[j] += w1[i][j]
                    flag = False
                    break
                if (t2 >= 0):
                    for j in range(len(W)):
                        W[j] -= w2[i][j]
                    flag = False
                    break
                flag = True
        print("判别函数:" + "d(x)= %d" % (W[0]) + "x" + "%d" % (W[1]) + "y" + "%d" % (W[2]) + "z+" + "%d" % (W[3]))
        return W
    
    
    if __name__ == '__main__':
        W = [-1, -2, -2, 0]
        w1 = [[0, 0, 0, 1], [1, 0, 0, 1], [1, 0, 1, 1], [1, 1, 0, 1]]
        w2 = [[0, 0, 1, 1], [0, 1, 1, 1], [0, 1, 0, 1], [1, 1, 1, 1]]
        W = perception(W, w1, w2)
        fig = plt.figure()
        ax = Axes3D(fig)
        for i in range(len(w1)):
            ax.scatter(w1[i][0], w1[i][1], w1[i][2], c='r', marker='*')
            ax.scatter(w2[i][0], w2[i][1], w2[i][2], c='b', marker='o')
        plt.grid()
    
        xmin = min(min(w1[:][0]), min(w2[:][0]))
        xmax = max(max(w1[:][0]), max(w2[:][0]))
    
        ymin = min(min(w1[:][1]), min(w2[:][1]))
        ymax = max(max(w1[:][1]), max(w2[:][1]))
    
        x = np.linspace(xmin, xmax, 10)
        y = np.linspace(ymin, ymax, 10)
    
        x, y = np.meshgrid(x, y)
        z = []
        for i in range(len(x)):
            z.append(((W[0] * x[i] + W[1] * y[i] + W[3]) / (-W[2])))
    
        ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='rainbow')
        ax.set_xlabel('X')
        ax.set_ylabel('Y')
        ax.set_zlabel('Z')
        plt.show()

     

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值