3

저는 학습 목적으로 처음부터 그래디언트 디센트 메소드를 사용하여 선형 회귀를 구현하려고합니다. 내 코드의 한 부분이 정말로 나를 괴롭 히고 있습니다. 코드 라인을 실행 한 후 어떤 이유에서든지 x 변수가 변경되고 이유가 확실하지 않습니다.선형 회귀 그래디언트 하강 python 구현

변수는 다음과 같습니다. 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

파이썬 목록 zip(x,y)하여 루프가 zip(x,y)의 해당 요소와 (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)]) 
+0

말이 감사를보십시오! – user1596466

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)])