神经网络与机器学习,tensorflow,part2(python实现感知机)

以下是python利用numpy库和matplotlib库进行感知机的实现以及可视化
其中有两个输入,共七组数据

import numpy as np
import matplotlib.pyplot as plt
import time
p_x = np.array([[5, 5], [4, 5], [5, 4], [4, 4], [2, 3], [0.25, 0.25], [1, 1]])
y = np.array([1, 1, 1, 1, -1, -1, -1])
# 创建数据集


w = np.array([1, 0])
b = 0.2
delta = 0.2
#初始化w,b以及设置步长delta

for i in range(50):#设置迭代次数,采用随机梯度下降方法
    choice = -1
    for j in range(len(p_x)):
        if y[j] != np.sign(np.dot(w, p_x[0]) + b):
            choice = j
            break
    if choice == -1:
        break
    w = w + delta * y[choice]*p_x[choice]
    b = b + delta * y[choice]
    #更新w,b

    #----------------用matplotlib绘制图片
    plt.figure()
    plt.axis([0, 10, 0, 10])
    for i in range(len(p_x)):
        if y[i] == 1:
            plt.plot(p_x[i][0], p_x[i][1], 'ro')
        else:
            plt.plot(p_x[i][0], p_x[i][1], 'bo')
    line_x = [0, 10]
    line_y = [0, 0]
    print(w)
    print(b)
    for i in range(len(line_x)):
        line_y[i] = (-w[0] * line_x[i] - b)/w[1]
    plt.plot(line_x, line_y)
    plt.savefig("picture.png")

    time.sleep(0.1)
    #-------------------


wm3hj-hqn93.gif

和simmon的书上的证明结果一样,感知机是收敛的
不过最终结果是否可以完全分类开来还得看步长,迭代次数等设置是否合理,数据量是否够。
例如当我把步长设为0.01,迭代次数设为1000次,很明显并没有很好的将样本进行分类


picture.png

你可能感兴趣的:(神经网络与机器学习,tensorflow,part2(python实现感知机))