| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- SQL
- sklearn
- 힙
- Key 종류
- TDD
- 사이킷런
- ALTERTABLE
- 주성분 찾기
- knn_classify
- 세대별가비지컬렉터
- CREATETABLE
- 키 종류
- 붓꽃데이터셋
- 파이썬
- 클린코드
- Hyperlink Graphs
- SQLDDL
- latent factor
- 백준
- 알고리즘
- 잠재요소모델
- DROPTABLE
- 컨테이너객체
- 무결성유지
- 무결성유지메커니즘
- Python
- 무결성
- latent factor model
- RENAMETABLE
- 문자열
- Today
- Total
DonHurry
[Python] Linear Regression 본문
본 포스트에서는 Pytorch와 Scikit-learn을 통해 선형 회귀 (Linear Regression) 분석을 수행해보겠습니다.
누구나 쉽게 따라할 수 있도록 간단하게 진행됩니다.
학습 데이터 생성
우선 간단한 학습 데이터를 생성해줍니다.
이때 x 데이터에 대한 y 값은 다음과 같습니다.

import torch
x = torch.tensor([[1, 2], [3, 2], [3, 7], [1, 1], [1, 0]], dtype=torch.float)
y = torch.tensor([[4], [8], [23], [1], [-2]], dtype=torch.float)
W, b 초기화
다음으로 가중치(weight)와 편향(bias)를 초기화시켜줍니다.
이때 학습률(learning rate)는 임의의 값으로 설정합니다.
W = torch.zeros(2, 1)
b = torch.zeros(1, 1)
lr = 0.01
반복횟수 설정
학습을 진행하기에 앞서 반복횟수를 설정해주어야 합니다.
간단하게 for 문을 이용하여 설정합니다. 이때 W와 b의 requires_grad를 True로 설정합니다.
for epoch in range(1000):
W.requires_grad_(True)
b.requires_grad_(True)
가설 (Hypothesis), cost 설정
다음으로 가설과 비용을 설정해주어야 합니다. 가설이란 입력 데이터 x가 들어왔을 때 어떠한 과정을 거치면 출력값 y가 될 것이다라고 예측하는 것입니다. 비용은 가설을 통해 나온 값과 실제 y값에 대한 차이라고 보셔도 좋을 듯 합니다. 그렇다면 가설은 비용을 최대한 줄이는 방법으로 학습해나간다고 유추할 수 있습니다.
해당 예제에서는 비용으로 평균제곱오차(MSE)를 활용하였습니다. MSE는 회귀 문제에서 자주 사용되는 손실함수입니다.
h = torch.mm(x, W) + b
cost = torch.mean((h - y) ** 2) # MSE
W, b 업데이트
학습이 진행될 때마다 backward를 통해 경사를 계산하고, W와 b를 업데이트 해줍니다.
cost.backward()
with torch.no_grad():
W = W - lr * W.grad
b = b - lr * b.grad
학습 결과 확인
이제 학습 결과를 확인할 차례입니다!
학습이 진행될수록 앞서 보았던 y함수의 계수에 가깝게 W와 b가 학습되는 것을 확인할 수 있습니다.
또한 학습이 진행될수록 비용이 줄어드는 것도 보입니다.
if epoch % 100 == 0:
print(f"W: {W}, b: {b}, cost: {cost}")

x = [5, 10] 일 때, y의 값은 몇일까요?
앞서 구성한 모델을 통해 예측이 가능합니다.
x_test = torch.tensor([[5, 10]], dtype=torch.float)
test_result = torch.mm(x_test, W) + b
print(test_result)

이제 마지막으로 scikit-learn을 통해 결과를 다시 확인해보겠습니다!
모델 생성 및 학습
scikit-learn을 활용하면 다음과 같이 편하게 모델을 생성하고 학습할 수 있습니다.
앞선 과정들을 내부적으로 훨씬 효율적이고 정확하게 수행합니다.
from sklearn.linear_model import LinearRegression
x = [[1, 2], [3, 2], [3, 7], [1, 1], [1, 0]]
y = [[4], [8], [23], [1], [-2]]
model = LinearRegression() # 모델 생성
model.fit(x, y) # 학습
학습 결과 확인 (파라미터 확인)
학습한 모델의 W와 b를 확인할 차례입니다. 이때 coef_는 기울기 값(W), intercept_는 y절편 값(b)에 해당됩니다.
y 함수에 대해 정확히 학습하는 것을 확인할 수 있습니다.
print(model.coef_, model.intercept_)

y값 예측하기
예제를 통해 y값을 예측해봅시다!
print(lr.predict([5, 10]))

'Data Science' 카테고리의 다른 글
| [Python] PageRank (1) | 2022.12.15 |
|---|---|
| [Python] PCA (Principal Component Analysis) (0) | 2022.12.14 |
| [Python] KNN (K-Nearest Neighbors) (0) | 2022.12.13 |
| [Python] Clustering (0) | 2022.12.12 |
| [Python] Latent Factor Model (0) | 2022.12.12 |