python“w + = something”和“w = w + something”导致不同的值

时间:2015-09-30 13:36:14

标签: python numpy

我在numpy的python中写了一个口袋算法,发现如果我改变了

w += (x[:, col_idx] * y[col_idx, 0]).transpose()(错误答案)

w = w + (x[:, col_idx] * y[col_idx, 0]).transpose()(正确答案)

算法将打印出不同的结果。

我已经打印了w,x,y和两个版本是相同的。

w只是在上面的陈述的左侧,并已初始化。

我也检查了算法并确保它是正确的。

我无法理解的是,为什么只将w+=()更改为w=w+()

更改整个结果?(error_rate)

我测试过它的w值会打印出来。

功能部分是

def pocket(x, y, update=50):

    w = np.zeros(shape=(1, 5))
    w_pocket = np.zeros(shape=(1, 5))

    update_idx = 0
    col_idx = 0
    col_number = x.shape[1]

    error_pocket = error_rate(x, y, w_pocket)

    for update_idx in range(update):
        col_range = random.sample(range(col_number), col_number)

        for col_idx in col_range:
            perceptron_score = w * x[:, col_idx]
            if label(perceptron_score) != y[col_idx, 0]:
                print "1:", col_idx, ":", x[:, col_idx].transpose(), y[col_idx, 0], w
                w = w + (x[:, col_idx] * y[col_idx, 0]).transpose()
                # w += (x[:, col_idx] * y[col_idx, 0]).transpose()
                print "2:", col_idx, ":", x[:, col_idx].transpose(), y[col_idx, 0], w
                error = error_rate(x, y, w)
                if error < error_pocket:
                    w_pocket = w
                    error_pocket = error
                break
    return w_pocket

如果你想测试它

你需要文件

https://github.com/lypan/Machine_Learning_Foundations

214976eed5abc4514832daa9e6adf6d0250d3371

只需解压缩并运行脚本

0 个答案:

没有答案