3

学習目的で最急降下法を最初から使用して線形回帰を実装しようとしています。私のコードの一部は本当に私を悩ませています。何らかの理由xで、コード行を実行した後に変数が変更されていますが、その理由がわかりません。

変数は次のとおりです。xyはnumpy配列であり、この例では乱数を指定しました。

x = np.array([1, 2, 3, 4, ...., n])
y = np.array([1, 2, 3, , ...., n])
theta = [0, 0]
alpha = .01
m = len(x)

コードは次のとおりです。

theta[0] = theta[0] - alpha*1/m*sum([((theta[0]+theta[1]*x) - y)**2 for (x,y) in zip(x,y)])

上記のコードを実行するとx、リストではなくなります。変数nまたはリストの最後の要素のみになります。

4

2 に答える 2

4

はい、xリスト内包表記で再割り当てされています。上書きされないように、そこで使用されている変数名を変更してみませんか?

theta[0] = theta[0] - alpha*1/m*sum([((theta[0]+theta[1]*x_i) - y_i)**2 for x_i, y_i in zip(x,y)])
于 2013-02-21T02:17:24.033 に答える
4

何が起こっているのかというと、Pythonがリストを計算しているzip(x,y)ので、forループの各反復が(x,y)の対応する要素で上書きされますzip(x,y)。forループが終了すると、(x,y)が含まれますzip(x,y)[-1]

試す

theta[0] = theta[0] - alpha*1/m*sum([((theta[0]+theta[1]*xi) - yi)**2 for (xi,yi) in zip(x,y)])
于 2013-02-21T02:18:30.590 に答える