수달이네 기술 블로그

2. 다중선형회귀 본문

AI공부/딥러닝

2. 다중선형회귀

슬픈 수달이 2026. 1. 28. 23:30

다중 선형 회귀

여러개의 독립변수로 하나의 종속변수를 예측하는 방법

  • 단순 선형 회귀 : 1 대 1 예측, 다중: n : 1 예측
  • $y = W1x1 + W2x2 + … + b$
X_train = torch.FloatTensor([[73, 80, 75],
                             [93, 88, 93],
                             [89, 91, 90],
                             [96, 98, 100],
                             [73, 66, 70],
                             [85, 90, 88],
                             [78, 85, 82]]).to(device)

y_train = torch.FloatTensor([[152], [185], [180], [196], [142], [175], [155]]).to(device)

패턴을 위와 같이 만들어준다.

  • 독립변수 3 : 종속변수 1
model = nn.Linear(3,1).to(device)
# 독립변수 3개 종속변수 1개 랜덤 초기화
model
  • 단순에선 1,1이었으나, 3개의 독립변수이므로 위와 같이 설정

Adam(Adaptive Moment Estimation)

경사 하강법을 개선한 최적화 알고리즘

  • Adam 은 SGD의 단점을 보완하였다. 각 가중치와 편향마다 다른 학습률을 적용한다.

특징

  • Momentum: 지금까지의 기울기를 누적하여 방향을 부드럽게 만든다.
    • 처음엔 급강하 점점 천천히(관성)
    • 덕분에 local minimum에 빠지는 것을 예방할 수 있다.
      • local minimum: 변곡점이 여러개일때 최저값이 아닌 다른 값
  • RMSProp: 각 파라미터마다 학습률을 다르게 조절해서 효율적으로 학습한다.
epochs = 1000

for epoch in range (epochs+1):
    y_pred = model(X_train)
    loss = loss_fn(y_pred, y_train)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    if epoch % 100 == 0:
        print(f'Epoch: {epoch}/{epochs} Loss: {loss: .6f}')

# Epoch: 0/1000 Loss:  21585.962891
# Epoch: 100/1000 Loss:  24.979015
# Epoch: 200/1000 Loss:  23.283005
# Epoch: 300/1000 Loss:  23.146479
# Epoch: 400/1000 Loss:  22.982256
# Epoch: 500/1000 Loss:  22.792973
# Epoch: 600/1000 Loss:  22.580563
# Epoch: 700/1000 Loss:  22.346350
# Epoch: 800/1000 Loss:  22.091402
# Epoch: 900/1000 Loss:  21.816732
# Epoch: 1000/1000 Loss:  21.523197
  • 1000번의 epoch동안 학습하여 21까지 loss가 감소했다.
  • 줄어든 로스를 보면 급강하한 것을 확인 가능하다.
x_test = torch.FloatTensor([[98,99,100]]).to(device)
y_pred = model(x_test)
y_pred

# tensor([[196.9363]], grad_fn=<AddmmBackward0>)
  • 예시 값을 넣어보면 위와 같이 결과가 나온다.