본문 바로가기
머신러닝 야학 2기

[머신러닝 야학 2기] 2일차 - 레모네이드 판매 예측

by rubyda 2021. 1. 5.
728x90

https://ml.yah.ac/

 

opentutorials.org/course/4570/28974

 

첫번째 딥러닝 - 레모네이드 판매 예측 - 생활코딩

수업소개 레모네이드 판매량을 예측하는 딥러닝 모델을 텐서플로우를 이용하여 만들어 봅니다.  강의  손실의 의미  실습  소스코드 colab |  backend.ai ########################### # 라이브러리 사용 i

opentutorials.org

레모네이드 판매 예측(강의)


1. 과거의 데이터를 준비한다.

2. 모델의 구조를 만듭니다.

3. 데이터로 모델을 학습(FIT)합니다.

4. 모델을 이용합니다.

 

우리는 지도학습 강의에서 다음과 같은 순서로 진행을 하기로 배웠습니다. 이제 이 부분을 자세하게 코드로 알아보는 시간을 가지도록 하겠습니다.

https://opentutorials.org/course/4570/28974

먼저 전체적인 코드의 구조는 다음과 같습니다. 조금더 구체적으로 코드를 알아보도록 하겠습니다.

 

#1. 과거의 데이터를 준비한다.

# 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/lemonade.csv'
레모네이드 = pd.read_csv(파일경로)
레모네이드.head()
# 종속변수, 독립변수
독립 = 레모네이드[['온도']]
종속 = 레모네이드[['판매량']]
print(독립.shape, 종속.shape)

앞에 강의에서 한번 언급했던 내용입니다. 먼저 과거의 데이터를 준비하고 읽어온 후 종속변수와 독립변수를 분리를 해줘야 합니다.
 

#2. 모델의 구조를 만듭니다.

X = tf.keras.layers.Input(shape=[1])
Y = tf.keras.layers.Dense(1)(X)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')

다음은 모델 구조를 만드는 부분입니다. 다음 코드는 가장 간단한 형태로 신경망을 구현한 코드입니다. 이 단계는 아직 학습이 되기 전 상태입니다.

 

여기서 우리가 중요하게 봐야 할 부분이 있습니다.

X = tf.keras.layers.Input(shape=[1])

Y = tf.keras.layers.Dense(1)(X)

 

바로 파란색으로 칠해져 있는 숫자 부분입니다. 이 숫자의 의미는 무엇일까요?? 먼저 X 변수에 담긴 1의 의미는 바로 우리가 가지고 있는 독립변수의 수가 1이기 때문에 1을 넣어주는 것입니다. 다음으로 Y 변수에 담긴 변수는 종속변수의 수가 1개 이기 때문에 마찬가지로 1을 넣어주는 것입니다. 모델의 구조를 만들때 이 숫자의 역할이 굉장히 중요합니다!!

 

#3. 데이터로 모델을 학습(FIT)합니다.

model.fit(독립, 종속, epochs=1000, verbose=0)
model.fit(독립, 종속, epochs=10)

 

다음은 모델을 학습하는 부분입니다. fit이라는 도구가 모델을 학습시키는 도구입니다. 여기서 epochs의미는 무엇일까요?? 우리는 한번만 듣고 알아들을 수 있지만 더 많이 학습을 하고 반복을 하면 더 잘 이해하게 됩니다. 그 의미가 바로 epochs의 의미입니다. 즉 전체 데이터를 몇번 반복해서 학습을 하는가를 의미하게 됩니다. 이제 우리는 학습을 완료한 모델을 얻었습니다.

 

#4. 모델을 이용합니다.

print(model.predict(독립))
print(model.predict([[15]]))

이제 우리가 만든 모델에게 새로운 값을 넣어서 반환해주는 값을 확인할 수 있습니다.

 

레모네이드 판매 예측(손실)


전체 코드를 다시 살펴보기 전에 Loss에 대해 알아보는 시간을 가지도록 하겠습니다.

model.fit(독립, 종속, epochs=10)

다음 코드를 입력하면 아래와 같은 값이 나오게 됩니다. 먼저 fit 함수를 구체적으로 영역별로 나누어서 알아보도록 하겠습니다. 

https://opentutorials.org/course/4570/28974

파란색 영역 : 이번 학습이 몇번째 학습인지 알려주는 부분입니다.

주황색 영역 : 각 학습마다 얼마의 시간이 걸리는지 알려주는 부분입니다.

초록색 영역 : 학습이 어느정도 진행이 됬는가 즉 정답에 얼마나 가깝게 맞추고 있는가를 알려주는 부분입니다.

 

학습을 많이 하면 할수록 Loss 값이 조금씩 줄어드는 것을 알 수 있습니다!!

 

그렇다면 Loss의 의미는 무엇일까요??

 

우리는 독립변수를 모델에 넣으면 모델은 예측값을 만들어줍니다. 이 예측값종속값(실제 정답)을 비교하는것이 중요합니다. 이를 통해 이 모델이 얼마나 좋은지를 알 수 있기 때문입니다.

 

이때 차이의 제곱을 한 결과로 평균을 구한면 이 값이 바로 Loss입니다. 즉 Loss가 0에 가까울수록 학습이 잘되는 모델이라고 할 수 있습니다. 그래서 우리는 이 Loss값을 보면서 epoch마다 줄어들고 있는지 확인하는 것이 중요합니다.

 

 

전체 코드는 다음 github 주소에서 확인할 수 있습니다.

github.com/jaaaamj0711/Machine_learning_yahac/blob/main/lemon.ipynb

 

jaaaamj0711/Machine_learning_yahac

구글과 생활코딩이 함께하는 머신러닝 야학 2기 입니다. Contribute to jaaaamj0711/Machine_learning_yahac development by creating an account on GitHub.

github.com