import numpy as np
th0 = 0
th1 = 0
th2 = 1
alpha = 0.01
J = 0
data = np.array([[0, 0, 0],
[0, 1, 1],
[1, 0, 1],
[1, 1, 1]])
def mysum(x1, x2):
return th0 + th1 * x1 + th2 * x2
def ac(z):
if z >= 0.5:
return 1
if z < 0.5:
return 0
def training(th0, th1, th2, data, alpha):
J = 0
delta0 = 0
delta1 = 0
delta2 = 0
for x in data:
J += 1 / 2 * (mysum(x[0], x[1]) - x[2]) ** 2
delta0 += (mysum(x[0], x[1]) - x[2])
delta1 += (mysum(x[0], x[1]) - x[2]) * x[0]
delta2 += (mysum(x[0], x[1]) - x[2]) * x[1]
length = len(data)
th0 = th0 - alpha * delta0 / length
th1 = th1 - alpha * delta1 / length
th2 = th2 - alpha * delta2 / length
return J / length, th0, th1, th2
for i in range(2000):
J, th0, th1, th2 = training(th0, th1, th2, data, alpha)
print(J, th0, th1, th2)
for j in data:
t = ac(mysum(j[0], j[1]))
print(t)
或运算:
结果:
与运算:
结果: