感知器算法混淆

Perceptron Algorithm Confusion

我正试图解决这个问题:

def phi(x):
    # DO NOTHING ON THIS FUNCTION
    if x<=0:
        return -1.0
    else:
        return 1.0
    
phi = np.vectorize(phi)

这里是我需要实现的功能:

def predictOne(x, w):
    z =  
    return phi(z)

但是当我尝试使用我的公式但输入代码时:

def predictOne(x, w):
    z =  0 + x * w
    return phi(z)

并且运行我的断言:

assert predictOne(np.array([0.0,0.0]) , np.array([0.1,3.2,7.4])) == 1.0
assert predictOne(np.array([0.0,0.0]), np.array([-0.1,3.2,7.4])) == -1.0
assert predictOne(np.array([0.3,-0.7]), np.array([0.1,3.2,7.4])) == -1.0
assert predictOne(np.array([0.3,0.7]), np.array([0.1,3.2,7.4])) == 1.0

我得到一个(操作数无法与形状一起广播 (2,) (3,)

显然,断言是正确的,所以我在我的 predictOne 函数中做错了。有人可以帮忙吗?

问题出在公式中:

def predictOne(x, w):
    z = w[0] + np.sum(x * w[1:])
    return phi(z)
  • w[0] 是偏差。正如@mkrieger 指出的那样,零偏差没有多大意义。
  • 感知器本质上是计算输入的加权和,所以结果应该是相加的。