티스토리 뷰
3.1 선형회귀분석
선형회귀분석 : 주어진 데이터를 가장 잘 설명하는 직선을 찾는 것
단순선형회귀(Simple Linear Regression) : 하나의 독립변수에 대한 선형회귀
= x, y 라는 데이터가 주어졌을 때, y = w*x + b 에서 데이터를 가장 잘 표현할 수 있는 가중치 w와 편차 b를 찾는 것
다중선형회귀(Multivariate Linear Regression) : 여러 개의 독립변수에 대한 선형회귀
3.2 손실 함수 및 경사하강법
1) 손실함수(loss function)
ex) 평균제곱오차(MSE) : 예측값과 실제값의 차이를 제곱(L2 loss)하여 평균한 것
2) 경사하강법(gradient descent)
: w_(t+1) = w_t - gradient * learning rate
3.3 파이토치에서의 경사하강법
1) 파이토치
(1) 데이터 기본 연산 단위 : Tensor = 다차원 배열 (multidimensrional array)
torch.tensor(data, *, dtype=None, device=None, requires_grad=False, pin_memory=False)
data : 배열
dtype : 데이터를 저장할 자료형 (기본값 : FloatTensor)
device : 해당 텐서를 어느 기기에 올릴 것인지 (CPU or CUDA device)requires_grad : 해당 텐서에 대한 기울기를 저장할지 - backward() 통해 기울기 계산 결과를 얻으려면 True로 설정해줘야 함- True로 설정하더라도, with torch.no_grad() 통해 해당 부분만 기울기 계산을 끌 수 있음 (Inference Mode)
(2) 라이브러리
torch.nn as nn : 인공신경망 모델 (ex. Linear, Convolution, RNN 등)
torch.optim as optim : 모델 최적화 함수 (ex. SGD, ADAM, LBFGS 등)
torch.nn.init as init : 텐서 초기화하는 함수 (ex. uniform, normal, xavier 등)
2) 선형회귀
# 데이터 생성
num_data = 1000
num_epoch = 500
noise = init.normal_(torch.FloatTensor(num_data,1),std=0.2)
x = init.uniform_(torch.Tensor(num_data,1),-10,10) # (1000 x 1)
y = 2*x+3
y_noise = y + noise # (1000 x 1)
# 데이터 시각화
plt.figure(figsize=(10,10))
plt.scatter(x.numpy(),y_noise.numpy(),s=7,c="gray")
plt.axis([-12, 12, -25, 25])
plt.show()
# 모델, 손실함수, 최적화함수 설정
model = nn.Linear(1,1)
loss_func = nn.L1Loss()
optimizer = optim.SGD(model.parameters(),lr=0.01)
# 모델 학습 및 중간 확인
loss_arr =[] # 손실 변화 확인 위해
label = y_noise # 목표값
for i in range(num_epoch):
optimizer.zero_grad() # 이전 학습의 기울기 삭제하여 최적화 함수 초기화
output = model(x)
loss = loss_func(output,label)
loss.backward() # 손실에 대한 기울기
optimizer.step() # 구한 기울기 통해 모델의 변수 업데이트
# loss_arr에 손실값 추가
loss_arr.append(loss.detach().numpy())
# 손실 그래프
plt.plot(loss_arr)
plt.show()
# 최종 결과 확인
plt.figure(figsize=(15,15))
plt.scatter(x.numpy(), y_noise.numpy(), s=5,c="gray")
plt.scatter(x.detach().numpy(), output.detach().numpy(), s=5, c="red")
plt.axis([-10, 10, -30, 30])
plt.show()
# 학습 후 모델 변수(weight, bias) 값 확인
param_list = list(model.parameters())
print("Weight:",param_list[0].item(),"\nBias: ",param_list[1].item())
+) 추가 내용
https://jeonggg119.tistory.com/18
[DS] 통계기초/회귀분석
1. 통계기초 1) ML : 지도학습(회귀, 분류) + 비지도학습(군집화, 변화, 연관) + 강화학습 독립변수, 종속변수가 존재할 때 - 회귀(Regression) : 예측하고 싶은 종속변수가 숫자(수치형 데이터)일 때 사
jeonggg119.tistory.com
'DL > Pytorch' 카테고리의 다른 글
[Ch7] 학습 시 생길 수 있는 문제점 및 해결방안 (0) | 2022.01.22 |
---|---|
[Ch6] 순환신경망(RNN) (0) | 2022.01.20 |
[Ch5] 합성곱 신경망(CNN) (0) | 2022.01.15 |
[Ch4] 인공 신경망(ANN) (0) | 2022.01.15 |
[Ch1, 2] Deep Learning & Pytorch (0) | 2022.01.10 |