본문 바로가기

Hello MLop/DL

MLop_DL_보스톤 집값 예측

20221117

30일 차

 


두 번째로 해볼 딥러닝 실습은 Boston 집값 예측이다.

데이터는 사이키런의 데이터 셋에서 가져왔다.

 

집값을 예측한다는 의미는 분류하는 작업이 아니다.

과연 회귀 분석에서는 어떻게 쓰이는지 중점을 두고 보자.

 


위에서 설명한대로 데이터 경로는 sklearn.datasets에서 참고했으며

datasetkey를 조회해서 'data'는 무었이 있는지 확인해보자.

 


우리가 원하는 데이터를 DataFrame으로 만들어준다.

 


마지막으로 pandas를 임포트하고

 

우리가 익히보던 df라는 변수로 DataFrame을 저장해 줄건데

데이터dataset['data'] 로 했고,

컬럼명들은 dataset의 key값중 하나인 'feature_names'를 불러서 저장해 주었다.

 

 


데이터도 불어왔겠다.

딥러닝의 모델 계획을 세워보자.

 

글의 서두에서 언급한 바와 같이

위의 예측 목적은 분류가 아닌 회귀분석이 목적이므로

가장 기본적인 모델인 선형회귀를 통해 회귀분석은 어떻게 딥러닝이 진행되는지 보겠다.

 

기본적인 진행은

데이터 불러오기 ▶ 손실계산 ▶ 오차 역전파 및 최적화 ▶ 학습 완료 및 확인

순서이다.

 


💡 선형회귀

 

기본적인 선형회귀 설명이며

 

회귀에 의해 얻은 결과물을 실제 데이터(target)와 비교 & 오차를줄여나가는 방식으로 학습한다.

MSE(평균 제곱 오차)를 이용하여 오차를 확인한다.

torch.nn.sequential() : 객체에 선형 회귀 모듈을 넣어주면 pyTorch가 알아서 계산해준다.

 torch.nn.Linear : 파이토치의 선형회귀 모델이다.

 

✔ 은닉층은 다층 신경망 (MLP) 구조로 형성된다.

MLP층은 각 층의 뉴런이 다음 층의 모든 뉴런과 연결이 되있으므로 완전연결층이라고도 불린다.

✔ 순전파가 한번 진행 ▶ 오차 역전파 학습 ▶ 결과도출

 

💡 배치(batch)

데이터가 몇 만개가 들어왔을때 그걸 한번에 처리하면 컴퓨터가 많이 힘들것이다.

그래서 전체 데이터를 나눠서 진행 시키는데 이를 batch라고 한다.

 

💡 에포크(Epoch)

배치의 총 합을 나타낸다.

 

💡 이터레이션(iteration)

배치가 50회라면 몇 세트를 했냐를 표현한다.

 

# Epoch = batch * iteration

 

회원님 오늘 팔굽혀펴기 1000개(Epoch)할거에요

총 50개씩(batch) 20세트(iteration) 하겠습니다.

 


torch와 모델링을 하기 위해 torch.nn을 임포트 해주고최적화를 해주는 Adam도 임포트 해준다.


model은 nn.Sequential로 지정해 줄것이다.

 

nn.Linear # 선형회귀모델 (13, 100) # 13개의 입력값을 받아 가중치를 더해서 100개로 나오게 할게.

nn.ReLU() # 활성화함수 -> 0 이상이면 온전히 다음으로 넘겨줄게

nn.Linear(100,1) # 100개가 왔구나 그럼 1개로 줄여서 나오게 할게

 

model을 출력하면내가 설정한 nn.Linear의 설정된 결과가 출력된다.

 


 

종속 변수 Y독립 변수 X를 설정하는 과정이다.

dataset에서 key값중 'target'이라는 key가 있었는데

아주 편리하게 종속변수로 따로 저장해 놓았다.

 


batch_size100으로 해주고learning_rate # 학습률 = 보폭 = 0.001

 

optim이라는 변수에 Adam을 저장해 줄건데Adam에는 model의 파라미터학습률을 지정해준다.

 


그럼 이제 모델에 데이터를 학습 시켜보자.

 

위의 사진에 주석이 너무 잘 나와 있으므로 자세한 코드 설명은 생략하고

중요한 포인트만 서술 하겠다.

 

x = torch.FloatTensor(X[start:end]) # 독립변수들이 담긴 tensor

    y = torch.FloatTensor(Y[start:end]) # 종속변수가 담긴 tensor

 

위의 코드에서 .FloatTensor를 해주는 이유는 위의 X와 Y의 출력에 답이 있다.

현재 X,Y의 데이터타입이 다르므로 이를 실수tensor로 통합해주는것이다.

 

optim.zero_grad() 

 

가중치의 기울기를 0으로 초기화 해주는 이유는 

반복문이 실행되어 오차역전파가 실행됨에 따라

가중치가 깎이게 되는데 더 많이 깎이지 않기 위함이다.

 

그 결과 위와 같이 epoch가 돌때마다 오차가 줄어드는것을 볼 수 있다.

 


이제 이를 출력해보면

위와 같은 출력값이 나온다.

 

 

 

'Hello MLop > DL' 카테고리의 다른 글

MLop_DL_ResNet 실습  (0) 2022.12.04
MLop_DL_CNN 실습  (0) 2022.11.30
MLop_DL_손글씨 판단 예측  (0) 2022.11.24
MLop_DL_사인함수 예측하기  (0) 2022.11.22
MLop_DL_Deep Learnig  (1) 2022.11.21